Что такое Canary Deployment?

Ответ

Canary Deployment (канареечное развертывание) — это стратегия выкатки новой версии приложения, при которой трафик постепенно переключается с текущей стабильной версии на новую. Сначала новая версия становится доступна лишь небольшой группе пользователей (например, 1-5%), которая выступает в роли «канарейки в шахте».

Если мониторинг не выявляет ошибок или деградации производительности, доля трафика на новую версию постепенно увеличивается до 100%. В противном случае трафик быстро откатывается на стабильную версию.

Процесс развертывания:

  1. Развертывание: Новая версия (v2) разворачивается на серверах параллельно со старой (v1).
  2. Маршрутизация: Небольшая часть трафика (например, 10%) направляется на v2, а основная (90%) — на v1.
  3. Мониторинг: Собираются метрики (ошибки, задержки, использование ресурсов) для обеих версий.
  4. Принятие решения:
    • Успех: Доля трафика на v2 постепенно увеличивается до 100%. Старая версия v1 выводится из эксплуатации.
    • Неудача: Трафик полностью возвращается на v1, а v2 откатывается для анализа проблем.

Ключевые преимущества:

  • Минимизация рисков: Проблемы затрагивают лишь малую часть пользователей.
  • Быстрый откат: Возможность мгновенно вернуть весь трафик на стабильную версию.
  • Тестирование в реальных условиях: Проверка производительности и функциональности на реальном пользовательском трафике.

Эта стратегия часто реализуется с помощью балансировщиков нагрузки, Ingress-контроллеров в Kubernetes или Service Mesh (например, Istio, Linkerd).

Ответ 18+ 🔞

Да ты посмотри, какие умные слова придумали! Канареечное развертывание, блядь. Прямо как в старые добрые времена, когда в шахту канарейку спускали — если птичка сдохла, значит газ, и всем пиздец, пора валить. Вот и тут так же, только вместо птички — наши пользователи, лол.

Суть в том, чтобы не ебануть всем сразу новую версию, от которой неизвестно, взорвётся всё к хуям или нет. Вместо этого делаем так:

  1. Развернули новую фигню (v2) где-нибудь сбоку, рядом со старой и проверенной (v1). Они обе живут, как соседи, только одна пока не палится.
  2. Начинаем потихоньку подсылать к ней народу. Сначала 1-5% трафика, как будто на разведку. Эти ребята — наши канарейки. Если с ними всё окей, не орут, что всё сломалось, и метрики не горят красным — хорошо.
  3. Смотрим, как оно. Мониторим всё: ошибки, скорость отклика, не жрёт ли v2 в три раза больше памяти. Волнение ебать, терпения ноль.
  4. Тут два пути:
    • Всё заебись. Постепенно, как доверчивого лоха, увеличиваем долю трафика на v2: 10%, потом 25%, потом 50%... Пока вся толпа не переползёт на новое. Старую v1 потом выключаем и отправляем на свалку истории.
    • Что-то пошло не так. Пизда. Канарейки дохнут, метрики кричат. Быстро-быстро — и весь трафик обратно на старую, проверенную v1. А новую версию v2 — нахуй, в откат, пусть разработчики разбираются, что они там наворотили.

И зачем этот цирк, спросишь? А затем, чувак!

  • Риски меньше. Если что-то пойдёт не так, пострадает не вся армия пользователей, а только маленький отряд добровольцев. Остальные даже не узнают, что был пожар.
  • Откат — раз плюнуть. Не надо ничего экстренно откатывать для всех — просто переключили рычаг, и всё вернулось как было.
  • Тест в боевых условиях, а не в песочнице. Можно посмотреть, как фича живёт под реальной нагрузкой, а не в стерильном тестовом окружении, где всё всегда работает, блядь.

Реализовать эту магию можно через всякие умные балансировщики, Ingress'ы в Kubernetes или эти ваши Service Mesh'и (Istio, Linkerd). Они как раз умеют тонко настраивать, кому и куда идти. Ёпта, наука, однако.