Что такое вертикальное масштабирование?

«Что такое вертикальное масштабирование?» — вопрос из категории Архитектура, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Вертикальное масштабирование (scaling up) — это стратегия увеличения производительности приложения за счет добавления ресурсов (CPU, RAM, дискового пространства, скорости сети) на существующий сервер или его замену на более мощный.

Контекст в Node.js: Поскольку Node.js является однопоточным (для JavaScript-кода), вертикальное масштабирование часто означает увеличение производительности одного инстанса приложения.

Пример: Ваше Node.js-приложение на Express, развернутое на виртуальной машине с 2 ядрами CPU и 4 ГБ RAM, начинает исчерпывать память при высокой нагрузке. Решение — перейти на конфигурацию с 4 ядрами и 16 ГБ RAM.

Как это работает в коде? Сам код приложения не меняется, но он получает больше ресурсов для работы.

// Приложение остается неизменным
const express = require('express');
const app = express();

app.get('/heavy-task', (req, res) => {
  // Имитация CPU-intensive задачи
  let sum = 0;
  for (let i = 0; i < 1e9; i++) { sum += i; }
  res.send(`Result: ${sum}`);
});

app.listen(3000, () => console.log('Running on more powerful hardware!'));

Преимущества:

  • Простота: Не требует изменений в архитектуре приложения или коде.
  • Подходит для монолитов: Идеально для классических монолитных приложений на Node.js.
  • Меньше операционных сложностей: Управляете одним сервером.

Недостатки:

  • Физический предел: Существует предел мощности одного сервера.
  • Единая точка отказа (SPOF): Если сервер падает, падает все приложение.
  • Дороговизна: Мощные серверы дороже, чем несколько средних (закон убывающей отдачи).
  • Простой для Node.js: Увеличение CPU сверх одного ядра не ускорит основной поток Event Loop. Чтобы использовать несколько ядер, необходимо запускать кластер процессов (cluster module) или несколько инстансов приложения, что уже является элементом горизонтального масштабирования.

Вывод: Вертикальное масштабирование — это быстрое решение для увеличения производительности, но оно не является долгосрочным или отказоустойчивым стратегическим выбором для высоконагруженных систем на Node.js.