Co to są wzorce wdrażania?

Ukończone

Wzorzec wdrażania to zautomatyzowany sposób bezproblemowego wdrażania nowych funkcji aplikacji dla użytkowników. Odpowiedni wzorzec wdrażania pomaga zminimalizować przestoje. Niektóre wzorce umożliwiają również stopniowe wdrażanie nowych funkcji. Dzięki temu możesz zweryfikować nowe funkcje przy użyciu wybranych użytkowników, zanim udostępnisz te funkcje wszystkim.

W tej sekcji poznasz niektóre typowe wzorce wdrażania. Dowiesz się również, jak usługa Azure App Service pomoże zaimplementować wzorzec wybrany przez zespół Tailspin.

Poranne spotkanie

Zespół Tailspin czuje się dobrze. Ich kanał przyspieszył proces. Zespół ma środowisko programistyczne, w którym może zintegrować aplikację internetową z bazą danych. Zarówno Tim, jak i Amita chętnie mają zautomatyzowane testy, które upraszczają pracę. Ogólnie rzecz biorąc, widzą mniej opóźnień i mniej błędów.

Ale jest, jak zawsze, problem. Wpadnijmy na spotkanie zespołu, gdzie Tim rozmawia.

Tim: Tak trudno jest zachować wszystkich szczęśliwych. Irwin uważa, że wydanie nowych funkcji trwa zbyt długo. Nie mogę nic zrobić, dopóki kierownictwo nie zatwierdzi wydania produktu i w tej chwili nie ma płynnego sposobu na wdrożenie funkcji po uzyskaniu akceptacji. Proces jest nie tylko długi, ale i chaotyczny. Jest to ręczne i występuje przestój. Cały proces może potrwać pięć dni. Wiem, że to za długo, ale co mam zrobić? Może jeśli po prostu piję więcej kawy rozwiązanie przyjdzie do mnie.

Andy: Kawa jest niezbędna do skutecznego rozwiązywania problemów, bez wątpienia.

Myślę, że potrzebne rozwiązanie jest dobrym wzorcem wdrażania. Wzorzec wdrażania to zautomatyzowany sposób przeprowadzenia przejścia. W ten sposób przenosimy oprogramowanie z końcowego etapu przedprodukcyjnego do produkcji na żywo.

Wybór odpowiedniego wzorca zdecydowanie pomoże Ci zminimalizować przestoje. Kolejną zaletą wzorca wdrażania jest to, że daje nam możliwość uruchamiania testów, które powinny naprawdę wystąpić w środowisku produkcyjnym.

Andy zaczyna pisać na tablicy.

Poniżej przedstawiono możliwości, które należy wziąć pod uwagę:

  • Wdrożenie niebiesko-zielone
  • Wersje kanarkowe
  • Przełączanie funkcji
  • Ukryte wdrożenia
  • Testowanie A/B
  • Wdrażanie progresywnego narażenia

Krótko omówimy każdy wzorzec.

Wdrożenia niebiesko-zielone

Wdrożenie niebiesko-zielone zmniejsza ryzyko i przestój dzięki równoczesnemu działaniu dwóch identycznych środowisk. Te środowiska są nazywane niebieskie i zielone. W dowolnym momencie tylko jedno ze środowisk jest aktywne. Wdrożenie niebiesko-zielone zwykle obejmuje router lub moduł równoważenia obciążenia, który pomaga kontrolować przepływ ruchu.

Diagram modułu równoważenia obciążenia rozkładającego ruch we wdrożeniu typu blue-green.

Załóżmy, że niebieski jest żywy. Przygotowujemy nową wersję, przeprowadzamy końcowe testy w środowisku zielonym. Gdy oprogramowanie działa w środowisku zielonym, wystarczy przełączyć router, aby wszystkie żądania przychodzące przechodziły do środowiska zielonego.

Wdrożenie niebiesko-zielone daje również szybką metodę na wycofanie zmian. Jeśli coś pójdzie źle w zielonym środowisku, po prostu przełączymy router z powrotem do niebieskiego środowiska.

Wersje testowe

wydania kanaryjnego jest sposobem wczesnego identyfikowania potencjalnych problemów bez narażania wszystkich użytkowników na problem. Chodzi o to, że udostępniamy nową funkcję tylko małym podzbiorom użytkowników, zanim udostępnimy ją wszystkim.

