Kanaryjska strategia wypuszczania kontra niebieski / zielony

125

W moim rozumieniu wydanie kanarka jest takie, że jest to częściowe wydanie do podzbioru węzłów produkcyjnych z włączonymi sesjami lepkimi. W ten sposób możesz kontrolować i minimalizować liczbę użytkowników / klientów, na których wpłynie, jeśli w końcu opublikujesz zły błąd.

Moje rozumienie wydania niebiesko-zielonego jest takie, że masz 2 lustrzane środowiska produkcyjne („niebieskie” i „zielone”) i wypychasz zmiany jednocześnie do wszystkich węzłów niebieskiego lub zielonego, a następnie używasz magii sieci do sterowania do którego środowiska są kierowani użytkownicy przez DNS.

Tak więc, zanim zacznę, jeśli cokolwiek, co powiedziałem do tej pory, jest niepoprawne, zacznij od poprawienia mnie!

Zakładając, że jestem mniej więcej na dobrej drodze, kilka pytań dotyczących tych dwóch strategii:

  • Czy istnieją scenariusze, w których kanarek jest preferowany niż niebieski / zielony i odwrotnie?
  • Czy istnieją scenariusze, w których model wdrażania może zaimplementować obie strategie w tym samym czasie?
IAmYourFaja
źródło
5
Twoje zrozumienie jest rozsądne, ale nie sformułowałbym niebiesko-zielonej strategii jako wymagającej wdrożenia do wszystkich węzłów jednocześnie. Możesz je wdrożyć tak spokojnie, jak chcesz - jedyną presją są twoje własne terminy. Dodatkowo możesz użyć niebiesko-zielonego, aby zwolnić zmiany tylko dla podzbioru twoich węzłów (np. Modyfikując tylko jedną z wielu pul punktów końcowych API).
Patrick M,
1
Bardzo ładne podsumowanie tych pojęć, które widzę wszędzie, bez jasnej definicji!
kheraud

Odpowiedzi:

94

Uwalnianie niebiesko-zielone jest prostsze i szybsze.

Państwo może zrobić niebiesko-zielony uwalnianie jeśli Przetestowałem nowej wersji w środowisku testowym i są bardzo pewne, że nowa wersja będzie działać poprawnie w produkcji. Ciągłe używanie przełączników funkcji to dobry sposób na zwiększenie zaufania do nowej wersji, ponieważ nowa wersja działa dokładnie tak samo, jak stara, dopóki ktoś nie zmieni przełącznika funkcji. Dzielenie aplikacji na małe, niezależnie wydawane usługi to inna sprawa, ponieważ jest mniej do przetestowania, a mniej do zepsucia.

Ty musisz zrobić kanarek uwalnianie jeśli nie jesteś całkowicie pewien, że nowa wersja będzie działać poprawnie w produkcji. Nawet jeśli jesteś dokładnym testerem, Internet jest obszernym i złożonym miejscem, w którym zawsze pojawiają się nieoczekiwane wyzwania. Nawet jeśli używasz przełączników funkcji, jeden z nich może być nieprawidłowo zaimplementowany.

Automatyzacja wdrażania wymaga wysiłku, dlatego większość organizacji planuje za każdym razem korzystać z jednej lub drugiej strategii.

Zrób więc wdrażanie niebiesko-zielone, jeśli jesteś zaangażowany w praktyki, które pozwalają ci mieć pewność, że to robisz. W przeciwnym razie wyślij kanarka.

Istotą niebiesko-zielonego jest wdrażanie wszystkich naraz, a istotą wdrażania kanarków jest wdrażanie stopniowe, więc biorąc pod uwagę jedną pulę użytkowników, nie mogę wymyślić procesu, który opisałbym jako wykonujący oba jednocześnie. Gdybyś miał wiele niezależnych pul użytkowników, np. Korzystających z różnych regionalnych centrów danych, mógłbyś zrobić niebiesko-zielony w każdym centrum danych i kanarek w centrach danych. Chociaż gdybyś nie potrzebował wdrożenia Canary w centrum danych, prawdopodobnie nie byłbyś potrzebny w centrach danych.

Dave Schweisguth
źródło
Kilka słów o znaczeniu kolorów: - stare otoczenie mogłoby być niebieskie, nowe zielone. - W następnym wydaniu stare będzie zielone. Wiki:> Wiele języków nie rozróżnia tego, co w języku angielskim określa się jako „niebieski” i „zielony” i zamiast tego używa terminu obejmującego oba te elementy - „grue”
kinjelom.
Kanarek nie zawsze jest szybszy niż niebieski / zielony. Wszystko zależy od przepływów pracy CI i CD!
Ligemer
81

Napisałem szczegółowy esej na ten temat tutaj: http://blog.itaysk.com/2017/11/20/deployment-strategies-defined

Moim zdaniem różnica polega na tym, czy nowa „zielona” wersja jest widoczna dla prawdziwych użytkowników. Jeśli tak, to nazwałbym to Canary. Powszechnym sposobem implementacji Canary jest zwykły niebieski / zielony z dodatkiem inteligentnego routingu określonych użytkowników do nowej wersji. Przeczytaj post, aby uzyskać szczegółowe porównanie

Niebieski zielony: wprowadź opis obrazu tutaj

Kanarek: wprowadź opis obrazu tutaj

itajsk
źródło
4
Twoje ilustracje są świetne, mógłbym rozważyć umieszczenie ich w twojej odpowiedzi tutaj, ale zachowując link do głębszego nurkowania z wyjaśnieniami.
quickshiftin
Dzięki. Dodali je
itaysk
4
Bardzo dobre wyjaśnienie. Ale lepiej byłoby pokazać próbkę procentową obciążenia użytkownika na ilustracji kanarka.
nikli
Jaka jest różnica między „w trakcie” i „po” na diagramie wersji Canary? Spodziewałem się, że „po” będzie wyglądać tak, jak na niebiesko-zielonym wydaniu
Kes115
obie metody mają na celu zmniejszenie ryzyka poprzez ocenę nowej wersji. w trakcie oznacza, że ​​nowa wersja jest wdrażana, ale nie podjęto jeszcze decyzji dotyczącej dalszego postępowania. po środkach po podjęciu pozytywnej decyzji o kontynuowaniu.
itaysk
6

Chociaż oba te terminy wyglądają dość blisko siebie, mają subtelne różnice. Jedna z nich pokłada zaufanie w wydaniu funkcjonalności, a druga w sposób, w jaki ją udostępniasz.

Kanarek

  1. Wersja kanarek to technika zmniejszania ryzyka wprowadzenia nowej wersji oprogramowania do produkcji poprzez powolne wdrażanie zmiany na niewielkiej grupie użytkowników przed wdrożeniem jej w całej infrastrukturze.

  2. Zaraz się zorientujesz, jak będzie działać nowa wersja (integracja z innymi aplikacjami, procesorem, pamięcią, wykorzystaniem dysku itp.).

Niebieski zielony:

  1. Chodzi bardziej o przewidywalną wersję bez przestojów.
  2. Łatwe przywracanie w przypadku awarii.
  3. Całkowicie zautomatyzowany proces wdrażania
Rahul Garg
źródło
4

Oto kilka definicji wbudowanych -

  • Wdrożenie niebiesko-zielone - podczas wdrażania nowej wersji aplikacji tworzone jest drugie środowisko. Po przetestowaniu nowego środowiska przejmuje ono starszą wersję. Następnie można wyłączyć stare środowisko.

     

  • Testowanie A / B - dwie wersje aplikacji działają w tym samym czasie. Część żądań trafia do każdego. Programiści mogą następnie porównać wersje.  
  • Wersja Canary - nowa wersja mikrousługi jest uruchamiana wraz ze starymi wersjami. Ta nowa wersja może następnie przyjąć część żądań, a zespół może przetestować, jak ta nowa wersja współdziała z całym systemem.
Ajay Kumar
źródło
3

Dobry początek definicji. Myślę, że przy podejmowaniu decyzji dotyczącej strategii pomocne będzie również podzielenie definicji „wydania” na „wdrożenie” i „wydanie (funkcjonalność)”.

Wdrażanie (pliki binarne)

Akcja binarnego wdrożenia produktu w systemie (produkcyjnym).

Wersja (funkcjonalność)

Akcja zarządzania dostępnością funkcjonalności dla (grup) użytkowników.

Czemu? Zwykle masz (wiele) dwa problemy podczas "wypuszczania": 1) Błędy / kompatybilność wsteczna / etc 2) Weryfikacja poprawności / użyteczności nowych funkcji

Następnie zadaj sobie pytanie, zanim wybierzesz strategię Canary lub Blue / Green lub inną szarą / mieszaną strategię: Jakie obawy mamy podczas wydawania / wdrażania nowej wersji? I tylko wtedy, jeśli znasz swoje obawy, wybierz swoją strategię.

Ponadto możliwe jest stosowanie bardziej złożonych strategii Wdrażanie / Wydawanie. Np. W niektórych chmurach / infra możliwe jest posiadanie wielu serwerów produkcyjnych i przekazywanie obciążenia w różnych proporcjach do różnych serwerów i wersji produktu oraz monitorowanie poprawności przed skalowaniem wydania / wdrożenia do wszystkich użytkowników.

Zgłaszanie funkcji

Czynność polegająca na „konfigurowaniu” (na zimno lub nawet gorąco) funkcji (niedostępnych) dla których (grupy) użytkowników

Jeśli również zrobisz coś takiego jak "flagowanie funkcji", możesz wdrożyć najpierw, zmierzyć poprawność wydania w perspektywie kompatybilności wstecznej / błędów i stopniowo udostępniać nową funkcjonalność różnym użytkownikom lub odwrotnie (skalowanie w dół lub nawet wycofywanie funkcjonalności i / lub plików binarnych ). Oznaczanie funkcji umożliwia oddzielenie dostępności funkcji od wdrażania plików binarnych i zapewnia znacznie bardziej precyzyjne podejmowanie decyzji niż tylko „wdrażanie / wycofywanie”

Roland Roos
źródło