Cloud и инфраструктура

5 мин чтения

Canary Deployment: зачем выпускать новую версию сначала на небольшую часть трафика

Тесты уменьшают риск, но не воспроизводят весь реальный мир. Canary Deployment позволяет сначала показать новую версию небольшой части пользователей, измерить последствия и только потом расширять релиз.

Большой релиз создаёт простую, но неприятную ставку: либо новая версия работает, либо проблема сразу становится проблемой всех клиентов.

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

Какую проблему мы решаем

Canary Deployment меняет сам способ выпуска. Новая версия получает только небольшую часть реального трафика. Остальные пользователи продолжают работать со старой стабильной версией.

Команда сравнивает ошибки, задержки, бизнес-метрики и поведение двух версий. Если всё нормально, доля новой версии постепенно увеличивается. Если появляются проблемы, трафик возвращается на старую.

Это не ещё один вид тестирования. Это способ ограничить радиус последствий изменения.

Что получает бизнес

Главная выгода — меньшая ставка на каждый релиз.

Если ошибка проявляется только под реальной нагрузкой или на редком наборе данных, она затронет ограниченную аудиторию, а не весь продукт. Это снижает потенциальную стоимость неудачного изменения.

Canary также позволяет чаще выпускать небольшие изменения. Когда откат не требует драматического решения «возвращаем весь релиз», компания может быстрее проверять гипотезы и меньше бояться каждого deploy.

Но это преимущество работает только при хорошей наблюдаемости. Если компания не умеет быстро понять, стало ли хуже, постепенный релиз превращается просто в более сложный способ выкладки.

Что получает команда

Команда получает реальные данные о новой версии до полного переключения.

Можно автоматически останавливать rollout, если растёт доля ошибок или ухудшается задержка. Для критичных изменений можно дополнительно следить за бизнес-сигналами: успешными заказами, оплатами или другими ключевыми операциями.

При этом инфраструктура становится сложнее. Нужно уметь направлять долю трафика на разные версии, корректно сравнивать метрики и учитывать, что некоторое время две версии работают одновременно.

Что получает клиент

Большинство клиентов меньше рискует столкнуться с массовым дефектом сразу после релиза.

Небольшая часть аудитории фактически становится ранней группой, поэтому особенно важно выбирать её осознанно. Критичных клиентов или чувствительные операции не всегда стоит включать в первую волну.

Клиенту не важен сам canary. Ему важно, что компания способна обнаружить плохой релиз до того, как он станет массовой проблемой.

Чем мы за это платим

Нужна инфраструктура управления трафиком, автоматизация rollout и качественная наблюдаемость.

Изменения базы данных и контрактов должны поддерживать одновременную работу нескольких версий. Иначе приложение можно переключать постепенно, а несовместимая миграция данных всё равно создаст единую точку риска.

Появляется и организационная цена: команда должна заранее определить критерии успеха и остановки. Если после каждого релиза решение принимается вручную «на глаз», значительная часть пользы теряется.

Когда Canary Deployment не нужен

Для маленького внутреннего сервиса с низкой ценой сбоя сложная схема распределения трафика может быть дороже самого риска.

Подход особенно полезен для массовых продуктов, частых релизов, критичных пользовательских потоков и систем, где реальные условия сильно отличаются от тестовой среды.

Что стоит спросить перед решением

В итоге

Canary Deployment не делает релизы безошибочными. Он делает ошибку ограниченной.

Для бизнеса это способ уменьшить максимальную цену одного изменения и выпускать продукт чаще без ставки на всех клиентов сразу.