Diagram modułu równoważenia obciążenia wysyłającego ruch do wersji kanarkowej.

W wydaniu kanaryjnym monitorujemy, co się dzieje, gdy wypuszczamy funkcję. Jeśli wersja ma problemy, zastosujemy poprawkę. Po potwierdzeniu stabilności wydania kanarkowego, przenosimy je do rzeczywistego środowiska produkcyjnego.

Przełączanie funkcji

Użyj przełączników funkcji , aby "przełączać" w czasie wykonywania. Możemy wdrożyć nowe oprogramowanie bez uwidaczniania innych nowych lub zmienionych funkcji dla naszych użytkowników.

W tym wzorcu wdrażania mara i ja kompiluję nowe funkcje za przełącznikiem. Po wydaniu funkcja jest "wyłączona", aby nie wpływała na oprogramowanie produkcyjne. W zależności od sposobu konfigurowania przełącznika możemy przerzucić przełącznik na "włączony" i uwidocznić funkcję w jaki sposób chcemy.

Diagram zakodowanej instrukcji if dla funkcji włącz/wyłącz.

Na przykład możemy udostępnić funkcję najpierw kilku użytkownikom, aby zobaczyć, jak reagują. Ta losowa próbka użytkowników widzi tę funkcję. Możemy też po prostu pozwolić, aby funkcja została udostępniona wszystkim.

Jednak ten wzorzec wdrażania może przynieść korzyści Mara i mi więcej niż ktokolwiek inny. Wielką zaletą wzorca przełączania funkcji jest to, że pomaga nam uniknąć zbyt dużej ilości rozgałęziania. Scalanie gałęzi może być bolesne.

Ukryte wdrożenia

Ciemne uruchamianie jest podobne do wersji kanarkowej lub włączenia funkcji. Zamiast uwidaczniać nową funkcję wszystkim, w ciemnym uruchomieniu udostępniamy tę funkcję małym zestawom użytkowników.

Diagram modułu równoważenia obciążenia wysyłającego ruch do nowej funkcji.

Ci użytkownicy nie wiedzą, że testują dla nas tę funkcję. Nie wyróżniamy im nawet nowej funkcji. Dlatego nazywa się to niejawnym uruchomieniem. Oprogramowanie jest stopniowo lub niestrudnie wydawane użytkownikom, dzięki czemu możemy uzyskać opinie i przetestować wydajność.

Testowanie A/B

testowania A/B porównuje dwie wersje strony internetowej lub aplikacji, aby określić, która z nich działa lepiej. Testowanie A/B jest jak klasyczny eksperyment.

Diagram dwóch aplikacji i ich analizy.

W testach A/B losowo pokazujemy użytkownikom co najmniej dwie odmiany strony. Następnie użyjemy analizy statystycznej, aby zdecydować, które odmiany działają lepiej dla naszych celów.

Wdrażanie progresywnego narażenia

Wdrażanie stopniowe jest czasami nazywane wdrożeniem opartym na pierścieniu . Innym sposobem jest ograniczenie wpływu zmian na użytkowników przy jednoczesnym upewnieniu się, że te zmiany są prawidłowe w środowisku produkcyjnym.

Pierścienie są w zasadzie przedłużeniem etapu kanarkowego. Sama kanarka uwalnia się do etapu w celu mierzenia efektu. Dodanie innego pierścienia jest zasadniczo tym samym pomysłem.

Diagram postępu większych grup.

W ramach wdrożenia opartego na pierścieniu najpierw wdrażamy zmiany u klientów odpornych na ryzyko. Następnie stopniowo wprowadzamy do szerszego grona klientów.

Implementacja wdrożenia niebiesko-zielonego

Andy patrzy na Tima

Andy: To dużo, wiem. Czy chcesz trochę czasu na to pomyśleć? Lub ty i ja moglibyśmy ...

Tim: Niebieski-zielony.

Wszyscy w pokoju śmieje się.

Mara: Czy to kawa tak działa?

