Konrad Kowalski (rootsher)Principal Platform & Reliability Architect010111110000101101111010001111101100000111110101

Canary deployment: nowa wersja dostaje część ruchu

data
kategoria
CI/CD
także w
Reliability Engineering
czytanie
1 min / 219 słów

Blue-green przełącza ruch szybko.

Ale nadal może przełączyć wszystkich naraz.

Canary powstało z ostrożniejszego pytania:

text
co jeśli nowa wersja najpierw dostanie 1% ruchu?

Nie chodzi o to, żeby deployment trwał dłużej.

Chodzi o to, żeby błąd miał mniejszy blast radius.

Minimalny przykład

Mamy dwie wersje aplikacji za dwoma Service.

text
api-v1
api-v2

Gateway API może rozdzielić ruch wagami w HTTPRoute.

yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api
spec:
  parentRefs:
    - name: public
  hostnames:
    - api.example.com
  rules:
    - backendRefs:
        - name: api-v1
          port: 80
          weight: 99
        - name: api-v2
          port: 80
          weight: 1

Następny krok może wyglądać tak:

text
99/1
95/5
75/25
50/50
0/100

To jest mechanika.

Strategia zaczyna się dopiero wtedy, gdy pomiędzy krokami ktoś patrzy na sygnały.

Co mierzyć

Canary bez obserwowalności jest ślepe.

Minimum:

text
error rate
p95 latency
p99 latency
saturation
restart count
business metric

Metryka biznesowa zależy od systemu.

Może to być:

text
checkout completed
payment authorized
message sent
document generated

Jeżeli api-v2 ma ten sam error rate, ale psuje płatności, infrastrukturalne metryki nie wystarczą.

Do czego to realnie służy

Canary jest dobre, gdy chcemy sprawdzić nową wersję na prawdziwym ruchu, ale nie chcemy od razu ryzykować całej populacji.

Działa dobrze przy:

text
stateless API
frontend backend for frontend
zmianach performance
nowych zależnościach
zmianach w integracjach

Canary jest słabsze, jeśli każda wersja musi widzieć globalnie spójny stan albo jeśli błąd ujawnia się dopiero po kilku dniach.

Gdzie nazwa kłamie

Canary brzmi jak automatyczne bezpieczeństwo.

W rzeczywistości to tylko ekspozycja małej części ruchu.

Jeżeli nie ma metryk, alertów i decyzji promocji, canary jest wolniejszym rolling update.

Jeżeli użytkownik raz trafia do v1, raz do v2, a aplikacja wymaga spójności sesji, canary może wygenerować problemy, których nie było w żadnej wersji osobno.

Canary odpowiada na pytanie:

text
czy nowa wersja psuje system pod prawdziwym ruchem?

Nie odpowiada samo z siebie na pytanie:

text
czy nowa wersja jest lepsza dla konkretnej grupy użytkowników?

Do tego bliżej targeted rollout i A/B testów.