const cluster = require('node:cluster');
const numCPUs = require('node:os').cpus().length;
if (cluster.isPrimary) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
require('./server');
}
Плюсы:
Минусы:
Когда использовать: Быстрое масштабирование CPU-интенсивных задач на одной машине
// Сервис A
const express = require('express');
const app = express();
app.get('/api/service-a', handleRequest);
// Сервис B
const app2 = express();
app2.get('/api/service-b', handleRequest);
Плюсы:
Минусы:
Когда использовать: Крупные распределенные системы с четкими границами модулей
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Плюсы:
Минусы:
Когда использовать: Продакшен окружения с переменной нагрузкой
exports.handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!')
};
};
Плюсы:
Минусы:
Когда использовать: Событийно-ориентированные задачи с переменной нагрузкой
const { Worker } = require('node:worker_threads');
function runService(workerData) {
return new Promise((resolve, reject) => {
const worker = new Worker('./worker.js', { workerData });
worker.on('message', resolve);
worker.on('error', reject);
});
}
Плюсы:
Минусы:
Когда использовать: CPU-интенсивные вычисления в рамках одного процесса
Стратегия | Уровень изоляции | Макс. масштаб | Сложность | Лучший сценарий использования |
---|---|---|---|---|
Cluster | Процесс | Одна машина | Низкая | Быстрое масштабирование CPU-bound |
Микросервисы | Сервис | Неограничен | Высокая | Крупные распределенные системы |
Контейнеризация | Контейнер | Неограничен | Средняя | Продакшен с переменной нагрузкой |
Serverless | Функция | Неограничен | Средняя | Событийные задачи с пиками нагрузки |
Worker Threads | Поток | Один процесс | Средняя | Параллельные CPU-задачи |
Cluster + Контейнеризация:
Микросервисы + Serverless:
Тип нагрузки:
Бюджет:
Команда:
Выбор стратегии зависит от: