~3 دقیقه مطالعه • بروزرسانی ۲۲ بهمن ۱۴۰۴
1. ماژول Cluster در Node.js چیست؟
ماژول Cluster به توسعهدهندگان اجازه میدهد چندین پردازش Node.js را اجرا کنند که همگی یک پورت سرور را به اشتراک میگذارند. این قابلیت باعث افزایش کارایی و استفاده بهتر از چند هستهای بودن پردازنده میشود.
2. نحوه کار Cluster
در Cluster یک پردازش اصلی (Primary) و چند پردازش فرعی (Worker) وجود دارد.
- Workerها با استفاده از
child_process.fork()ایجاد میشوند. - ارتباط بین پردازش اصلی و Workerها از طریق
IPCانجام میشود.
روشهای توزیع درخواست
- Round-robin (پیشفرض): پردازش اصلی درخواستها را دریافت کرده و بین Workerها توزیع میکند.
- Direct accept: پردازش اصلی سوکت را ایجاد کرده و آن را به Workerها میدهد تا خودشان اتصال را بپذیرند.
3. مثال ساده از Cluster
const cluster = require('node:cluster');
const http = require('node:http');
const numCPUs = require('node:os').availableParallelism();
if (cluster.isPrimary) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\\n');
}).listen(8000);
}در این مثال، به تعداد هستههای CPU، پردازش Worker ساخته میشود و همه آنها یک سرور مشترک را اجرا میکنند.
4. کلاس Worker
هر Worker در Cluster با یک شیء Worker نمایش داده میشود که از EventEmitter ارثبری میکند.
رویدادهای مهم Worker
disconnect: قطع شدن کانال ارتباطیerror: بروز خطا در Workerexit: پایان اجرای Workerlistening: آماده بودن برای دریافت درخواستmessage: دریافت پیام از Workeronline: فعال شدن Worker پس از fork
5. مدیریت Workerها
برای کنترل Workerها میتوان از متدهای زیر استفاده کرد:
worker.disconnect(): قطع ارتباط به صورت امنworker.exitedAfterDisconnect: تشخیص خروج عادی یا خطاworker.isConnected()وworker.isDead(): بررسی وضعیت Workerworker.kill(): پایان فوری Worker
6. تنظیمات Cluster
شیء cluster.settings شامل تنظیماتی مانند موارد زیر است:
execArgvexecargscwdserializationsilentstdiouidوgidinspectPortwindowsHide
همچنین میتوان با استفاده از cluster.setupPrimary() رفتار پیشفرض fork را تنظیم کرد و با cluster.schedulingPolicy نوع زمانبندی را مشخص نمود.
7. نکات مهم
- ماژول
Node.js Clusterمسیریابی یا مدیریت Session را انجام نمیدهد، بنابراین نباید Sessionها فقط در حافظه Worker ذخیره شوند. - Workerها میتوانند بدون تأثیر روی سایر Workerها متوقف یا مجدداً اجرا شوند.
- مدیریت تعداد Workerها بر عهده برنامهنویس است.
نتیجهگیری
ماژول Cluster یکی از ابزارهای قدرتمند برای افزایش مقیاسپذیری در Node.js است. با توزیع بار بین چند پردازش و استفاده از ارتباط IPC میتوان سیستمهایی سریعتر و پایدارتر ساخت. مدیریت صحیح Workerها و طراحی مناسب معماری نقش مهمی در موفقیت این روش دارد.
نوشته و پژوهش شده توسط دکتر شاهین صیامی