Co to jest canary deployment? Praktyczny przewodnik dla SRE

Summary

Co to jest canary deployment? To strategia wdrożenia, która kieruje nową wersję na niewielki udział ruchu produkcyjnego, zwykle 5 procent, i porównuje ją ze stabilną wersją przez ustalone okno czasowe. Jeśli wskaźnik błędów i latencja utrzymują się na poziomie grupy kontrolnej, wdrożenie poszerza się etapami. Jeśli nie, zostaje przerwane i cofnięte. Ogranicza promień rażenia, ale działa tylko przy metrykach per wersja i wystarczającym ruchu, który daje sygnał.

Inżynier patrzy na wykresy latencji canary i baseline na dwóch monitorach, z małą żółtą figurką kanarka na biurku

Canary deployment to technika wdrożenia, w której nowa wersja trafia najpierw na niewielką część ruchu produkcyjnego, jest porównywana z wersją działającą obok, a zasięg zwiększa się tylko wtedy, gdy liczby się zgadzają. Co to jest canary deployment w praktyce? To wdrożenie z wbudowanym punktem decyzyjnym: zmiana najpierw dociera do 1 do 5 procent użytkowników, a kontrola metryk decyduje, czy idzie dalej, czy zostaje cofnięta.

Dalsza część przewodnika opisuje, jak to działa, gdzie zawodzi i co warto zautomatyzować.

Alarm o 3 w nocy, który canary zamieniłby w wiadomość na Slacku

Wdrożenie idzie na produkcję w czwartek o 16:40. Wskaźnik błędów w usłudze checkout rośnie z 0,2 procent do 4 procent. Nikt tego nie zauważa, aż zgłoszenie od wsparcia pojawia się dwie godziny później, a wtedy każdy użytkownik już działa na nowym buildzie. Wycofanie zajmuje 25 minut, bo migracja została zastosowana tylko w połowie.

Ta sama zmiana wdrożona jako canary na 5 procent ruchu ogranicza szkody. Około 1 na 20 użytkowników trafia na błąd, porównanie z grupą kontrolną wychodzi negatywnie w ciągu kilku minut i potok się zatrzymuje. Postmortem opisze wtedy, co canary wychwyciło, a nie to, czego nie zauważyło.

Mały żółty kanarek siedzący na haczyku latarni w ciemnym tunelu kopalni

Nazwa pochodzi z kopalń węgla, gdzie kanarek przestawał śpiewać, zanim powietrze stało się śmiertelne. Mała grupa testowa pełni tę samą rolę. Nie zapobiega złemu wydaniu. Ogranicza liczbę osób, które je wdychają.

Co dokładnie robi canary deployment, krok po kroku

Google SRE Workbook definiuje canarying jako częściowe, ograniczone w czasie wdrożenie zmiany oraz ocenę, która decyduje, czy wdrażanie jest kontynuowane. Podzbiór uruchamiający zmianę to canary, a reszta floty to kontrola. Takie ujęcie ma znaczenie, bo czyni z canary test A/B na własnej niezawodności, a nie tylko wolne wdrożenie.

Typowa sekwencja wygląda tak:

Pętla jest prosta. Trudna jest część porównawcza, którą większość zespołów wdraża jako „ktoś patrzy na dashboard”.

Canary, blue-green i rolling: który pasuje do danego modelu awarii

Te trzy podejścia są stale mylone, dlatego warto rozróżnić je przy wyborze.

Wybierz blue-green, gdy ryzyko to zepsute wdrożenie, które wykryjesz testem dymnym i cofniesz w kilka sekund. Wybierz canary, gdy ryzyko to subtelna regresja, którą ujawnia dopiero prawdziwy ruch: wzrost p99, powolny wyciek pamięci, plan zapytania, który nie wytrzymuje kształtów danych z produkcji.

Pomiń canary, jeśli usługa ma bardzo mały ruch. Przy kilkuset żądaniach na godzinę wycinek 5 procent daje garstkę próbek i żadnego sygnału. Workbook mówi to wprost: bardzo mała liczba zapytań nie daje użytecznego sygnału dla zróżnicowanych obciążeń.

Dlaczego canary na 1 procent prawdopodobnie kłamie

Oto awaria, która dotyka zespoły w pierwszych trzech miesiącach. Canary dostaje 5 procent ruchu i zawodzi w 20 procentach swoich żądań. Wskaźnik błędów dla całej usługi rośnie z 0,2 do około 1,2 procent. Próg alertu to 2 procent. Nic się nie uruchamia.

Monitoring zagregowany ukrywa awarie canary. Ta sama arytmetyka pojawia się w SRE Workbook: canary zawodzące w 20 procentach żądań na 5 procentach ruchu pokazuje tylko 1 procent błędów w skali całości. Metryki trzeba rozbić na populacje, canary kontra kontrola, inaczej sygnał znika w mianowniku.

Widok z lotu ptaka na autostradę, na której jeden pas jest odgrodzony pomarańczowymi pachołkami, a pozostałe płyną normalnie

Są jeszcze trzy pułapki warte znajomości:

Metryki bramkujące wybierz przed wdrożeniem, nie w trakcie incydentu

Zacznij od swoich SLI. Jeśli usługa ma już SLI dostępności i SLI latencji, to są pierwsze dwie bramki. Zestaw startowy dla usługi obsługującej żądania może wyglądać tak:

Progi to miejsce, w którym zespoły tracą tygodnie. Ustawione zbyt ciasno, każde canary przerywa się na szumie, więc inżynierowie uczą się omijać bramkę. Ustawione zbyt luźno, złe wydanie przepływa bez przeszkód. Przeglądaj je według harmonogramu. Bramka, która nie przerwała niczego przez sześć miesięcy, jest albo doskonała, albo dekoracyjna, i warto sprawdzić, która z tych opcji zachodzi.

Pilnuj też, by interwał agregacji metryk nie był dłuższy niż okno canary. Rollup co 10 minut przy 5-minutowym canary zamazuje wszystko.

Canary w konfiguracji: jak wyglądają etapy w Argo Rollouts

Na Kubernetesie specyfikacja canary w Argo Rollouts opisuje sekwencję jako listę etapów. Oto skondensowana wersja w kształcie opisanym w dokumentacji:

strategy:
  canary:
    steps:
      - setWeight: 5
      - pause: { duration: 30m }
      - analysis:
          templates:
            - templateName: error-rate-vs-baseline
      - setWeight: 25
      - pause: { duration: 30m }
      - setWeight: 50
      - pause: {}

Dwa szczegóły z dokumentacji zasługują na uwagę. Bez routera ruchu wagę przybliża się liczbą podów, w najlepszym wysiłku: 10 replik przy 10 procentach to jeden pod canary i dziewięć stabilnych. To matematyka replik, nie matematyka żądań. Z kolei pause: {} bez czasu trwania czeka w nieskończoność, aż ktoś uruchomi kubectl argo rollouts promote. To ludzka bramka, którą można chcieć, ale nie trzeba.

Jeśli etap analizy zawiedzie, wdrożenie się przerywa. W tę część warto zainwestować.

Przemysłowy panel sterowania z zabezpieczonym czerwonym przełącznikiem cofnięcia i rzędami zielonych kontrolek

Feature flagi to druga połowa bezpiecznego canary

Canary infrastrukturalne dzieli ruch według instancji lub poda. Canary oparte na flagach dzieli według użytkownika, konta lub dowolnego atrybutu, który da się wskazać. Odpowiadają na różne pytania. Pierwsze pyta, czy nowy build jest zdrowy. Drugie pyta, czy nowe zachowanie jest akceptowalne, i pozwala je wyłączyć bez ponownego wdrożenia.

Przy wdrożeniach sterowanych flagami narzędzie ma znaczenie. LaunchDarkly ma najdojrzalsze reguły targetowania i ślad audytu, i wygrywa szerokością ekosystemu. Jego cena w skali enterprise to typowa skarga liderów platform.

Statsig łączy eksperymenty z flagami, co pasuje zespołom, które chcą osądu opartego na metrykach na tej samej platformie. Słabiej pasuje, jeśli potrzebny jest tylko wyłącznik awaryjny.

Uczciwy kompromis: platforma flag daje wdrożenia procentowe, ale większość z nich sama nie czyta SLO. Ktoś nadal musi podpiąć metrykę do decyzji.

Potrzebujesz źródła porównawczego, które potrafi dzielić po wersji

Niezależnie od tego, co steruje wdrożeniem, werdykt pochodzi z telemetrii. Każda metryka potrzebuje etykiety wersji lub kohorty, a backend musi po niej odpytywać bez 10-minutowego opóźnienia.

Datadog robi to dobrze dzięki podziałom po tagach, a śledzenie wdrożeń koreluje wydania ze skokami błędów. Koszt przy wysokiej kardynalności to coś, co trzeba zamodelować, zanim otaguje się wszystko.

Grafana z Prometheus działa, jeśli już ją uruchamiasz i etykietujesz metryki numerem rewizji wdrożenia. Daje pełną kontrolę, a utrzymanie spoczywa na zespole.

Automatyzacja przerwania: skąd bierze się pomysł AI Pilot

Ręczna analiza canary słabo się skaluje. Przy dziesięciu wdrożeniach dziennie nikt nie wpatruje się w dashboard przez 30 minut przy każdym z nich, więc bramka cicho staje się „wyglądało dobrze”. Wzorzec, który się sprawdza, to zautomatyzowany sędzia: zdefiniuj SLO, zdefiniuj porównanie, a kontroler przerwie i cofnie wdrożenie, gdy canary spala budżet błędów szybciej niż kontrola.

To problem, który celuje AI Pilot upstreamapi: czyta sygnał SLO w trakcie wdrożenia i uruchamia auto-rollback, gdy wskaźnik błędów przekroczy ustawiony próg. Mierzy wskaźnik błędów i latencję względem stabilnej kohorty, nic więcej i nic mistycznego. Jeśli masz już szablony analizy Argo Rollouts z dobrym zapytaniem Prometheus, masz większość tej samej zdolności i warto to powiedzieć każdemu, kto sprzedaje magię. Hostowany pilot ma sens tam, gdzie stosy są niejednorodne i każdy zespół musiałby utrzymywać własne szablony analizy.

Częsty wzorzec awarii: zespoły automatyzują etap promocji i nigdy nie automatyzują przerwania. Potok, który umie tylko iść do przodu, to taśmociąg.

Co mierzyć, by wiedzieć, że proces canary działa

Program canary ma własne metryki. Śledź je przez kwartał:

Uruchamiaj tylko jeden canary naraz na usługę. Workbook zdecydowanie to zaleca, a powód jest praktyczny: dwie nakładające się zmiany uniemożliwiają atrybucję i nie wiadomo, która z nich zaszkodziła.

Od czego zacząć w tym tygodniu

Wybierz jedną bezstanową usługę z wystarczającym ruchem, by dać sygnał w 15 minut. Dodaj etykietę wersji do jej metryk błędów i latencji. Napisz jedno zapytanie porównawcze: canary kontra kontrola. Uruchom canary na 5 procent z ręczną promocją i zapisz, co byś wychwycił w ostatnich trzech incydentach.

Potem zadaj niewygodne pytanie: gdyby canary zawiodło o 02:00, czy cokolwiek by je zatrzymało bez człowieka czuwającego?

Frequently asked questions

Co to jest canary deployment w prostych słowach?
To metoda wdrożenia, w której nowa wersja najpierw obsługuje niewielki procent prawdziwego ruchu, a stara obsługuje resztę. Porównujesz metryki zdrowia obu grup. Jeśli nowa wersja się utrzymuje, zwiększasz jej udział, aż obsłuży cały ruch. Jeśli nie, wycofujesz zmianę.
Czym canary deployment różni się od blue-green?
Blue-green utrzymuje dwa pełne środowiska i przełącza cały ruch naraz, więc wycofanie jest natychmiastowe, ale przełączenie wystawia 100 procent użytkowników. Canary najpierw wystawia niewielki ułamek i ocenia nową wersję względem starej na żywym ruchu. Canary ma mniejszy promień rażenia i wyższą złożoność operacyjną.
Jaki procent ruchu powinien dostać canary?
Nie ma uniwersalnej liczby. Google SRE Workbook podaje jako przykład 5 procent przez 30 minut. Wycinek musi być wystarczająco duży i działać wystarczająco długo, by dać użyteczny sygnał statystyczny, co zależy od wolumenu ruchu i od tego, jak jednorodne są żądania.
Które metryki powinny bramkować canary deployment?
Zacznij od swoich SLI: wskaźnika błędów i latencji, porównywanych między canary a kontrolą. Dodaj sygnał nasycenia przypisywalny zmianie oraz metrykę biznesową, jeśli da się ją wyizolować per grupa. Unikaj hałaśliwych metryk, takich jak surowe zużycie CPU, i utrzymuj krótką listę.
Czym różni się canary release od canary deployment?
Niektóre zespoły używają canary release dla ekspozycji funkcji na użytkownika, a canary deployment dla szerszego wdrożenia infrastrukturalnego. Wiele osób traktuje te terminy zamiennie. Liczy się to, że ograniczona grupa dostaje zmianę jako pierwsza, a kontrola metryk decyduje o dalszym przebiegu.
Czy można zrobić canary deployment bez Kubernetesa?
Tak. Każdy mechanizm dzielący ruch według wersji się sprawdzi: load balancer z ważonym routingiem, service mesh, reguła CDN albo flaga kierowana na procent użytkowników. Narzędzia Kubernetesa, takie jak Argo Rollouts, automatyzują etapy, ale wzorzec od nich nie zależy.