Mikroservis Notları

Gerçekten Mikroservis gerekli mi;

  • + Projeye yeni eklenen bir modül için ayrı bir servis yazma ihtiyacı hissediliyorsa,
  • + Bir modülde yaşanan sıkıntı bütün sistemin geç cevap vermesine hatta durmasına neden oluyorsa,
  • + Sadece bir modülde güncelleme yapma sonucunda bütün sistemi güncellemek sıkıntı yaratıyorsa,
  • + Belirli modüllere çok aşırı yükleme oluyor ve bazıları çok nadir kullanılıyor ise sadece kaynak ihtiyacı fazla olan modül için kaynak arttırımı yapmak isteniyorsa,


Süreç için gerekli kaynaklar ve altyapı;

  • > DevOps Ekibi
  • > Building, Configuration ve Deploying Süreçler için CI/CD pipeline 
  • > Cloud Provider ile auto-scale özelliği
  • > Container ve Container Orchestration ile kaynak kullanımı yönetimi
  • > Monitoring araçlar (OpsGenie, NewRelic, ...)
  • > Her servis için birbirinden izole veri depolama alanı 


Yapılan Hatalar;

  • - Servisler arası ortak kütüphane kullanılmamalı (Bağımsızlıktan feragat etmemek için)
  • - Ortak business katmanı için shared servisler oluşturulabilir
  • - Authentication işlemlerinin merkezileştirilmemesi 
    • API Gateway kullanılmaması olayı, 
    • API Gateway'ler aynı zamanda hangi client hangi servisleri ne sıklıkta kullanıyor bilgisi de alınabilmesini sağlar.



Suat Köse Medium yazısından 

MySQL Notlarım 1


MySQL ve çoğu sql standartları için kullanışlı birkaç not....

SELECT Sorgu Sonucunu başka bir tabloya aktarma

Eğer sorgu sonucundan geçici (sadece mevcut bağlantıya özel) yeni bir tablo yaratıp verileri de aktarmak istiyorsak:

CREATE TEMPORARY IF NOT EXISTS TABLE newTableFromResults AS (
    SELECT ID, NAME, PHONE FROM users WHERE AGE>18
);

Eğer sorgu sonucundan kalıcı yeni bir tablo yaratıp verileri de aktarmak istiyorsak:

CREATE TABLE newTableFromResults 
SELECT ID, NAME, PHONE FROM users WHERE AGE>18;

Eğer var olan bir tabloya sonuçları eklemek istiyorsak:

INSERT INTO oldTable(ID, NAME, PHONE)
SELECT ID, NAME, PHONE FROM users WHERE AGE>18;

Dosyadaki Verileri Tabloya Aktarma

Sütunları belli bir karakterle ayrılmış bir metin dosyasındaki verileri bir tabloya aktarmak için LOAD DATA sorgusu kullanılabilir:

LOAD DATA INFILE 'var/file/path/data.txt' INTO TABLE users
   FIELDS TERMINATED BY '#'
(NAME, LASTNAME, BIRTHDATE)

** Eğer 

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
şeklinde bir hata alınırsa 
SHOW VARIABLES LIKE 'secure_file_priv';
sorgusu ile güvenli dosya yolu bilgisi öğrenilir ve (konum yoksa oluşturulur) yüklenecek dosya belirtilen konuma konulur.

** Dosya secure_file_priv ile belirtilen konuma konulmasına rağmen "permission denied" hatası alınırsa LOAD DATA dan sonra LOCAL yazılır.

LOAD DATA LOCAL INFILE '...' INTO TABLE ...

Metin formatındaki tarih-saat alanının görünen formatını değiştirmek

STR_TO_DATE fonksiyonu ile metin alanını date alanına dönüştürürüz:

STR_TO_DATE(myTable.STARTINGDATE, '%Y%m%d%H%i%s')

Daha sonra date alanının formatını DATE_FORMAT fonksiyonu ile değiştirebiliriz ve son durum:

SELECT 
DATE_FORMAT(
   STR_TO_DATE(myTable.STARTINGDATE, '%Y%m%d%H%i%s'),
'%d.%m.%Y %H:%i:%s')
FROM myTable;



Javascript Notlarım 1


Kullanılışlı javascript notlarımın ilk postası...

Jquery ile Metindeki Html Tag'lerini Temizleme


Bir string'teki html taglerini temizlemek bu kadar kolay:
let myContent = '<div id="test">Hello <span>world!</span></div>';
console.log($(myContent).text());

// Sonuç : Hello world!



JS Objesini Kodlanmış Url Parametre Formatına Dönüştürme


JQuery.param fonksiyonu ile js objesi encoded url'e dönüştürülebilir. 

Kodlanmış(encoded) url parametreleri javascript decodeURIComponent ile decode edilip sonra basit bir yöntemle js objesine dönüştürülebilir.

Bir fonksiyonu koşula göre override etme

calculate isminde bir fonksiyonumuz olsun. Bunu window nesnesinde tanımlamış olalım, ve bütün sayfalarda window nesnesi üzerinden global bir şekilde eriştiğimizi varsayalım. Fakat bir sayfamızda bir koşula göre farklı bir fonksiyonu çağırmak istediğimizi farzedelim ve global olan fonksiyonumuzu da değiştirmemeliyiz. Bu durumda şu şekilde bir yöntemle işin içinden çıkabiliriz.

Mevcut Projeyi Git'e Eklemek


Merhaba,
Mevcut bir projemizi Git'e nasıl ekleyeceğimize bakalım.

Öncelikle Git'i indirip yüklememiz gerekiyor.
Git İndir

Çeşitli arayüzü olan Git istemci uygulamaları mevcut (https://git-scm.com/downloads/guis), ama biz bunlardan birini yüklemeden git komutlarıyla projemizi git'e ekleyeceğiz.


  • Git Bash ile veya Windows'ta cmd (Command Tool) ile projemizin bulunduğu dizine gideriz.
    cd /projectFolderPath/
  • Bulunduğumuz dizinde local git reposu oluşturmak için (dizine gitmeden dizin yolu vererek de aynı sonuca ulaşabiliriz.) Bu komutla ana branch'imiz olan master branch'i de yaratılır.
    # .git dosyaları ve alt klasörleri oluşturulur
    git init
    # ya da "git init /projectFolderPath/" komutuyla 
  • Git reposu hazır edildikten sonra projemizdeki bütün dosyaların ya da sadece seçtiğimiz dosyaların versiyonunun takip edilmesi için git'e eklenir. Git in dosyalardaki değişiklikleri takip etmesi için bu komut kullanılır.
    # Bulunduğumuz dizindeki bütün dosyalar git'e eklenir
    git add .
    
  • Git'e kendimizi tanıtmak ve bundan sonraki bütün commit'lerimizde kullanması için aşağıdaki komutları çalıştırmalıyız
    git config --global user.name "Johnny Depp"
    git config --global user.email johnnydepp@mail.com
    
  • Eklediğimiz dosyaları git'e kaydetmek için (local olarak kayıt yapılır)
    git commit -m 'First Commit'
    
  • Projemizi uzak bir repoya göndermek için, öncelikle uzak repo url bilgisi git'e tanıtılır.
  • git remote add origin <uzaktaki repo url>
  • Yapılan commit'ler tanımlanan uzak repoya göndermek için
    git push origin master

Böylece mevcut projemizi git'e bağlamış olduk. Artık proje dosyalarında yaptığımız değişiklikleri commit ederek versiyonlarını tutabiliriz.

Keyifli kodlamalar...

Son Yazım

Mikroservis Notları

Gerçekten Mikroservis gerekli mi; + Projeye yeni eklenen bir modül için ayrı bir servis yazma ihtiyacı hissediliyorsa, + Bir modülde yaşanan...