ماژول خوشهبندی
ماژول خوشهبندی در نود.جیاس (Cluster Module) ابزاری حیاتی برای استفاده بهینه از چند هستهای بودن پردازندهها است. به صورت پیشفرض، نود.جیاس بر روی یک حلقهی رویداد تکریشهای کار میکند که در محیطهای با بار سنگین ممکن است محدودیتهای عملکرد ایجاد کند. ماژول خوشهبندی این محدودیت را با ایجاد چند پروسهی Worker تحت یک پروسهی Master حل میکند. هر Worker حلقهی رویداد مستقل خود را دارد و میتواند درخواستهای HTTP یا پردازشهای محاسباتی را بهطور موازی انجام دهد، که منجر به افزایش توان عملیاتی و کاهش تأخیر میشود.
این ماژول در پروژههای وب سرور، APIهای زمان واقعی و سرویسهای CPU-محور بسیار مفید است. با استفاده از ماژول خوشهبندی، توسعهدهندگان میتوانند Workerها را مدیریت، نظارت و در صورت نیاز مجدداً راهاندازی کنند، در حالی که از بهترین روشها برای جلوگیری از نشت حافظه و الگوریتمهای ناکارآمد پیروی میشود. مفاهیم کلیدی نود.جیاس مانند سینتکس، ساختار دادهها، الگوریتمها و اصول OOP در این ماژول به کار میروند تا سیستمهایی با عملکرد بالا و مقیاسپذیر ایجاد شود.
در این آموزش، یاد میگیرید چگونه پروسههای Master و Worker ایجاد کنید، مدیریت خطا انجام دهید، ترافیک را بهینه توزیع کنید و منابع سیستم را به شکلی کارآمد استفاده نمایید. تسلط بر ماژول خوشهبندی به شما امکان میدهد سیستمهای پایدار، مقاوم در برابر خطا و مقیاسپذیر در نود.جیاس بسازید.
مثال پایه
textconst cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`پروسه Master با PID ${process.pid} در حال اجراست`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker با PID ${worker.process.pid} متوقف شد. در حال راهاندازی مجدد...`);
cluster.fork();
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end(`سلام از Worker با PID ${process.pid}\n`);
}).listen(8000);
console.log(`Worker با PID ${process.pid} شروع شد`);
}
در این مثال پایه، cluster.isMaster بررسی میکند که آیا پروسهی جاری Master است یا خیر. پروسهی Master بر اساس تعداد هستههای CPU، Worker ایجاد میکند که هرکدام حلقهی رویداد مستقل خود را دارند و درخواستهای HTTP را موازی پردازش میکنند. رویداد cluster.on('exit') برای نظارت بر خاتمه Workerها استفاده میشود و در صورت توقف یک Worker، پروسهی جدید ایجاد میکند. process.pid برای شناسایی پروسهها استفاده میشود. این مثال مفاهیم پایهای ماژول خوشهبندی و روشهای بهینهسازی عملکرد و جلوگیری از نشت حافظه را بهخوبی نمایش میدهد.
مثال کاربردی
textconst cluster = require('cluster');
const http = require('http');
const os = require('os');
class WorkerManager {
constructor() {
this.numCPUs = os.cpus().length;
this.workers = [];
}
start() {
if (cluster.isMaster) {
console.log(`پروسه Master با PID ${process.pid} در حال اجراست`);
for (let i = 0; i < this.numCPUs; i++) {
this.createWorker();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker با PID ${worker.process.pid} متوقف شد. در حال راهاندازی مجدد...`);
this.createWorker();
});
} else {
this.createServer();
}
}
createWorker() {
const worker = cluster.fork();
this.workers.push(worker);
}
createServer() {
const server = http.createServer((req, res) => {
const start = Date.now();
while (Date.now() - start < 100) {}
res.writeHead(200);
res.end(`Worker با PID ${process.pid} این درخواست را پردازش کرد\n`);
});
server.listen(8000, () => {
console.log(`Worker با PID ${process.pid} در پورت 8000 گوش میدهد`);
});
}
}
const manager = new WorkerManager();
manager.start();
در این مثال پیشرفته، کلاس WorkerManager مدیریت پروسهها و سرورهای Worker را با الگوی شیگرایی انجام میدهد. پروسهی Master Workerها را مانیتور میکند و در صورت توقف هرکدام، آنها را مجدداً راهاندازی میکند. هر Worker درخواستهای HTTP را پردازش کرده و یک شبیهسازی از کار CPU-محور انجام میدهد. این مثال اصول OOP، الگوریتمها، مدیریت خطا و بهینهسازی عملکرد را نشان میدهد و نمونهای واقعی از ساخت اپلیکیشنهای مقیاسپذیر نود.جیاس ارائه میدهد.
بهترین روشها و اشتباهات رایج در استفاده از ماژول خوشهبندی:
- تعداد Workerها را متناسب با هستههای CPU تنظیم کنید.
- Workerها را مانیتور کرده و در صورت توقف مجدداً راهاندازی کنید.
- منابع مانند اتصال به دیتابیس یا فایلها را به درستی مدیریت و آزاد کنید.
- مدیریت خطا را در هر Worker انجام دهید، نه فقط در Master.
- از الگوریتمها و عملیات غیرهمزمان استفاده کنید تا حلقه رویداد مسدود نشود.
- ارتباط بین پروسهها (IPC) را ایمن و ورودیها را اعتبارسنجی کنید.
با رعایت این نکات، اپلیکیشنهای نود.جیاس مقیاسپذیر، پایدار و با عملکرد بالا ایجاد میشوند.
📊 جدول مرجع
نود.جیاس Element/Concept | Description | Usage Example |
---|---|---|
cluster.isMaster | بررسی اینکه آیا پروسه Master است | if (cluster.isMaster) { ... } |
cluster.fork() | ایجاد یک پروسه Worker جدید | const worker = cluster.fork(); |
cluster.on('exit') | راهاندازی مجدد Worker هنگام توقف | cluster.on('exit', (worker)=>{ cluster.fork(); }); |
process.pid | شناسه پروسه فعلی | console.log(process.pid); |
http.createServer | ایجاد سرور HTTP در هر Worker | http.createServer((req,res)=>{res.end('ok')}).listen(8000); |
تسلط بر ماژول خوشهبندی امکان استفاده بهینه از هستههای CPU، مدیریت پروسهها، تحمل خطا و طراحی سیستمهای مقیاسپذیر را فراهم میکند. گام بعدی میتواند یادگیری Worker Threads، بهینهسازی IPC، مانیتورینگ حافظه و تکنیکهای پیشرفته بارگذاری متعادل باشد. مستندات رسمی نود.جیاس و نمونههای متنباز منابع مناسبی برای یادگیری عمیقتر هستند.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود