Короткий ответ
Резерв capacity должен учитывать не только прогнозируемый органический рост нагрузки, но и запас для устойчивости к отказам (N+1 или N+2 — способность выдержать потерю одной или нескольких зон/узлов без деградации), время, необходимое на масштабирование (lead time автомасштабирования или закупки), и сезонные/маркетинговые пики, которые не отражены в среднем тренде роста.
Как это работает подробнее
если вся текущая capacity рассчитана ровно под текущий пик без резерва, то отказ даже одного узла/зоны доступности означает, что оставшиеся ресурсы не смогут обслужить нагрузку, и автомасштабирование может не успеть среагировать достаточно быстро (особенно если новые инстансы требуют время на прогрев/инициализацию). Резерв N+1 означает, что система рассчитана на нормальную работу даже при потере одной единицы резервирования (узла, зоны, инстанса).
Пример / кейс
Ожидаемое поведение: при отказе одной из трёх зон оставшиеся две зоны (каждая рассчитана на 1500 RPS) покрывают весь трафик 3000 RPS без превышения своей заложенной capacity, в отличие от наивного расчёта "3 зоны по 1000 RPS", где отказ одной зоны сразу приводит к перегрузке оставшихся.
Пример кода
Расчёт для сервиса в 3 зонах доступности:
Текущий пик: 3000 RPS (1000 RPS на зону в среднем)
Требование: выдержать отказ одной зоны без деградации
→ Каждая зона должна быть способна обслужить до 1500 RPS (половину от 3000)
→ Итоговая capacity кластера: 4500 RPS вместо "наивных" 3000 RPSЧто использовать на практике
- Практический подход. Расчёт обычно выглядит так — берут текущий пик, добавляют прогноз органического роста на горизонт планирования, добавляют запас на известные будущие события (акции), и затем умножают получившееся на коэффициент избыточности для устойчивости к отказам (например, если система рассчитана на работу в любых 2 из 3 зон, то capacity каждой зоны должна покрывать до 150% обычной доли нагрузки). Также нужно учитывать время прогрева новых инстансов (cold start) при расчёте, насколько быстро автомасштабирование реально компенсирует возросшую нагрузку.
Подводные камни
- Частые ошибки. Закладывать резерв только под рост пользователей, игнорируя резерв на случай отказа инфраструктуры (N+1); полагаться полностью на автомасштабирование без учёта времени и лимитов (квот) на создание новых ресурсов в момент резкого всплеска; не пересматривать резерв после значимых архитектурных изменений (например, добавление нового тяжёлого по ресурсам сервиса).