Сервис планируют масштабировать горизонтально. Какие его свойства придётся устранить, чтобы инстансы можно было свободно добавлять и снимать?
- Что мешает запускать несколько экземпляров сервиса?
Мешает всё, что привязывает запрос или работу к экземпляру: сессии в памяти, файлы на локальном диске, локальный кэш изменяемых данных, планировщик задач без координации.
- Сессии — в Redis или подписанный токен
- Файлы — в объектное хранилище
- Фоновые задачи — с распределённой блокировкой или выбором лидера (иначе выполнятся N раз)
А ещё Конфигурация через переменные окружения не мешает
Подробно
Горизонтальный рост требует, чтобы любой инстанс мог обслужить любой запрос и чтобы снятие инстанса ничего не теряло. Сессии в памяти нарушают первое: после перебалансировки пользователь попадает на другой инстанс и теряет вход, а привязка по куке лечит симптом ценой неравномерной нагрузки и потерь при выкатке — сессии выносят в Redis или в подписанный токен. Файлы на локальном диске нарушают второе: половина загрузок будет недоступна с других инстансов, а при пересоздании контейнера пропадёт совсем — их место в объектном хранилище. Планировщик без координации нарушает корректность: с десятью инстансами задача выполнится десять раз, поэтому нужен выбор лидера, распределённая блокировка или внешний планировщик, ставящий задачу в очередь. Переменные окружения, наоборот, часть нормальной практики: конфигурация внешняя и одинаковая для всех инстансов.
Что хотят услышать
- Перечень нарушителей и последствия каждого.
- Куда выносить состояние.
- Координация фоновых задач.
Частые ошибки
- Считать привязку сессий к инстансу решением, а не временным компромиссом.
- Забыть про фоновые задачи и получить их многократное выполнение после добавления инстансов.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Сессии пользователей хранятся в памяти процесса
- ✗Конфигурация передаётся через переменные окружения, одинаковые для всех инстансов
- ✓Загруженные файлы лежат на локальном диске инстанса и оттуда отдаются
- ✓Задача по расписанию запускается на каждом инстансе без выбора лидера
Что спросят дальше
- Как обеспечить однократный запуск задачи по расписанию на пуле инстансов?
- Почему при росте числа инстансов может деградировать база данных?
Разбор темы
- Масштабирование
Что именно упирается, вертикальный и горизонтальный рост, stateless и балансировка, шардинг и consistent hashing, реплики на чтение и лаг, автоскейл и поиск настоящего узкого места.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.