Все задачи
Средняяsystem-designqueueasync

Очередь для уведомлений

Принято: —Решили: 0

Условие

Сервис уведомлений: обычно 600 запросов/с, половина — записи. Раз в день на 20 секунд трафик вырастает в 6 раз (push-рассылка): 1800 записей в секунду, то есть 5400 единиц на базу — ни один тариф столько не держит. Направьте записи в очередь сообщений: пользователь получает ответ сразу, а воркеры разгружают очередь в базу по 200 сообщений в секунду на инстанс. Внимание: к концу сценария очередь должна опустеть, а воркеры не должны писать быстрее, чем база успевает принять.

Ограничения

  • p95 ≤ 250 мс, ошибки ≤ 0,1 %, очередь пуста к концу, бюджет $2800/мес, ≤ 5 инстансов на узел.

Требования

СимуляцияПостроить с нуля
p95
≤ 250 ms
Ошибки
≤ 0.10 %
Бюджет
$2,800/mo
Пользователей
200,000
Ваша архитектура стоит$0 / $2,800

★ в бюджете · ★★ ≤ 75 % · ★★★ ≤ 50 % бюджета

Сценарии (проверяются по порядку)
  1. 1Обычный деньНагрузка

    600 запросов/с в течение 60 секунд: 40 % чтений, 50 % записей, 10 % статики.

    60 s · 600 rps · R 40 / W 50 / S 10 %

  2. 2Push-рассылкаВсплеск

    С 20-й секунды на 20 секунд трафик растёт в 6 раз (3600 запросов/с); очередь должна опустеть в пределах 120 секунд.

    120 s · 600 rps · R 40 / W 50 / S 10 % · ×6 с 20-й с на 20 с

Блоки

Нажмите, чтобы добавить, или перетащите на холст. Соединяйте блоки, протягивая от правой точки к левой.

ИИ-наставник

Застряли? Возьмите подсказку — наставник объясняет идею, но никогда не выдаёт решение.

Решите задачу, чтобы открыть разбор.