Wdrożenie kanaryjskie stanowi metodę tworzenia i dystrybucji oprogramowania, która polega na stopniowym udostępnianiu nowych funkcjonalności lub aktualizacji wybranej grupie użytkowników, zanim zostaną one wprowadzone dla całej społeczności odbiorców.
Istota tej techniki to przygotowanie nowej wersji oprogramowania i jej wdrożenie dla ograniczonej liczby użytkowników. W tym czasie dotychczasowa wersja pozostaje dostępna dla pozostałej części użytkowników. Zespół programistów starannie monitoruje nową wersję, aby upewnić się o jej stabilności i zgodności z założonymi celami.
W sytuacji, gdy wszystko przebiega bez zakłóceń, nowa wersja udostępniana jest szerszemu gronu użytkowników, aż w końcu obejmie całą bazę. Dzięki temu zespół projektowy redukuje ryzyko pojawienia się błędów lub innych problemów, które mogłyby dotknąć wszystkich użytkowników naraz.
Głównym celem wdrożenia kanaryjskiego jest obniżenie ryzyka związanego z wprowadzaniem nowych funkcji dla dużej grupy odbiorców. Poprzez etapowe udostępnianie zmian, programiści mają możliwość obserwowania wydajności i stabilności nowej wersji. Mogą również wprowadzać niezbędne poprawki, zanim zmiana zostanie wprowadzona dla wszystkich. W ten sposób proces przejścia na nową wersję staje się znacznie bardziej płynny.
Podstawowe zasady i zalety
źródło: martinfowler.com
Główne zasady wdrożenia kanaryjskiego obejmują:
Zalety wdrożenia kanaryjskiego w DevOps to m.in.:
Wdrożenie kanaryjskie oparte na koncepcji i terminologii
źródło: cncf.io
Przeanalizujmy typowy przebieg procesu.
Wszystko rozpoczyna się od grupy „Kanarek”, czyli „pierwszych użytkowników” nowej wersji systemu. Równolegle funkcjonuje grupa „Baseline”. Do niej należą wszyscy pozostali użytkownicy spoza grupy „Kanarek”.
W miarę jak użytkownicy „Kanarka” korzystają z nowej wersji, wdrożenie kanaryjskie obejmuje coraz większą liczbę osób. Jest to modyfikacja przepływu ruchu. Grupa „Kanarek” powiększa się, podczas gdy grupa „Baseline” maleje, co oznacza stopniowe wprowadzanie systemu.
W trakcie tego procesu, system monitoringu rejestruje wszystkie działania i rezultaty użytkowania, tworząc dane, które programiści wykorzystują jako informacje zwrotne. Na ich podstawie programiści reagują i naprawiają wykryte problemy, lub przywracają system do wersji „Baseline”, jeśli nie są w stanie od razu rozwiązać problemów.
Automatyzacja wszelkich działań związanych z monitoringiem i wdrażaniem pozwala programistom skupić się wyłącznie na rozwiązywaniu problemów.
Może się okazać, że grupa „Kanarek” odkryje, że niektóre funkcje nowej wersji są wadliwe, a inne działają bez zarzutu. W takiej sytuacji programiści oznaczają funkcje, które sprawiają kłopoty, aby wykluczyć je z dalszego procesu wdrażania.
Programiści obserwują równocześnie obie grupy – „Kanarek” i „Baseline”. Użytkownicy generują wyniki testów A/B. Jest to porównanie zachowania starego i nowego systemu w identycznych warunkach. Dodatkowo, nieustannie przeprowadzane są automatyczne testy nowej wersji systemu, aby zagwarantować stabilność i kontrolę stanu grupy „Kanarek”.
Różnice w porównaniu z tradycyjnymi strategiami wdrażania
Po zrozumieniu przebiegu cyklu życia procesu, różnice pomiędzy tym a tradycyjnymi procesami wdrażania stają się dość oczywiste.
- Wdrożenie odbywa się etapowo i z większą kontrolą, zamiast jednoczesnego wdrażania dla wszystkich i oczekiwania na problemy, które dotkną całą produkcję.
- Ryzyko związane z błędami nowej wersji jest ograniczone tylko do grupy „Kanarek”, zamiast narażania wszystkich użytkowników na problemy jednocześnie.
- Nowa wersja jest monitorowana zanim zostanie udostępniona użytkownikom, zamiast monitorowania jej później i angażowania dużych nakładów czasu i zasobów w fazę wzmożonej opieki nad procesem wydania.
- Decyzję o sposobie wycofania można podjąć, zanim nowa wersja zostanie w pełni wdrożona do produkcji. Natomiast, planowanie kolejnego okna wydawniczego w celu cofnięcia produkcji ma miejsce zaraz po zakończeniu wydania produkcyjnego w tradycyjnym podejściu.
- Wdrożenie kanaryjskie naturalnie wymusza inwestowanie w zautomatyzowane narzędzia i procesy, gdzie tylko jest to możliwe. Tradycyjne strategie wdrażania z kolei automatycznie obniżają priorytet inicjatyw automatyzacyjnych, przesuwając je na koniec listy zadań.
Potoki CI/CD we wdrożeniu kanaryjskim
Źródło: aws.amazon.com
W typowym potoku CI/CD zmiany są automatycznie budowane, testowane i wdrażane w środowisku przejściowym w celu dalszego przetestowania przed wdrożeniem do produkcji. Jest to również idealny przykład zastosowania we wdrożeniu kanaryjskim.
Po pomyślnym wdrożeniu zmian w środowisku przejściowym i przejściu wszystkich niezbędnych testów, potok CI/CD automatycznie wdraża wersję kanaryjską dla mniejszej grupy użytkowników w środowisku produkcyjnym.
W przypadku wystąpienia problemów, można uruchomić inny potok, który cofnie wdrożenie lub oznaczyć problematyczne funkcje, które nie będą już brane pod uwagę w przyszłych wdrożeniach. Wszystko odbywa się automatycznie, bez konieczności ręcznej interwencji.
Ponieważ wersja kanaryjska zawiera pełen zestaw zautomatyzowanych testów kontrolnych, są one naturalnie włączone do podstawowych funkcji potoków CI/CD. W każdym przypadku stanowią one nieodzowną część każdego dobrze zaprojektowanego potoku CI/CD.
Przepływ pracy i etapy wdrożenia kanaryjskiego
Podsumowując zebrane informacje, oto typowy schemat przepływu pracy wdrożenia kanaryjskiego, który można zastosować w swoim projekcie.
# 1. Planowanie i przygotowanie
W tej fazie zespół programistów planuje i przygotowuje wdrożenie kanaryjskie. Obejmuje to identyfikację zmian lub aktualizacji, które mają zostać wprowadzone, utworzenie nowej wersji oprogramowania oraz zdefiniowanie metryk i wskaźników kontroli stanu, które będą monitorować efektywność nowej wersji. Zespół określa również grupę użytkowników, którzy jako pierwsi otrzymają nową wersję oraz planuje proces wdrożenia.
#2. Wdrożenie routingu ruchu i monitoringu
Nowa wersja oprogramowania jest udostępniana podzbiorowi użytkowników, którzy zostali wyznaczeni w fazie planowania. Implementowany jest routing ruchu, który przekierowuje część użytkowników do nowej wersji, podczas gdy pozostali korzystają ze starej. Wydajność i stabilność nowej wersji są dokładnie monitorowane za pomocą metryk i wskaźników kontroli stanu, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami.
#3. Analiza i ocena wydajności wdrożenia
Efektywność nowej wersji jest analizowana i oceniana na podstawie metryk i wskaźników kontroli stanu ustalonych w fazie planowania. Jeśli nowa wersja działa prawidłowo, wdrażanie jest stopniowo rozszerzane na większą liczbę użytkowników. W przypadku wystąpienia problemów z nową wersją, wdrożenie można szybko cofnąć do poprzedniej wersji.
#4. Promowanie lub wycofywanie wdrożenia
Zespół programistów podejmuje decyzję, czy wprowadzić nową wersję do użytku dla całej bazy użytkowników, czy przywrócić wersję poprzednią. Jeśli nowa wersja działa dobrze i spełnia niezbędne standardy jakości, jest wdrażana dla wszystkich użytkowników. W sytuacji, gdy pojawią się problemy z nową wersją, wdrożenie jest szybko i łatwo cofane do poprzedniej wersji.
Źródło: aws.amazon.com
Najlepsze praktyki i strategie
Wdrażając kanaryjskie wdrożenie na swojej platformie, zacznij od ustalenia jasnych celów i definicji sukcesu. Pomocne mogą być tu takie czynniki, jak wskaźniki wydajności, kryteria opinii użytkowników i wpływ na działalność firmy.
Utwórz małą grupę użytkowników do testowania nowej (kanaryjskiej) wersji oprogramowania. Większa grupa na początku nie jest korzystna. Kluczowa jest jak największa elastyczność, zwłaszcza na początku.
Jak już kilkakrotnie wspomniano, monitoruj wydajność i stabilność nowej wersji za pomocą metryk i wskaźników kontroli stanu. Reaguj natychmiast, gdy zauważysz coś podejrzanego. W przypadku stopniowego wdrożenia lepiej jest zareagować zbyt mocno, niż zbyt słabo.
Stopniowo zwiększaj dostęp do nowej wersji dla coraz większej liczby użytkowników. Zapewnia to bardziej płynne przejście na nową wersję.
Tam, gdzie to możliwe, korzystaj z narzędzi i procesów automatyzacji, aby usprawnić proces wdrażania i monitorowania. Włącz je do potoków CI/CD i zaplanuj automatyczne uruchamianie procesów wdrożeniowych. Redukuje to ryzyko błędu ludzkiego i zapewnia spójność i powtarzalność procesu wdrażania.
Wdrożenie flag funkcji, umożliwiających włączanie lub wyłączanie wybranych funkcji w oprogramowaniu, daje większą kontrolę nad procesami wdrożeniowymi bez konieczności ciągłego ręcznego poprawiania lub aktualizowania systemu. Pozwala to programistom skupić się na ważniejszych zadaniach – naprawianiu błędów.
Wykorzystaj testy A/B do porównywania efektywności dwóch różnych wersji oprogramowania. Przypisz losowych użytkowników do jednej lub drugiej wersji. Na tej podstawie wybierz wersję, która działa lepiej i dostosuj do niej przyszłe działania rozwojowe.
Zapewnij sobie możliwość szybkiego i łatwego cofnięcia wdrożenia w dowolnym momencie, jeśli pojawią się jakiekolwiek problemy z nową wersją. Zmniejszy to wpływ ewentualnych problemów i pozwoli na szybki powrót do stabilności.
Wyzwania i studia przypadków
Mimo wielu zalet, wdrożenie kanaryjskie wiąże się z pewnymi wyzwaniami.
Jednym z wyzwań jest opóźnienie sieci, które może mieć wpływ na wydajność nowej wersji oprogramowania. Aby zaradzić temu problemowi, programiści mogą korzystać z narzędzi, takich jak moduły równoważenia obciążenia i sieci dostarczania treści, które poprawiają wydajność sieci. Nie dotyczy to tylko opóźnień z zewnątrz, ale również opóźnień procesów wewnętrznych, takich jak wdrożenia czy wykonywanie potoków CI/CD. Powinny one być jak najkrótsze, aby uniknąć sytuacji, w której programiści bezczynnie czekają na zakończenie działania potoków.
Kolejnym wyzwaniem jest zapewnienie spójności danych pomiędzy starą a nową wersją oprogramowania. W tym celu programiści mogą wykorzystać techniki, takie jak replikacja i synchronizacja baz danych, aby zagwarantować spójność danych we wszystkich wersjach. Posiadanie użytkowników produkcyjnych korzystających jednocześnie ze starych i nowych wersji wymaga pewności, że obie wersje są nieustannie zsynchronizowane i że użytkownicy nie tracą żadnych danych tylko dlatego, że należą do grupy „Kanarek” / „Baseline”. Może to być trudne do osiągnięcia, dlatego należy zabezpieczyć się solidnymi procesami działającymi w tle.
Netflix jest dobrze znanym przykładem firmy, która wykorzystuje wdrożenie kanaryjskie do wprowadzania zmian w swojej usłudze przesyłania strumieniowego. Firma stosuje połączenie testów automatycznych, flag funkcji i testów A/B, aby stopniowo wprowadzać zmiany.
Google to kolejny przykład firmy, która stosuje wdrożenie kanaryjskie do wprowadzania zmian w swoich usługach w chmurze. Google również wykorzystuje zalety automatycznego testowania, podziału ruchu i monitorowania, aby etapami wprowadzać zmiany u części użytkowników, zanim wdroży je dla wszystkich. Takie podejście pomogło Google poprawić jakość i stabilność swoich usług.
Podsumowanie
Jak w przypadku wszystkich procesów, podejść i strategii, wdrożenie kanaryjskie nie jest uniwersalnym rozwiązaniem wszystkich problemów. Zdarzają się sytuacje, gdy wdrożenie jest niemal niemożliwe ze względu na ograniczenia środowiskowe, brak wiedzy lub ogólne niezrozumienie koncepcji.
Jest ono znacznie bardziej odpowiednie dla projektów nowej ery, gdzie elastyczne podejście jest podstawą, automatyzacja każdego procesu jest priorytetem, a maksymalny poziom niezawodności jest silnie oczekiwany przez interesariuszy.
W takim kontekście, wdrożenie kanaryjskie można postrzegać jako kolejny etap ewolucji zwinnych praktyk programistycznych. Może przenieść zespoły w obszary, w których projekty wcześniej nie były realizowane.
Teraz warto przyjrzeć się kwestiom skalowania i optymalizacji CI/CD.