Вопрос проверяет понимание компромиссов между вертикальным и горизонтальным масштабированием.
Масштабирование «железом» эффективно для быстрого и простого роста ресурсов. Оно оправдано при временных нагрузках или ограниченной архитектуре. Однако у него есть физический и экономический предел. При росте системы обычно требуется горизонтальное масштабирование и архитектурные изменения.
Вертикальное масштабирование — это увеличение ресурсов одного узла: CPU, RAM, диск.
Горизонтальное масштабирование — это добавление новых узлов.
Есть ситуации, где вертикальный рост — разумный выбор.
Быстрый рост нагрузки
нужно решение «здесь и сейчас»
нет времени на рефакторинг
Монолитные приложения
сложно распараллелить
нет stateless-архитектуры
CPU-bound задачи
сложные вычисления
аналитика
Со временем ограничения становятся очевидными.
Физический предел
сервер нельзя увеличивать бесконечно
Единая точка отказа
падение сервера = падение системы
Рост стоимости
цена растёт нелинейно
эффективность падает
Ограничения масштабируемости
нельзя обработать пик запросов
сложно обеспечить отказоустойчивость
вертикальное масштабирование — временная мера
горизонтальное — стратегическое решение
оптимизация кода часто даёт больший эффект, чем новое железо
Масштабирование «железом» допустимо как тактический шаг, но устойчивые системы строятся с расчётом на горизонтальный рост.