Робимо Node JS багатопоточним

Node.js є однопотоковим середовищем виконання, що означає, що воно може виконувати лише одне завдання одночасно. Проте, воно підтримує багатопотоковість за допомогою робочих потоків (worker threads).

Один із способів реалізації балансування навантаження на основі кількості ЦП за допомогою Express.js – це створення кількох робочих потоків і розподіл вхідних запитів між ними. Ось приклад реалізації:

У цьому коді показано реалізацію балансування навантаження з використанням кластерів в Node.js. Майстер-процес створює робочі потоки на основі кількості доступних ЦП за допомогою методу os.cpus().length. Кожен робочий потік запускає свою власну копію програми Express.js і прослуховує окремий порт. Події запуску та виходу робочих потоків слухаються в майстер-процесі, що дозволяє замінити потік, що закінчився новим.

При виході (завершенні) робочого потоку (worker) з кодом cluster.on('exit', ...), майстер-процес реагує на цю подію і створює новий робочий потік за допомогою cluster.fork(). Таким чином, коли один з робочих потоків закінчує роботу, майстер-процес автоматично створює новий робочий потік, щоб замінити його. Це забезпечує безперервну роботу додатку, навіть якщо один з робочих потоків завершується.

Це важливо для забезпечення безперервності обробки запитів і балансування навантаження між робочими потоками. Коли один потік виходить, інший потік бере на себе обробку нових запитів. Таким чином, заміна вибувшого потоку новим дозволяє підтримувати стабільну роботу додатку і розподілення навантаження на доступні робочі потоки.

 

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *