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

Сервис работает на двадцати инстансах. Добавление ещё десяти не уменьшает время ответа. Как вы будете искать причину и что предпримете?

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

Ограничение не в приложении: нужно разложить время запроса и найти насыщенный общий ресурс — чаще всего база или пул соединений.

  • Трассировка показывает, где время: CPU, ожидание базы, внешние вызовы, очередь за соединением
  • Общие ограничения: пул, единственный лидер записи, глобальная блокировка, строка-счётчик, квота внешнего API
  • Исправлять узкое место: запросы, кэш, реплики, шардирование, разбиение счётчиков

А ещё Закон Амдала: последовательная часть ограничивает ускорение

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

Подробно

Начинать нужно с измерения, а не с гипотез: по трассировке видно, где проведено время — в процессоре приложения, в ожидании базы, во внешних вызовах или в очереди на получение соединения из пула. Если время уходит на ожидание, добавление инстансов бесполезно по определению. Дальше ищем разделяемое ограничение: полностью занятый пул соединений при низкой загрузке процессора, единственный лидер записи, глобальная блокировка или строка-счётчик, которую обновляют все, квота внешнего API. Полезно назвать и общий принцип: последовательная часть работы задаёт потолок ускорения, а координация между узлами способна дать отрицательную отдачу — тридцать инстансов открывают в полтора раза больше соединений и могут ухудшить положение базы. Дальше действуем по найденной причине: убрать запросы в цикле и добавить индексы, включить пакетную обработку, поставить кэш, развести чтения по репликам, при упоре в запись — шардировать, а число соединений ограничить пулером. И обязательно назвать метрику, по которой станет видно, что помогло: задержка на девяносто девятом перцентиле и насыщение пулов, а не средняя загрузка процессора.

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

  • Измерение до гипотез.
  • Поиск общего насыщенного ресурса с примерами.
  • Меры против конкретного узкого места.

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

  • Добавлять инстансы, не измерив, где проведено время запроса.
  • Смотреть на утилизацию процессора вместо насыщения пулов и очередей.

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

  • Почему при приближении утилизации к ста процентам задержка растёт нелинейно?
  • В каком порядке вы будете применять кэш, реплики и шардинг?

Разбор темы

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

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

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

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

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