NodeJS ile çoklu çekirdek kullanımı
Merhaba arkadaşlar. 32 çekirdekli Xenon işlemcili bir sunucu üzerinde nodejs ile proje hazırladım ve tek dosya olarak sorunsuz çalışıyor. Dosyamı pm2 start dosyadi.js şeklinde çalıştırıyorum. Amacım aynı anda birden fazla dosyayı çalıştırabilmek. Konuyu tam olarak anlatmam gerekirse;
pm2 start dosyaadi-1.js
pm2 start dosyaadi-2.js
pm2 start dosyaadi-3.js
şeklinde birbirinin aynı fakat farklı portlara sahip dosyaları çalıştırıyorum.
dışarıdan bu dosyalara işlem gönderdiğim zaman birinde işlem tamamlanmadan, diğerine geçmiyor. Yani benim birim zamanda yaptığım işlem sayısı yine aynı kalıyor. İşlemci ve Ram kullanımları yüksek değil, yani tavan değerlere çıkmıyor. Yaptığım bir işlem ortalama 40sn sürdüğü için ben 40 sn'de 3 veya daha fazla işlem yapmak istiyorum. Bunu nasıl gerçekleştirebilirim? Yardımlarınız için şimdiden teşekkürler.
Eğer worker işe yaramazsa Node.js'te bir çoklu çekirdeklerle çalışma işlemini aynı anda yürütmek için daha farklı yöntemler de mevcuttur. Örneğin:
- child_process modülünü kullanarak çoklu çekirdeklerle çalıştırmak: Node.js'in child_process modülü, bir node.js işlemini başka bir işlem olarak çalıştırmanıza olanak verir. Bu, aynı anda birden fazla işlemi çalıştırmak için kullanılabilecek bir yöntemdir. Örneğin:
const { fork } = require('child_process');
const worker1 = fork('./worker1.js');
const worker2 = fork('./worker2.js');
- micro kütüphanesini kullanarak çoklu çekirdeklerle çalıştırmak: micro kütüphanesi, node.js'i kullanarak microservisler oluşturmak için kullanılabilecek bir araçtır. micro ile birden fazla dosyayı aynı anda çalıştırabilir ve bunları bir çoklu çekirdeklerle çalıştırma işlemi olarak yapabilirsiniz. Örneğin:
const { micro } = require('micro');
const worker1 = micro('./worker1.js');
const worker2 = micro('./worker2.js');
module.exports = worker1;
module.exports = worker2;
Bu örnekte, worker1.js ve worker2.js dosyalarında çalışan iki çalışma işlemini aynı anda çalıştırmış olursunuz. micro kütüphanesi, node.js uygulamalarını çoklu çekirdeklerle çalıştırmak için kullanılabilecek bir araçtır.
micro kütüphanesi, node.js'in http isteklerini işlemeyi amaçlar ve bu nedenle, çalışma işlemlerinizi bir http sunucusu olarak çalıştırabilirsiniz. Bu, express gibi bir kütüphane kullanarak uygulamanızı yapılandırabilmenizi ve istekleri işlemenizi sağlar. Örneğin:
const { micro, router, send } = require('micro');
const app = router();
app.get('/worker1', async (req, res) => {
// worker1 işlemini çalıştır
const result = await runWorker1();
send(res, 200, result);
});
app.get('/worker2', async (req, res) => {
// worker2 işlemini çalıştır
const result = await runWorker2();
send(res, 200, result);
});
module.exports = app;
Bu örnekte, /worker1 ve /worker2 adreslerine gönderilen isteklerde, worker1 ve worker2 işlemleri çalıştırılır ve sonuçları bir http cevabı olarak gönderilir. Bu şekilde, micro kütüphanesini kullanarak birden fazla çalışma işlemini aynı anda yürütebilirsiniz.
Dikkat: micro kütüphanesi, node.js'in --experimental-module bileşeni ile birlikte kullanılır. Bu bileşen, node.js'in ECMAScript Modülleri (ESM) desteğini sağlar.
child_process modülü hakkında daha fazla bilgi için aşağıdaki kaynakları inceleyebilirsiniz:
Node.js Dökümantasyonu: https://nodejs.org/api/child_process.html
child_process modülünün GitHub sayfası: https://github.com/nodejs/node/blob/main/lib/child_process.js
micro kütüphanesi hakkında daha fazla bilgi için aşağıdaki kaynakları inceleyebilirsiniz:
micro kütüphanesi Dökümantasyonu: https://github.com/zeit/micro#api