İleri Nodejs Notları — 2 Process’ler ve PM2 ile Sunucu Yönetimi
Yazı dizimizin 2. bölümünde nodejs uygulamamızdaki process mantığını ve bunun production ortamında PM2 aracıyla yönetimine değineceğiz. Nodejs uygulamamızı geliştirme aşamasında node anahtar kelimesiyle js dosyamızı ayağa kaldırırız. Ayağa kalkan bu dosya kimi yazılım kütüphanelerini, w8 gibi javascript motorlarını kullanır ve işleme başlar. Node dosyamız ayağa kalktıktan sonra biz de gönül rahatlığıyla işlemin tamamlandığını düşünürüz. Fakat kimi durumlarda bu dosya crash olabilir. Örneğin basit bir for döngüsü, uygulamadaki CPU kullanımını maksimum seviyeye getirip uygulamayı durdurabilir. JSON objesini görmek için yazdığınız masum bir console.log satırı hard diskinizi şişirip sistemi kitleyebilir.
Bu ve bunun gibi durumlar için uygulamamızdaki bazı yapılandırmalar kaçınılmaz olacaktır.
Process Objesi
Node anahtar kelimesiyle başlayan operasyonun bazı yapılandırmalardan geçtiğini belirtmiştik. Terminal ekranıma node -p “process.versions” komutunu yazdığımda karşıma şöyle bir ekran geliyor.
Görüldüğü üzere node beraber çalıştığı arkadaşların detaylarını burada bize belirtmekte. Bu ne işe yarayacak diyebiliriz? Şöyle bir örnek verelim:
Node versiyonuna göre kodlamamızı js dosyası içerisinde yönetebiliriz. Aşağıdaki kod bloğuna bakalım.
Process objesinden versiyonlara ulaştığımız için versiyona göre kimi kod bloklarını çalıştırmak mümkün.
Aynı obje üzerinden kimi çıkış ve hata işlemlerini de yakalayabiliriz. Örneğin uygulama kapanmadan önce son bir durak olarak uğramasını isteyeceğimiz bir kod bloğu olabilir.
Veya uygulama hata verdiğinde de bir kod bloğuna uğramasını isteyebiliriz.
Bu ve bunun gibi işlemleri nodejs in resmi sitesinden görmemiz mümkün. ( https://nodejs.org/api/process.html )
Processler ve Cluster
Nodejs uygulamamızdaki işlemleri cluster mantığına göre CPU sayımızı baz alarak bölmemiz mümkün. Bu iş parçaçıkları kendi aralarında mesajlaşabilir ve bir parent child mantığıyla yönetilebilir. Nodejs in cluster mantığı CPU üzerinde doğru kullanıldığında ciddi avantajlar sağlamakta. Cluster yapılandırmasını nodejs in cluster modülüyle rahatlıkla yapabilirsiniz. ( https://nodejs.org/api/cluster.html ) Dilerseniz PM2 vb farklı araçlarla da cluster yapıları da inşa edebilirsiniz.
Ayrıca bu konuda Burak Selim Şenyurt’un yazısına göz atmakta fayda var. ( https://www.buraksenyurt.com/post/clustered-node-js )
Production Ortamının Olmazsa Olmazı PM2
PM2 nodejs için hazırlanmış oldukça gelişmiş bir process yönetim paketi. PM2 ile sunucu üzerindeki node paketlerinizi yönetebilir, sunucunun kimi durumlarına göre bu paketlerde işlemler yapabilirsiniz. Örneğin ram tüketiminin belli bir noktaya geldiği anda node paketinizi yeniden başlatmanız mümkün.
Bir modülümü pm2 start komutuyla çalıştırdıktan sonra o modulün ram, cpu tüketimini, online veya offline olduğunu görebilirim.
Burada pid kolonuyla process leri de görüp id üzerinden işlem yapmamız da mümkün. Biraz daha gelişmiş bir monitör ekranı için ise pm2 monit komutu aşağıdaki çıktıyı verecektir.
Anlık olarak monitörden uygulamanızı bu sayede takip edebilirsiniz. PM2 paketini Ngnix gibi gelişmiş web sunucularında rahatlıkla kullanabilir, paketlerin sunucu üzerindeki ram, cpu işlemlerini yukarıdaki komutlarla izleyebilirsiniz. Ngnix web sunucusu gibi Heroku, Docker entegrasyonları da resmi sitede mevcut.
Nodejs dünyasında kodla olduğu kadar sunucularla da haşır neşir olmak ve doğru yapılandırmayı gerçekleştirmek hayati önemde. Bahaneyle sunucu alemine adım atmış oluyoruz fena mı :)
Bir sonraki yazımızda görüşmek üzere.