Запуск популярного курса
Популярный преподаватель объявил запись на новый курс. Участники откроют страницу почти одновременно, а мест заметно меньше, чем желающих. Спроектируйте поведение сервиса на старте продаж: кто получит место, кто получит честный отказ и как перегрузка отразится на остальных пользователях.
Числа ниже — учебные условия. Производительность базы взята из заданного теста; для иной нагрузки её нужно измерять заново.
Ограничения
Пик длится 10 минут: 10 000 запросов в секунду, из них 500 запросов записи. Доступно 2 000 мест. База выдерживает 1 000 транзакций в секунду в условиях учебного теста. Целевой уровень обслуживания, SLO, — 99,9% корректно обработанных подходящих запросов записи за 30 дней. Сначала определите, какие запросы подходят под эту формулировку и что считается корректным результатом.
Что подготовить
Опишите правила допуска запросов: какие принимаются сразу, какие ждут, какие отклоняются и что видит пользователь. Постройте модель перегрузки: сколько обращений доходит до базы, где появляется очередь и чем ограничен её размер. Учтите, что одна пользовательская операция может требовать нескольких транзакций.
Задайте предельное время ожидания ответа и бюджет повторов: сколько попыток разрешено, через какие интервалы и в пределах какого общего времени. Покажите, как повтор отличают от новой заявки.
Определите SLI — измеряемый показатель, по которому проверяется SLO. Укажите числитель, знаменатель и источник данных. Подготовьте инструкцию дежурному: какие сигналы проверить, что временно отключить и как понять, что сервис восстановился.
Подсказка
Количество мест — бизнес-ограничение, скорость базы — техническое, а SLO описывает качество обслуживания. Увеличение мощности не создаёт дополнительных мест. Рассмотрите отдельно чтение описания курса, изменение записи и обращения к внешнему провайдеру.
Как проверить решение
Отделите корректный ответ «мест нет» от технического сбоя при расчёте SLI. За 10 минут поступят 300 000 попыток записи, но нельзя обещать столько успешных записей на 2 000 мест. Покажите, что произойдёт при полном отказе кэша: весь поток чтений не должен бесконтрольно попасть в базу. Проверьте сохранность ограничения вместимости при повторах.
Усложнение
Зависимый провайдер замедляется в десять раз. Проследите рост числа незавершённых обращений и объясните, где система ограничит их накопление.
Как оформить ответ
Сохраните расчёты, правила допуска и инструкцию дежурному в тетради. Сравните выбранный подход с альтернативой и перечислите измерения, необходимые перед запуском. Проверка решения самостоятельная.
Запишите ход рассуждений, расчёты и вопросы. Сохраните текст перед уходом со страницы. После входа в аккаунт ответ участвует в общей синхронизации прогресса. Автоматической оценки архитектуры здесь нет.