Tim: Przełączniki funkcji oznaczają zmianę w sposobie pracy Twojej i Andy'ego. Zróbmy jedną rzecz naraz. Metody, które stopniowo uwidaczniają funkcję, wymagają analizy statystycznej lub przełączników funkcji.

Wdrożenie niebiesko-zielone to coś, co mogę kontrolować. Przełączanie routera jest proste. Jest to łatwe i bezpieczne. Natomiast we wdrożeniu niebieskim zielonym zarządzanie ma środowisko do oceny. Gdy dają ok, możemy łatwo się przełączać. Zacznijmy tam.

Więc pytanie brzmi: jak zaimplementować wdrożenie niebiesko-zielone w naszym procesie wdrażania?

Co to są sloty wdrożeniowe?

Andy: Ponieważ używamy usługi Azure App Service, możemy skorzystać z miejsc wdrożenia. Miejsca wdrożenia uruchamiają aplikacje, które mają własne nazwy hostów.

Wiem, że nie jesteśmy jeszcze gotowi do wdrożenia witryny internetowej Space Game do produkcji jako część zautomatyzowanego pipeline'u. Jednak jako test możemy dodać miejsce wdrożenia do naszego środowiska testowego.

Zamiast konfigurować moduł równoważenia obciążenia lub router, możemy dodać drugie miejsce do wystąpienia usługi App Service używanego w istniejącym środowisku przejściowym. Możemy wywołać gniazdo podstawowe niebieskie i gniazdo pomocnicze zielony.

Diagram aplikacji zamieniających adresy IP.

W ten sposób można wdrażać nowe funkcje bez przestojów. Zamieniamy aplikację i jej konfigurację między dwoma miejscami wdrożenia. Zasadniczo zamieniamy adresy IP dwóch slotów.

Tim: podoba mi się to! Możesz wywołać tę odmianę wdrożenia niebieskiego zielonego wdrożenia bez przestojów.

Andy: Świetnie! Tim i ja będziemy pracować nad wdrożeniem tego schematu wdrażania. Wszyscy możemy spotkać się później, aby zobaczyć wyniki.

Zalecenia dotyczące używania flag funkcji

Flagi funkcjonalności były jedną z metod częstotliwości wydawania, które zespół rozważył. Zespół zdecydował się nie używać flag funkcji, ale wiele osób znalazło je przydatne. Ta sekcja zawiera więcej informacji na temat przełączników funkcji.

Flagi funkcji, czasami nazywane przełącznikami funkcji, umożliwiają zmianę sposobu działania systemu bez zmiany kodu. Te flagi umożliwiają wypchnięcie nowego kodu do centralnej gałęzi rozwoju i wdrożenie go, ale kod niekoniecznie musi być funkcjonalny. Flagi są często implementowane jako wartość zmiennych kontrolujących logikę warunkową.

Wyobraź sobie, że Twój zespół pracuje w centralnej gałęzi rozwoju aplikacji bankowej. Zdecydowałeś się wykonać całą pracę w gałęzi głównej, aby uniknąć późniejszych kłopotliwych operacji scalania. Ale napotykasz problem. Znacząco zmieniasz obliczenia odsetek, a ludzie zależą od tego kodu każdego dnia. Co gorsza, zmiany potrwają kilka tygodni. Nie można pozostawić głównego kodu uszkodzonego przez tak długi czas.

W tym scenariuszu flaga funkcji może być dobrym rozwiązaniem. Możesz zmienić kod, aby użytkownicy, którzy nie mają ustawionej flagi funkcji, mogli nadal używać oryginalnego kodu obliczania odsetek. Tymczasem twój zespół ma ustawioną flagę funkcji, dzięki czemu mogą zobaczyć kod, który zmieniają.

Innym typem flagi funkcjonalności jest flaga wydania . Wyobraź sobie, że po zakończeniu pracy nad kodem obliczenia odsetek chcesz wypróbować go przed opublikowaniem go publicznie. Masz grupę użytkowników, którzy są dobrze pozycjonowani, aby poradzić sobie z nowym kodem i wszelkimi możliwymi problemami. Pozwolisz im najpierw wypróbować tę funkcję. Zmieniasz konfigurację, aby również oni mieli ustawioną flagę funkcji i mogli przetestować nowy kod. Jeśli wystąpią problemy, możesz szybko wyłączyć flagę.