"Enter"a basıp içeriğe geçin

Node JS Clustering

Bu yazımda sizlere node js üzerinde kullanılan clustering yapısından bahsetmek istiyorum.

Clustering nedir

Clustering, bir projedeki yükü dağıtmaya ve bu yükü dağıtarak projeler arasında dinamik bir etkileşim kurmayı sağlar.

Node JS ve çoklu işlemler

Node js üzerinde çoklu işlemler desteklenmez. Her şey tek thread üzerinde çalışır bu yüzden eğer yüksek trafikli bir web siteniz varsa veya ciddi yük altında iseniz tek node js işlemi genelde cevapsız kalıyor. Çünkü işlemcide sadece tek çekirdeği kullandığından daha fazla işlemlere izin veremiyor. Bu yüzden clustering, çoklu işlemleri destekleyerek yavaşlamanın önüne geçiyor.

Clustering Nasıl Kullanılır

Clustering kullanmadan önce bilmeniz gereken 2 önemli terim var, Master ve worker.

  • Master: Ana iş parçacığınız, burada çoklu işlemler için workerler oluşturabilir ve bu workerleri dinleyebilir ve workerler arasındaki iletişimi sağlayabilirsiniz.
  • Worker: Asıl işi yapacak işlem, sunucu oluşturma ve düzenleme işlemleri burada yapılır. Yapılacak işlemler doğrudan buraya yönlendirilir ve işlemcinin tek parçacığında çalışmış olur.

Clustering Modülleri

Clustering işlemlerini kolaylaştırmak için birkaç kütüphane bulunmaktadır. Hepsine değinemeyecek olsamda genel olarak en çok kullanılanlarına değineceğim.

PM2

PM2, clustering, container ve web sunucusunu yönetmek için kullanılan en iyi modüllerden birisidir. PM2 kullanarak clustering çalıştırmak isterseniz “pm2 scale” komudunu kullanmanız gerekir, bu komutta argüman olarak dosya ismi, maksimum çalışacağı portu gireriz.

Forever

İkinci kullanılan modül foreverdir. Forever, PM2 ya kıyasla pek fazla tercih edilmez. Çünkü load balancing (yük dengeleme) konusunda pek iyi değildir. Ancak forever üzerinde de kullanmak isterseniz “forever -m” kullanabilirsiniz. ilk parametre maksimum miktarı ve sonraki parametre ise dosya ismini ifade eder.

Clustering Avantajları Ve Dezavantajları

Clustering mantığının avantajları ve dezavantajları bulunmaktadır.

Avantajları

  1. Performans: Birden fazla proje çalıştırmak elbetteki projenizin performansını yüksek düzeylere çıkaracaktır.
  2. Ölçeklenebilirlik: İşlemcinizin neredeyse bütün çekirdeklerini kullanacağı için projeniz çok daha fazla yük altında çalışabilir halde olur.
  3. Arıza Toleransı: workerlerden birisi kapanırsa diğer workerlere iş akışı devam ettirilebilir.
  4. Yük dengeleme: Boş olan workerlere iş atanacağından yüksek trafikte yük hafifleyecektir.

Elbette dezavantajları da bulunmaktadır.

Dezavantajları

  1. Kaynak Tüketimi: Yüksek sayıda işlem açılması ve yüksek trafikte düzgün bir şekilde yapılandırılmayan projeler sunucunun doğrudan bütün kaynaklarını tüketir.
  2. Kod Karmaşıklığı: Clustering kullanıldığında master veya worker processlerinin yanı sıra ek olarak bu workerlere port atanması, master bölümünde de bunları yönetme ihtiyacı duyacağınız ve iki ayrı kodun oluşturabileceği okunaklık gibi sorunlar nedeniyle ciddi bir sorun olarak görülebilir.
  3. Zaman Alıcı: daha önceden clustering kullanılmadan geliştirilen projeler clustering kullanacak hale getirilmesi çok zaman alıcı olabilir. Master işlemlerini kodlamak için ayrı bir zaman harcaması gerekmektedir.

Zaman alması en büyük sorunlardan birisidir çünkü proje büyüdükçe kullanılan microservice de clustering yapılacağı varsayılırsa (varsayılmasa bile çok yüksek bir zaman gerekmektedir) zamanınızın büyük bir bölümü clustering yapmaya gidecektir.

Container ve clustering

Clustering işletim sistemlerinin değişmesinden ötürü yanlış çalışabilir. Bu yüzden clustering projelerini containerize etmek çok mantıklı bir seçim olabilir. Eğer düzgün ayarlanırsa docker swarm veya kubernetes teknolojisi kullanılarakta clustering yapılabilir. Cloud projelerinde genelde kubernetes tercih edildiğinden projeleriniz optimize bir şekilde çalışacaktır. Bu yüzden buradaki yazıda da denildiği gibi container teknolojisi kullanacaksanız clustering pek mantıklı olmayabilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir