Ответ
Вертикальное масштабирование (Scale-Up) — это увеличение мощности одного сервера БД (больше CPU, RAM, более быстрые диски). Горизонтальное масштабирование (Scale-Out) — это добавление большего количества серверов БД для распределения нагрузки.
Сравнительная таблица
| Аспект | Вертикальное масштабирование | Горизонтальное масштабирование |
|---|---|---|
| Подход | «Сделать сервер больше». | «Добавить больше серверов». |
| Сложность | Относительно просто. Апгрейд железа или миграция на более мощный инстанс в облаке. | Сложно. Требует изменения архитектуры приложения и БД (шардинг, репликация). |
| Предел роста | Ограничен максимальной конфигурацией одного сервера (физический/финансовый потолок). | Теоретически безгранично за счет добавления новых узлов. |
| Отказоустойчивость | Точка отказа (SPOF). Падение сервера = недоступность всей БД. | Высокая. Данные и нагрузка распределены, отказ одного узла не должен парализовать систему. |
| Стоимость | Линейный рост цены с мощностью, часто нелинейный (дорогой high-end сервер). | Более линейная зависимость, можно использовать много стандартных, дешевых серверов. |
| Типичный сценарий | Быстрое решение для растущей нагрузки, монолитные приложения, транзакционные нагрузки (OLTP). | Высоконагруженные системы, Big Data, аналитические нагрузки (OLAP), глобальные сервисы. |
Практические примеры
Вертикальное масштабирование в облаке (AWS RDS):
-- Нет изменений в коде приложения.
-- В консоли AWS: "Modify DB instance" -> изменить класс инстанса с db.t3.medium на db.r5.2xlarge.
Горизонтальное масштабирование (шардинг PostgreSQL с Citus):
-- 1. Создание распределенной (шардированной) таблицы
SELECT create_distributed_table('orders', 'user_id');
-- 2. Данные автоматически распределяются по узлам кластера.
-- Запрос к orders будет выполняться на всех узлах параллельно.
SELECT * FROM orders WHERE user_id = 123; -- Запрос идет только в нужный шард.
Репликация (часть горизонтального масштабирования для чтения):
-- Настройка реплики в MySQL для чтения
CHANGE MASTER TO
MASTER_HOST='primary-db',
MASTER_USER='replica_user',
MASTER_PASSWORD='password';
START SLAVE;
-- Приложение направляет SELECT-запросы на реплики, а INSERT/UPDATE — на мастер.
Выбор стратегии: Часто начинают с вертикального масштабирования как более простого пути, а при приближении к его пределам переходят к горизонтальному, что требует серьезной переработки архитектуры.