Skip to main content

Що робить PM2 під час масштабування?

PM2 - це потужний менеджер процесів (process manager) для Node.js, і під час масштабування він виконує роль автоматичного кластеризатора й балансувальника навантаження.

Якщо коротко:

PM2 дозволяє масштабувати Node.js-застосунок по всіх ядрах CPU, запускаючи кілька процесів (воркерів), і розподіляє між ними запити - без потреби вручну використовувати cluster.

Тепер розберемо це детально.

Що таке PM2

PM2 (Process Manager 2) - це менеджер для керування Node.js-застосунками, який забезпечує:

  • запуск, перезапуск і моніторинг процесів;
  • логування й керування пам'яттю;
  • кластеризацію (масштабування);
  • zero-downtime-деплой.

Простіше кажучи:

PM2 - це "надбудова" над Node.js, яка сама керує cluster і child_process, робить їх прозорими для розробника.

1. Як PM2 масштабує застосунок

Коли ти запускаєш команду:

javascript
pm2 start app.js -i max

PM2 робить таке під капотом:

  1. Визначає, скільки CPU-ядер є в системі (наприклад, 8).
  2. Запускає 8 незалежних процесів Node.js із кодом app.js.
  3. Створює вбудований кластер (аналог cluster з Node.js).
  4. Розподіляє HTTP-запити між процесами за принципом Round Robin.
  5. Стежить за станом процесів - перезапускає їх у разі збою.

Отже, PM2 робить кластеризацію автоматично, без потреби писати код на cluster.

2. Приклад роботи в різних режимах

Масштабування вручну:

javascript
pm2 start app.js -i 4

⟶ Запускає 4 екземпляри застосунку (за кількістю, яку ти вказав).

Масштабування по всіх ядрах CPU:

javascript
pm2 start app.js -i max

⟶ PM2 автоматично дізнається, скільки в тебе ядер, і запустить по одному процесу на кожне ядро.

Динамічне масштабування:

javascript
pm2 scale app +2

⟶ Додає 2 додаткові воркери до вже працюючих.

javascript
pm2 scale app 0

⟶ Зупиняє всі процеси застосунку.

3. Що робить PM2 "під капотом" під час масштабування

КрокЩо відбувається
1PM2 запускає кілька Node.js процесів (через cluster.fork())
2Кожен процес має свій event loop, пам'ять і PID
3PM2 стає "майстром" і керує воркерами
4Запити розподіляються між воркерами (Round Robin)
5PM2 відстежує здоров'я процесів (CPU, пам'ять, статус)
6У разі збою воркер автоматично перезапускається
7Можна масштабувати без зупинки (Zero-Downtime Reload)

4. Масштабування без простою (Zero-Downtime Reload)

Команда:

javascript
pm2 reload app

⟶ Перезапускає всі воркери по черзі, щоб сервер не переставав приймати запити.

Це еквівалент hot-reload кластера:

Один процес перезапускається → решта продовжують обслуговувати трафік → після запуску нового - наступний воркер перезапускається.

Ідеально для оновлення продакшн-коду без простоїв.

5. Приклад: Express-сервер із PM2

app.js

javascript
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send(`Відповідь від процесу ${process.pid}`); }); app.listen(3000, () => { console.log(`Сервер запущено PID=${process.pid}`); });

Запуск:

javascript
pm2 start app.js -i max

Тепер:

  • Кожен процес слухає порт 3000.
  • PM2 виступає як балансувальник - розподіляє запити.
  • Якщо один процес падає, PM2 запускає новий.
  • Якщо трафік зріс - можна додати воркери командою pm2 scale app +2.

6. Як PM2 розподіляє навантаження

PM2 використовує той самий механізм, що й cluster:

  • Master-процес слухає порт.
  • Воркери підключаються до нього.
  • Вхідні запити розподіляються по воркерах рівномірно.

Алгоритм за замовчуванням - Round Robin, тобто кожен наступний запит отримує наступний процес.

7. Що ще робить PM2 під час масштабування

МожливістьЩо робить
МоніторингВідстежує CPU, пам'ять, uptime (pm2 monit)
Автоматичний перезапускЯкщо процес упав - піднімає новий
Auto-ReloadПерезапуск при зміні файлів (--watch)
Cluster ModeАвтоматично використовує cluster API Node.js
Ecosystem fileДозволяє описати кілька застосунків і оточень (ecosystem.config.js)
PM2 Plus / PM2 EnterpriseНадсилає метрики в хмару й дає вебпанель
Docker integrationЛегко масштабується всередині контейнерів

8. Відмінність PM2-масштабування від інших підходів

ПідхідЯк масштабуєДе використовується
clusterВручну в коді через APIПрямо в Node.js
PM2Автоматично через CLIПросте локальне масштабування
Docker/KubernetesНа рівні контейнерівГоризонтальне масштабування
Nginx / Load BalancerМіж серверамиМіжсерверний розподіл

Тобто:

PM2 - це вертикальне масштабування (по ядрах CPU), а Kubernetes / Nginx - горизонтальне (по серверах).

9. Переваги PM2 під час масштабування

ПеревагаОпис
Легко запуститиОдна команда: pm2 start app.js -i max
Використовує всі ядра CPUБез ручного cluster-коду
Автоматичний рестартНе потрібно стежити за падіннями
Zero Downtime ReloadОновлення без перерв
Моніторинг і логиЗручні інструменти для DevOps
Працює з будь-якими фреймворкамиExpress, Nest, Fastify та ін.

10. Обмеження PM2

НедолікОпис
Працює в межах одного сервераНе масштабує по різних машинах
Не синхронізує станиСесії й кеш потрібно зберігати в Redis/БД
Не балансує між машинамиДля цього потрібен Nginx, AWS ELB чи Kubernetes
Менше контролю, ніж при ручному clusterPM2 сам вирішує, як розподіляти процеси

Підсумок

КритерійОпис
Що робить PM2 під час масштабуванняЗапускає кілька Node.js-процесів і розподіляє навантаження
Як реалізованоЧерез вбудований cluster API
Тип масштабуванняВертикальне (по ядрах CPU)
КеруванняЧерез CLI (start, scale, reload)
ОсобливостіZero-downtime, моніторинг, автоматичний рестарт
Підходить дляЗастосунків, API, продакшн-серверів на одній машині

Висновок:

Під час масштабування PM2 створює кластер процесів Node.js, використовує всі CPU-ядра, автоматично балансує навантаження, стежить за станом воркерів і перезапускає їх у разі збою - усе це без потреби писати код на cluster.

Це ідеальний інструмент для вертикального масштабування Node.js-застосунків і керування ними в продакшені.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.