Wyjaśnienie niebiesko-zielonego wdrożenia i jego roli w DevOps

Tradycyjne podejścia „wielkiego wybuchu” do tworzenia oprogramowania są niekompatybilne z wysokimi wymaganiami dotyczącymi elastyczności, zwinności i ciągłego wdrażania dzisiejszych platform oprogramowania w chmurze i DevOps.

Samo przygotowanie listy kontrolnej ręcznych kroków do wykonania podczas wdrożenia wersji produkcyjnej nie wystarczy. Jeśli to robisz, nie jesteś tak naprawdę zwinny, ani nie jesteś właściwym DevOpsem.

Niebiesko-zielone wdrożenie: przegląd

Niebiesko-zielone wdrażanie to podejście do wdrażania oprogramowania, które ogranicza przestoje i ryzyko związane z nowymi wersjami oprogramowania, tworząc dwa identyczne środowiska: aktywne (niebieskie) i nieaktywne (zielone).

Środowisko aktywne to miejsce, w którym działa bieżąca wersja oprogramowania, a użytkownicy generują ruch produkcyjny. Środowisko nieaktywne to miejsce, w którym wdrażana i testowana jest nowa wersja oprogramowania.

Po przetestowaniu i przygotowaniu nowej wersji ruch jest przełączany ze środowiska aktywnego do środowiska nieaktywnego, co czyni je nowym środowiskiem aktywnym. W razie potrzeby możesz powtórzyć ten proces.

Źródło: docs.aws.amazon.com

Kontekst DevOps

Wdrożenie Blue-Green dobrze pasuje do sposobu myślenia i procesów DevOps, ponieważ wspiera ciągłe dostarczanie i wdrażanie oprogramowania, jednocześnie minimalizując przestoje dla użytkowników produkcyjnych i eliminując ryzyko niepowodzenia wydania produkcyjnego.

Posiadanie dwóch identycznych środowisk umożliwia testowanie i wdrażanie nowych wersji oprogramowania bez wpływu na obecne środowisko produkcyjne. Oznacza to szybsze i częstsze wydania, co jest kluczowym aspektem DevOps.

Dodatkowo możliwość szybkiego przełączania ruchu między środowiskami jest podstawowym warunkiem szybkiego wycofania zmian w przypadku problemów, co jest również ważne w środowisku DevOps.

Kluczowe zasady wdrażania niebiesko-zielonego

# 1. Dwa identyczne środowiska

Wdrożenie Blue-Green wymaga utworzenia dwóch identycznych środowisk. Czyli identyczne z punktu widzenia danych i procesów. Jeden jest aktywny (niebieski), a drugi nieaktywny (zielony).

Niebieskie środowisko to miejsce, w którym użytkownicy produkcyjni wykonują swoje codzienne procesy. Zielone środowisko jest zawsze zsynchronizowane z niebieskim, ale testerzy przeprowadzają tam swoje przypadki testowe. Mimo że to środowisko nie jest środowiskiem produkcyjnym, przeprowadzasz testy w rzeczywistych warunkach, ponieważ jest to środowisko podobne do produkcyjnego.

#2. Przełącznik ruchu

Po przetestowaniu i przygotowaniu nowej wersji oprogramowania, ruch jest przełączany ze środowiska aktywnego do środowiska nieaktywnego, co czyni je nowym środowiskiem aktywnym.

Przełącznik jest natychmiastowy. Wszystkie wdrożenia należą już do przeszłości. Nie ma okna przestoju. Użytkownicy nie muszą nic robić, aby dostać się do nowego środowiska. Są one przekierowywane automatycznie i wszystkie jednocześnie.

Źródło: aws.amazon.com

#3. Szybkie wycofanie

Możliwość szybkiego przełączania ruchu między środowiskami oznacza również szybkie wycofywanie zmian w przypadku problemów. Zapewnia to minimalne przestoje, a aplikacja pozostaje wysoce dostępna.

Jeśli coś pójdzie nie tak z zielonym środowiskiem, wszyscy użytkownicy natychmiast przełączą się z powrotem do stabilnego oryginalnego niebieskiego środowiska bez żadnych zakłóceń.

#4. Testowanie automatyczne

Zautomatyzowane testowanie jest kluczowym aspektem wdrożenia Blue-Green. Daje pewność, że nowa wersja oprogramowania zostanie dokładnie przetestowana, zanim zostanie wdrożona w aktywnym środowisku.

Jeśli nie masz znacznej liczby zautomatyzowanych testów w swoich systemach (w tym co najmniej testów jednostkowych, testów funkcjonalnych i testów regresji), prawdopodobnie nie ma nawet sensu myśleć o wdrożeniu Blue-Green.

Brak automatycznych testów znacznie Cię spowolni. Czas potrzebny na przetestowanie nowego (zielonego) środowiska będzie na tyle długi, że zanim będziesz mógł przejść na zielone środowisko, będzie ono już „za stare” z punktu widzenia cyklu życia oprogramowania.

#5. Ciągła dostawa

Wdrożenie Blue-Green jest częścią potoku ciągłego dostarczania, co ostatecznie oznacza szybsze i częstsze wprowadzanie oprogramowania do produkcji.

Możesz dokonać zmiany, gdy tylko będziesz gotowy do przetestowania nowej wersji oprogramowania w zielonym środowisku. Ponieważ wdrożenie zostało już zakończone i wystarczy wykonać samo przełączenie ruchu, jest tak szybkie, że można to robić codziennie. Oczywiście zakładając, że jesteś szybki również w czynnościach testowych.

Typowy cykl życia

Platforma, na której działa wdrożenie Blue-Green, ma swój własny cykl życia obejmujący kroki i procesy do wykonania. Oto, z czego zwykle składa się:

  • Zbuduj nową wersję oprogramowania. Obejmuje to skompilowanie kodu, uruchomienie automatycznych testów i utworzenie możliwego do wdrożenia artefaktu.
  • Kolejnym etapem jest wdrożenie nowej wersji oprogramowania w nieaktywnym (zielonym) środowisku. Obejmuje to skonfigurowanie środowiska, wdrożenie artefaktu i skonfigurowanie wszelkich niezbędnych ustawień.
  • Po wdrożeniu nowej wersji oprogramowania w zielonym środowisku uruchom automatyczne testy, aby upewnić się, że nowa wersja działa poprawnie. Obejmuje to testy funkcjonalne, testy regresji, testy integracyjne, a jeśli jesteś wybitny, nawet testy wydajnościowe.
  • Przełącz ruch ze środowiska aktywnego (niebieskiego) do środowiska nieaktywnego (zielonego). Obejmuje to aktualizację systemu równoważenia obciążenia lub ustawień DNS w celu kierowania ruchu do zielonego środowiska. Oczywiście chcesz, aby odbywało się to za pomocą zautomatyzowanych procesów.
  • Po zakończeniu przełączania monitoruj aplikację, aby upewnić się, że działa poprawnie. Obejmuje to monitorowanie błędów, problemów z wydajnością i innych problemów.
  • Ten krok jest opcjonalny i nie chcesz go wykonywać zbyt często. Ale jeśli ktoś wykryje jakiekolwiek istotne problemy, przełącz ruch z powrotem do niebieskiego środowiska, aby wykonać natychmiastowe wycofanie. Ponownie, bez przestojów i rozłączeń związanych z użytkownikami produkcyjnymi. Po prostu zaktualizuj system równoważenia obciążenia lub ustawienia DNS, aby kierować ruch do niebieskiego środowiska.
  • Gdy rozwiążesz te problemy i będziesz gotowy do powrotu do nowej wersji, przełącz ruch z powrotem do zielonego środowiska. Więc jeszcze raz – zaktualizuj system równoważenia obciążenia lub ustawienia DNS, aby skierować ruch z powrotem do zielonego środowiska.
  • Wreszcie, gdy nowa wersja oprogramowania jest stabilna i działa poprawnie, wycofaj starą wersję oprogramowania działającą w niebieskim środowisku. Będziesz go potrzebować do zbudowania kolejnej nowej wersji systemu.
  • Wdrażanie potoków CI/CD

    Wdrażanie wdrożenia Blue-Green w potoku DevOps CI/CD powinno być procesem naturalnym.

    Silnym warunkiem wstępnym jest posiadanie już tych dwóch identycznych środowisk. Ponieważ będzie to zautomatyzowany proces, możesz użyć infrastruktury jako narzędzia kodu, takiego jak AWS CloudFormation lub nawet niezależny od chmury Terraformacja skrypty do tworzenia/odtwarzania/aktualizacji środowisk dla Ciebie w ramach zautomatyzowanych potoków.

    Gdy już to zrobisz, jest to stosunkowo łatwy krok w kierunku stworzenia w pełni zautomatyzowanego procesu wdrażania. Po prostu ponownie wykorzystujesz już istniejące rurociągi do tworzenia niebieskiego i zielonego środowiska. Jednak tym razem musisz uwzględnić w rurociągu również procesy testowe.

    Proces przełączania ruchu można zautomatyzować za pomocą narzędzi takich jak Elastyczny system równoważenia obciążenia AWS Lub NGINX. Obejmuje to aktualizację systemu równoważenia obciążenia lub ustawień DNS w celu kierowania ruchu do zielonego środowiska po przetestowaniu i przygotowaniu nowej wersji oprogramowania.

    Kolejnym elementem układanki jest monitoring. W tym celu użyj narzędzi takich jak AWS Cloud Watch, Nnowy reliktLub Datadog.

    Wreszcie, ponownie wykorzystaj istniejące rurociągi, nawet do likwidacji starego niebieskiego środowiska. Od Ciebie zależy, czy najpierw wykonasz zniszczenie dla wszystkich usług i komponentów przed odtworzeniem ich od podstaw, czy też możesz po prostu zaktualizować skrypty dla każdej usługi w łańcuchu. Zwykle zniszczenie i odtworzenie jest bezpieczniejszą opcją, ponieważ w przypadku aktualizacji masz znacznie więcej przypadków narożnych do rozważenia.

    Najlepsze praktyki wdrażania niebiesko-zielonego

    Zastanawiasz się, jak najlepiej wykorzystać wdrożenie Blue-Green? Oto kilka wskazówek płynących z praktyki.

    Miej solidną strategię migracji baz danych

    Podczas wdrażania nowej wersji oprogramowania należy upewnić się, że schemat bazy danych jest poprawnie zaktualizowany. Użyj strategii migracji bazy danych, takiej jak Przelot Lub Likwibaza do zarządzania zmianami schematu bazy danych.

    Użyj narzędzia do analizy kanaryjskiej

    Mimo że wdrożenie Canary jest podejściem alternatywnym, nadal możesz użyć niektórych jego technik, aby udoskonalić wdrożenie Blue-Green.

    Użyj narzędzia do analizy kanarków, takiego jak Kayenta Lub Spinaker analizować wydajność nowej wersji oprogramowania w rzeczywistym środowisku. Obejmuje to porównanie wydajności nowej wersji oprogramowania z wydajnością starej wersji oprogramowania.

    Użyj struktury przełączania funkcji, takiej jak Togglz w celu włączenia lub wyłączenia funkcji w nowej wersji oprogramowania. Pozwala to na stopniowe wdrażanie nowych funkcji i umożliwia szybkie wycofywanie w razie potrzeby.

    Użyj modułu równoważenia obciążenia z kontrolami kondycji

    Użyj systemu równoważenia obciążenia, takiego jak AWS Elastic Load Balancer lub NGINX z kontrolami kondycji, aby mieć pewność, że ruch jest kierowany tylko do sprawnych instancji. Dzięki temu aplikacja pozostaje wysoce dostępna, a przestoje są zminimalizowane.

    Skorzystaj z planu wycofywania z automatycznym wycofywaniem

    Przygotuj plan wycofywania zmian na wypadek problemów i zautomatyzuj proces wycofywania za pomocą narzędzia takiego jak AWS CodeDeploy lub Octopus Deploy. Zapewnia to zminimalizowanie przestojów i wysoką dostępność aplikacji.

    Dotyczy to głównie zielonego środowiska, gdy odkryjesz jakiś istotny problem z nową wersją.

    Nie potrzebujesz planu wycofania dla niebieskiego środowiska, ponieważ to pozostaje nietknięte przez przełącznik i możesz wrócić do tego stabilnego środowiska w dowolnym momencie i natychmiast.

    Wyzwania związane z wdrażaniem niebiesko-zielonym

    Wdrażanie wdrożenia Blue-Green może stanowić pewne wyzwanie dla zespołów programistycznych. Oto kilka typowych wyzwań:

  • Konfigurowanie i zarządzanie dwoma identycznymi środowiskami może być skomplikowane i czasochłonne. Wymaga to specjalistycznej wiedzy w zakresie infrastruktury, takich jak narzędzia kodu, takie jak Terraform lub CloudFormation. Musisz mieć zespół programistów wyższego szczebla, który jest w stanie poradzić sobie z takimi wyzwaniami technicznymi.
  • Podczas wdrażania nowej wersji oprogramowania należy upewnić się, że schemat bazy danych jest poprawnie zaktualizowany. Może to być trudne, zwłaszcza jeśli schemat bazy danych jest złożony. Potrzebujesz solidnych procesów wdrażania bazy danych, które mogą automatycznie i niezawodnie obsłużyć działania związane z aktualizacją schematu.
  • Analiza wydajności nowej wersji oprogramowania w rzeczywistym środowisku może być wyzwaniem. Wymaga to znajomości narzędzi do analizy kanarków, takich jak Kayenta lub Spinnaker.
  • Implementowanie przełączania funkcji może być trudne, zwłaszcza jeśli aplikacja ma dużą liczbę funkcji. Wymaga to starannego planowania i koordynacji między zespołami programistów.
  • Testowanie nowej wersji oprogramowania w rzeczywistym środowisku może być trudne, zwłaszcza jeśli aplikacja ma dużą liczbę użytkowników lub serwerów. Musisz maksymalnie zautomatyzować przypadki testowe. Ponadto rutynowe procesy zakończą się dużą koordynacją między zespołami programistycznymi i testowymi.
  • Posiadanie dobrego rozwiązania do monitorowania jest bardzo rzadką rzeczywistością, ale dla prawidłowego działania DevOps jest koniecznością. Tak szybko, jak to możliwe, zainwestuj czas w zbudowanie tego rozwiązania ze sprawdzonymi usługami (AWS CloudWatch, New Relic, Datadog).
  • Różnica między wdrożeniem niebiesko-zielonym a kanaryjskim

    Chociaż różnica w porównaniu z tradycyjnymi procesami wdrażania jest dość oczywista (nie ma dwóch równoległych środowisk działających z różnymi wersjami oprogramowania w tradycyjnych procesach wdrażania), różnica w porównaniu z wdrożeniem Canary może być nieco bardziej interesująca.

    Wdrożenie Blue-Green oznacza dwa środowiska (niebieskie i zielone). Ale jednocześnie te dwa środowiska są stale zsynchronizowane pod względem danych. Gdy nowa wersja zostanie przetestowana i uznana za gotową, ruch jest przełączany ze środowiska aktywnego do środowiska nieaktywnego, co czyni je nowym środowiskiem aktywnym. Nie tracisz czasu na wdrażanie nowego kodu i nie ma przestojów w produkcji. Wszyscy użytkownicy produkcyjni cały czas pracują na aktualnie aktywnym środowisku i nawet nie zauważają zmiany.

    Wdrożenie Canary obejmuje wdrożenie nowej wersji oprogramowania dla niewielkiej grupy użytkowników, podczas gdy większość użytkowników lub serwerów nadal korzysta z bieżącej wersji. Jest to stopniowe wdrażanie, a nie pełna zmiana. W tym przypadku testerzy są bezpośrednimi użytkownikami produkcyjnymi, chociaż stanowią tylko określony ich podzbiór. Ta grupa aktywnie testuje nową wersję z procesami produkcyjnymi, a kiedy wreszcie będzie stabilna, nowa wersja zostanie rozprzestrzeniona na resztę użytkowników.

    Więc który jest lepszy?

    Odpowiedź konsultanta „to zależy” pasuje tutaj jak najbardziej złośliwie.

    Jeśli priorytetem Twojego systemu jest przede wszystkim wysoka dostępność, to wdrożenie Blue-Green będzie Twoim wyborem.

    Jeśli zdecydowanie preferujesz szybszą informację zwrotną i bardziej kontrolowane (choć wolniejsze) wdrażanie nowej wersji systemu, to wdrożenie Canary ma przewagę nad Blue-Green.

    Ważne jest to, że obaj są wystarczająco zwinni, aby uważać się za wystarczająco dobrych do tworzenia poważnych systemów DevOps.

    Studium przypadku

    Netflix wykorzystuje wdrożenie Blue-Green do wdrażania nowych wersji swojej usługi przesyłania strumieniowego. Korzystając z wdrożenia Blue-Green, Netflix może wdrażać nowe wersje swojej usługi bez wpływu na wrażenia użytkownika. W rzeczywistości Netflix wykorzystuje równolegle wdrożenie Canary w innych przypadkach, więc połączenie różnych podejść do wdrażania DevOps pod jednym dachem nie jest nierealne.

    Ponadto Amazon i Etsy wykorzystują wdrożenie Blue-Green do wdrażania nowych wersji swojej platformy e-commerce.

    Innym przypadkiem jest LinkedIn, który wykorzystuje wdrożenie Blue-Green do wdrażania nowych wersji swojej platformy społecznościowej.

    Co nie mniej ważne, IBM wykorzystuje wdrażanie Blue-Green do wdrażania nowych wersji swojej platformy chmurowej.

    Firmy te z powodzeniem wdrożyły wdrożenie Blue-Green w swoich infrastrukturach platform i służą jako dobry przykład dla innych.

    Ostatnie słowa

    Podobnie jak Canary, wdrożenie Blue-Green dąży do jak najlepszej optymalizacji już istniejących zwinnych procesów i metodologii, aby płynnie dostarczać nowe oprogramowanie w taki sposób, że nikt go w ogóle nie zauważy. To jest ostateczny cel takich podejść. Dostarczasz stale i bardzo często, ale nikt o tym nie wie, nikt tego nie zauważa i ostatecznie nikogo to nie obchodzi.

    To może być trochę frustrujące dla zespołu programistów, że wokół firmy nie ma plotek na temat ich najnowszych wydań. Ale jeśli mnie pytasz, jest to dokładnie najlepsza usługa, jaką możesz zapewnić. Nikt o tym nie mówi, ale wszyscy używają go na co dzień.

    Następnie zapoznaj się z często zadawanymi pytaniami i odpowiedziami dotyczącymi rozmowy kwalifikacyjnej DevOps.