Jak uniknąć przestojów przy wdrażaniu nowej funkcji w aplikacji?

1 rok temu

Aplikacje wymagają aktualizacji. Wdrożeniu nowej wersji towarzyszą wyzwania takie jak możliwość pojawienia się przestojów, czy też incydentów kończących się nieskuteczną implementacją. W tym artykule pokazujemy jak zminimalizować liczbę błędów, zarówno ludzkich jak i procesowych, czego skutkiem będzie skuteczne i powtarzalne wdrożenie.

Jakie są cele biznesowe wdrożenia?

W zależności od założonego celu biznesowego, mamy do czynienia z różnymi rodzajami wdrożeń. Jednym z nich jest wprowadzenie zmian bez niepotrzebnych przestojów. Inną może być konieczność dokonania transformacji wewnątrz środowiska albo też podzbioru użytkowników. Bez względu na cel, pierwszym krokiem jest określenie strategii wdrażania.

Strategie wdrażania aplikacji

Uruchomienie nowej usługi jest często oddzielone od faktu udostępnienia jej użytkownikom. Jednak w przypadku usług wdrażanych w modelu in-place, zarówno deployment jak i udostępnienie następują symultanicznie. Oznacza to, iż już w momencie wdrożenia nowej wersji, zaczyna ona akceptować ruch produkcyjny.

Możliwe jest również równoległe wdrażanie i udostępnianie wielu wersji usługi, tu z pomocą przychodzi Kubernetes. Możemy też skorzystać z trzech podstawowych wzorców wdrażania nowych aplikacji, które zapewnią elastyczność i odpowiedni poziom automatyzacji. Pomogą nam w tym narzędzia dostępne w ramach platformy Google Cloud, takie jak m.in. Load Balancer.

Wzorzec wdrożenia odtworzeniowego (recreate deployment pattern)

Korzystając z wzorca odtworzonego wdrażania możesz całkowicie zeskalować obecną wersję aplikacji w górę. Aby wdrożyć wersję nr 2 musisz w pierwszej kolejności przeskalować istniejące repliki wersji nr 1 do zera, a następnie wdrażasz te repliki wraz z nową wersją aplikacji.

Model ten, charakteryzujący się prostotą, sprawia, iż nie musisz zarządzać równolegle więcej niż jedną wersją aplikacji. Pozwala to uniknąć problemów związanych ze zgodnością wsteczną (backward compatibility) danych oraz aplikacji. Wybór tej metody może jednak wiązać się z przestojami. O ile w przypadku rozwiązań, które mają zaplanowane przerwy konserwacyjne, nie jest to większym problemem, to już usługi o znaczeniu krytycznym, obarczone umowami o wysokim poziomie usług (SLA), jak również wymaganiami dotyczącymi dostępności, będę wymagały innego sposobu wdrożenia zmian.

Benefity wdrażania odtworzeniowego:

· prostota,

· zarządzanie jedną wersją aplikacja na raz,

· unikanie wyzwań związanych z kompatybilnością wsteczną danych i aplikacji.

Wzorzec wdrożenia kroczącego (rolling update deployment pattern)

Rozwiązaniem omówionego powyżej problemu może być wybór wzorca wdrożenia kroczącego. W tym przypadku, zamiast jednocześnie aktualizować każdą instancję aplikacji, aktualizacji ulega podzbiór uruchamianych instancji.

Metoda ta pozwala na stopniowe rolowanie aplikacji. Liczba instancji, które aktualizują się jednocześnie nazywa się rozmiarem okna (window size). W przypadku większych klastrów konieczne jest zwiększenie window size.

Wzorzec wdrożenia kroczącego pozwala ci zyskać większą elastyczność w sposobie dokonywania aktualizacji. Możesz wybrać, czy wolisz dokonać przeskalowania instancji nowej aplikacji w górę zanim dokonasz przeskalowania instancji starej aplikacji w dół. Z drugiej strony jesteś w stanie określić maksymalną liczbę instancji aplikacji, które pozostaną niedostępne podczas równoległego skalowania w górę nowych instancji.

Dzięki tej metodzie możesz uniknąć przestojów w działaniu aplikacji. Bazując na rozmiarze okna możesz wybrać model wdrożenia „one by one” lub „two by two”. Ruch do zaktualizowanych miejsc docelowych jest kierowany dopiero w momencie, w którym aplikacja w całości jest gotowa. Kolejną korzyścią jest fakt, iż ewentualne nieprawidłowości w działaniu nowej wersji aplikacji nie będą globalne – mogą dotyczyć tylko części użytkowników.

Jeżeli okaże się, iż po wdrożeniu aplikacja nie jest stabilna, możliwe jest wyłączenie nowych replik i wdrożenie starej wersji (slow rollback). W tym przypadku warto jednak pamiętać, iż jest to stopniowy, przyrostowy proces, zbliżony w swojej strukturze do wdrażania nowej wersji.

Zwróć uwagę na fakt, iż w przypadku wyboru wzorca wdrożenia kroczącego, zarówno nowy jak i stary kod działają równolegle obok siebie. Sprawia to, iż użytkownicy mogą być arbitralnie kierowani do jednej z tych wersji. Musisz mieć więc pewność, iż nowe wdrożenie jest kompatybilne z poprzednim. Innymi słowy – nowa aplikacja powinna odczytywać i obsługiwać dane, do których miała dostęp stara wersja. Zarówno te znajdujące się na dysku, jak również w bazie danych czy zapisane w sesji przeglądarki użytkownika.

Jeśli aplikacja wymaga zachowania sesji, to może w tym pomóc load balancer wspierający „lepką sesję” oraz „connection draining”. Dodatkowo, rekomendowane jest aby wdrożyć w aplikacji współdzielenie sesji zawsze gdy jest to możliwe, np. dzięki bazy NoSQL, takiej jak Datastore, pozwoli to oddzielić sesję od zasobów aplikacji.

Benefity wdrażania kroczącego:

· brak przestojów,

· mniejsze ryzyko wdrożeniowe,

· łatwe przywracanie poprzedniej wersji – slow rollback.

Wdrażanie niebiesko-zielone (blue/green deployment pattern)

Ten model zakłada wykonanie dwóch identycznych wdrożeń. Diagram zaznaczony na rysunku kolorem niebieskim obrazuje aktualną wersję aplikacji, podczas gdy zielony jest wersją nową. Na etapie początkowym dostępna jest tylko pierwsza wersja, do której kierowany jest ruch. W międzyczasie dokonujemy wdrożenia i testowania wersji zielonej. W momencie, w którym testy kończą się sukcesem następuje przekierowanie ruchu do nowej wersji.

W przypadku wyboru tej ścieżki wdrożenia można również zachować starą wersję, pozostawiając opcję ewentualnego wycofania się w przyszłości. Można też ją usunąć. Innym wariantem jest wykorzystanie niebieskiego środowiska do wdrażania w przyszłości kolejnej wersji. W tym przypadku obszary zaznaczone na zielono będą pełniły rolę aktualnej wersji, a te niebieskie staną się nowym, testowanym i wdrażanym rozwiązaniem.

Podobnie jak w przypadku wzorca kroczącego unikamy przestojów w działaniu aplikacji. Natomiast w przypadku problemów i konieczności odtworzenia poprzedniej wersji, rolleback jest o wiele szybszy. Sprowadza się do czasu potrzebnego na przekierowanie ruchu z obszaru środowiska zielonego na niebieskie. Zastosowanie separacji środowiskowej ma jeszcze jedną korzyść – równoległe uruchomienie wdrożenia zielonego nie wpłynie na zasoby obsługujące środowisko niebieskie.

Wybór tego wariantu związany jest jednak z generowaniem większych kosztów operacyjnych, gdyż wymusza utrzymywanie zduplikowanych środowisk z identyczną infrastrukturą.

O ile pod względem czasu trwania przełączenie pomiędzy wersjami środowiska nie stanowi problemu, to konieczne jest spełnienie jednego dodatkowego warunku – upewnienia się, iż obie wersje mogą korzystać ze schematu bazy datastore oraz jej danych. W tym przypadku kompatybilność wsteczna jest niezbędna aby bezproblemowo przełączać się między wersjami.

Benefity wdrażania niebiesko-zielonego:

· brak przestojów,

· łatwe i szybkie przywracanie poprzedniej wersji – instant rollback.

· separacja środowisk.

Porównanie wzorców wdrażania

Wzorzec wdrażania Brak przestojów (zero downtime)Czas trwania rollbackuWpływ na hardware i koszty chmury
RecreatexSzybki, ale uciążliwyBrak dodatkowych wymagań
Rolling udpateWolnyMoże wymagać dodatkowej konfiguracji
Blue/greenBłyskawicznyKonieczność jednoczesnego utrzymania obu środowisk

Bezproblemowa aktualizacja aplikacji z partnerem Google Cloud

W drodze do zwiększenia wydajności aplikacji możesz napotkać szereg przeszkód, zaułków i dróg na skróty, które ostatecznie mogą wpłynąć na zwiększenie kosztów operacyjnych. Aby tego uniknąć warto skorzystać z profesjonalnej pomocy partnera Google Cloud, który przeprowadzić Cię przez cały proces aktualizacji. W FOTC posiadamy wiedzę i doświadczenie poparte licznymi certyfikatami, takimi jak m.in. Cloud Engineer czy Cloud Architect.

Chcesz zaktualizować aplikację w chmurze?

Skontaktuj się z nami – pomożemy Ci w wyborze najbardziej efektywnego rozwiązania

Pomożemy Ci zbudować i rozwinąć produkty w chmurze, efektywnie korzystając z zasobów Google Cloud i maksymalnie redukując koszty. Porozmawiamy o charakterystyce Twojej aplikacji i wybierzemy najbardziej optymalny wzorzec aktualizacji.

Idź do oryginalnego materiału