Получить доступ

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

MiddleМасштабирование
Ещё спрашивают так:
  • Что мешает запускать несколько экземпляров сервиса?
Коротко

Мешает всё, что привязывает запрос или работу к экземпляру: сессии в памяти, файлы на локальном диске, локальный кэш изменяемых данных, планировщик задач без координации.

  • Сессии — в Redis или подписанный токен
  • Файлы — в объектное хранилище
  • Фоновые задачи — с распределённой блокировкой или выбором лидера (иначе выполнятся N раз)

А ещё Конфигурация через переменные окружения не мешает

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Горизонтальный рост требует, чтобы любой инстанс мог обслужить любой запрос и чтобы снятие инстанса ничего не теряло. Сессии в памяти нарушают первое: после перебалансировки пользователь попадает на другой инстанс и теряет вход, а привязка по куке лечит симптом ценой неравномерной нагрузки и потерь при выкатке — сессии выносят в Redis или в подписанный токен. Файлы на локальном диске нарушают второе: половина загрузок будет недоступна с других инстансов, а при пересоздании контейнера пропадёт совсем — их место в объектном хранилище. Планировщик без координации нарушает корректность: с десятью инстансами задача выполнится десять раз, поэтому нужен выбор лидера, распределённая блокировка или внешний планировщик, ставящий задачу в очередь. Переменные окружения, наоборот, часть нормальной практики: конфигурация внешняя и одинаковая для всех инстансов.

Что хотят услышать

  • Перечень нарушителей и последствия каждого.
  • Куда выносить состояние.
  • Координация фоновых задач.

Частые ошибки

  • Считать привязку сессий к инстансу решением, а не временным компромиссом.
  • Забыть про фоновые задачи и получить их многократное выполнение после добавления инстансов.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Сессии пользователей хранятся в памяти процесса
  • ✓Загруженные файлы складываются на локальный диск инстанса и оттуда же отдаются
  • ✓Задача по расписанию запускается на каждом инстансе без выбора лидера или распределённой блокировки
  • ✗Конфигурация передаётся через переменные окружения

Что спросят дальше

  • Как обеспечить однократный запуск задачи по расписанию на пуле инстансов?
  • Почему при росте числа инстансов может деградировать база данных?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем