Чем горизонтальное масштабирование отличается от вертикального?
- Что такое scale up и scale out?
- Когда достаточно купить сервер помощнее?
Вертикальное (scale up) — мощнее одна машина; горизонтальное (scale out) — больше машин под балансировщиком.
- Вертикальное — просто, без изменений кода, но есть потолок железа и одна точка отказа
- Горизонтальное — почти без потолка и с отказоустойчивостью, но сервис должен быть stateless
- Состояние (сессии, файлы, кэш в памяти) выносят в общие хранилища
А ещё Базы данных масштабируют сначала вертикально и репликами, горизонтально — шардированием, это дороже
Подробно
Вертикальное масштабирование — больше CPU, памяти, быстрее диски на той же машине. Плюсы: код не меняется, нет распределённых проблем, транзакции и JOIN остаются локальными. Минусы: есть потолок (самая мощная машина конечна, а цена растёт быстрее мощности), машина остаётся единственной точкой отказа, апгрейд часто требует простоя.
Горизонтальное масштабирование — несколько одинаковых экземпляров за балансировщиком. Плюсы: мощность растёт добавлением машин, отказ одной не роняет сервис, можно автоматически подстраиваться под нагрузку. Условия:
- сервис stateless — любой экземпляр может обработать любой запрос; сессии — в Redis или токене, файлы — в объектном хранилище, локальный кэш допустим только как необязательное ускорение;
- балансировщик и проверки здоровья;
- общие ресурсы (база, кэш, очередь) тоже должны выдерживать рост — иначе узкое место просто переедет в них.
На практике сочетают: серверы приложений — горизонтально, базу — вертикально плюс реплики для чтения, а шардирование — когда вертикальный рост исчерпан. Добавление серверов перестаёт помогать, если упираемся в общий ресурс (закон Амдала).
Что хотят услышать
- Определения и пример каждого вида.
- Плюсы и минусы: потолок и точка отказа против сложности распределённой системы.
- Требование stateless и что делать с состоянием.
- Что база масштабируется иначе, чем серверы приложений.
Частые ошибки
- Считать горизонтальное масштабирование бесплатным: общие ресурсы становятся узким местом.
- Забывать про сессии в памяти экземпляра.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Горизонтальное — добавить машины; вертикальное — усилить одну
- ✗Горизонтальное — усилить одну машину; вертикальное — добавить ещё машин
- ✗Это одно и то же, просто разные названия у разных облачных провайдеров
- ✗Горизонтальное масштабирование применимо только к базам данных
Что спросят дальше
- Что мешает масштабировать stateful-сервис?
- Зачем нужен load balancer?
Разбор темы
- Масштабирование
Что именно упирается, вертикальный и горизонтальный рост, stateless и балансировка, шардинг и consistent hashing, реплики на чтение и лаг, автоскейл и поиск настоящего узкого места.
Связанные вопросы
- Почему для горизонтального масштабирования сервис делают stateless? Middle
- Сервис планируют масштабировать горизонтально. Какие его свойства придётся устранить, чтобы инстансы можно было свободно добавлять и снимать? Middle
- Почему удвоение числа серверов не удваивает пропускную способность? Senior
- Чем балансировщик L4 отличается от L7? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.