Короткий ответ
Однозначно правильной стратегии нет — выбор зависит от стоимости простоя холодного кэша, возможности шардированной БД безопасно обслуживать смешанные версии схемы одновременно и допустимого бюджета на дублирование инфраструктуры; кандидату стоит обсудить компромиссы между rolling (дешевле, но дольше живёт смешанное состояние версий), blue-green (быстрый откат, но дорогой прогрев второго полного набора кэшей) и canary (точная оценка риска, но сложнее с шардированием трафика по пользователям/шардам).
Как это работает подробнее
для stateful-сервиса с прогреваемым кэшем ключевая проблема — «холодный старт» нового набора подов/серверов: при blue-green всё новое окружение стартует с пустым кэшем одновременно, что может вызвать резкий всплеск нагрузки на БД/бэкенд в момент cutover. При canary или rolling прогрев происходит постепенно, но дольше сосуществуют версии приложения с потенциально разными ожиданиями от схемы и формата кэшируемых данных.
Пример кода
Вопрос для обсуждения на интервью:
Сервис — шардированный кэш сессий (16 шардов), 200 req/s на шард,
прогрев одного шарда с нуля занимает ~3 минуты под обычным трафиком.
Бюджет инфраструктуры ограничен — дублирование всех 16 шардов на время
релиза увеличивает costs на 40% на период деплоя.
Какую стратегию выбрать и какие метрики/пороги заложить в gate перед
полным переключением трафика? Обоснуйте компромиссы.Сравнение
- Компромисс. rolling — дешевле по ресурсам, но дольше смешанное состояние версий и риск несовместимости формата кэша между версиями; blue-green — быстрый и предсказуемый откат, но дорогой (двойная инфраструктура) и требует явного прогрева кэша; canary — наиболее контролируемый риск, но сложнее реализовать корректно при шардированных данных и требует зрелой наблюдаемости. Выбор также зависит от того, насколько часто релизится сервис и какой SLA заявлен на этот сервис.
Что использовать на практике
- На практике. нужно учитывать специфику шардирования — если шарды закреплены за разными группами серверов, canary по пользователям/шардам может быть проще, чем по случайному проценту трафика; для blue-green можно снизить эффект холодного старта предварительным прогревом кэша на новом окружении (cache warm-up job) до переключения трафика. Важны также конкретные цифры: сколько стоит дублирование инфраструктуры на время blue-green, насколько критично время восстановления (RTO) при проблеме, какой объём данных в кэше и как быстро он прогревается естественным трафиком.
- Пример. Ожидаемый ответ кандидата: не единственно верный рецепт, а структурированное рассуждение — например, canary по шардам с предварительным прогревом каждого нового шарда перед включением трафика на него, с обсуждением, почему blue-green в этом случае был бы дороже и рискованнее из-за одновременного холодного старта всех 16 шардов.
Подводные камни
- Частые ошибки. выбирают стратегию «по умолчанию» без анализа специфики кэша и шардирования; не планируют отдельный шаг прогрева кэша перед переключением трафика, считая это несущественной деталью.