Odporność chmury Flashcards
Resilience - Odporność
Zdolność do obsługi niespodziewanych sytuacji:
• Bez zauważenia tej sytuacji przez użytkownika (najlepszy przypadek)
• Z łagodną degradacją usługi (najgorszy przypadek)
Zdolność systemu do łagodnego obsługiwania awarii i przywracania działania (recovery) po awariach
Znaczenie odporności chmury
W aplikacjach chmurowych - większe prawdopodobieństwo powstania usterek
• przejściowych
• bardziej trwałych usterek.
Gdyż aplikacje chmurowe • Są najemcami zasobów chmury (multi -tenant) • Korzystają z wspólnych usług • Rywalizują o zasoby i przepustowość, • Komunikują się przez Internet • Działają na rynkowym sprzęcie
Niezbędne jest szybkie wykrywanie awarii i
szybkiego przywracanie aplikacji do działania w celu utrzymania odporności
Azure - Resiliency Design Pattern
- Ponowienie (Retry) – Ponowienie operacji przy założeniu, że awaria jest przejściowa
- Bezpiecznik automatyczny (Circuit Breaker) –chwilowe wyłączenie operacji
- Kompensacja transakcji (Compensating Transaction)
- Wybór lidera (Leader Election)
- Dyspozytor – Agent – Nadzorca (Scheduler Agent Supervisor)
- Grodzie (Bulkhead)
- Queue-Based Load Leveling
Retry pattern – Ponowienie operacji przy
założeniu, że awaria jest przejściowa
• Obsługa chwilowych awarii podczas łączenia się z usługą lub zasobem sieciowym
-> ponowne wznowienie operacji w oczekiwaniu, że niepowodzenie jest przejściowe
• Ten wzorzec może poprawić stabilność aplikacji
• Wrażliwość na przejściowe awarie, np.:
- Chwilowa utrata połączenia sieciowego
- Czasowa niedostępność usługi
- Przeterminowanie (Timeouts), które pojawiają się, gdy usługa jest zajęta.
• Jeśli żądanie nie powiedzie się po uprzednio określonej liczbie prób
- Aplikacja powinna traktować awarię jako wyjątek i odpowiednio postępować
Retry Pattern - strategie
Cancel
• Błąd nie jest przejściowy lub jest mało prawdopodobne, aby powiodło się, to
• aplikacja powinna anulować operację i zgłosić wyjątek. Na przykład błąd uwierzytelniania
Retry.
• Błąd jest nietypowy lub rzadki, może to być spowodowane niezwykłymi okolicznościami
• Aplikacja może ponowić żądanie natychmiast, ponieważ niepowodzenie powtórzenia jest mało prawdopodobne
Retry with delay.
• Jeśli usterka spowodowana dużym obciążeniem, to sieć lub usługa może wymagać krótkiego okresu, w którym problemy z połączeniem są poprawione lub zaległości
• praca jest wyczyszczona. Aplikacja powinna odczekać
Resiliency Design Pattern
Wyłącznik automatyczny (Circuit Breaker) – chwilowe wyłączenie operacji
• Obsługa błędów może wymagać sporo czasu na poprawienie połączenia z usługą zdalną lub zasobem.
• Ten wzorzec może poprawić stabilność i odporność aplikacji.
Circuit Breaker
Wyłącznik automatyczny
Automatycznie uruchamiany przełącznik
elektryczny
• Przeznaczone do ochrony obwodu elektrycznego
• Od uszkodzeń przeciążeniowych
Jego podstawową funkcją jest przerwanie
przepływu prądu po wykryciu usterki przez przekaźniki zabezpieczające.
W przeciwieństwie do bezpiecznika, który działa raz, a następnie musi być wymieniony,
• Wyłącznik automatyczny może zostać zresetowany (ręcznie lub automatycznie), aby wznowić normalną pracę.
W chmurze możliwe są awarie operacji
spowodowane przejściowymi problemami, np.:
• Powolne połączenia sieciowe
• Limity czasu
• Zasoby są przepełnione lub czasowo niedostępne
Te usterki zazwyczaj poprawiają się po krótkim czasie
• Aplikacja akceptuje, że operacja nie powiodła się i odpowiednio obsługuje tą awarię
• Wzorzec ten umożliwia wykrycie, czy usterka została naprawiona
• Jeśli tak, aplikacja może próbować wywołać operację
Wzorzec Circut breaker różni się od wzorca Retry.
- Wzorzec retry umożliwia aplikacji ponowne działanie w oczekiwaniu, że odniesie sukces.
- Wzorzec Circuit Breaker zabrania aplikacji wykonywania operacji, które prawdopodobnie nie powiodą się
Maszyna stanu wyłącznika automatycznego
Stany
- Zamknięty (Closed)
- Otwarty (Open)
- Pół-otwarty (Half-Open)
Zamknięty (Closed)
- Żądanie z aplikacji jest przekierowywane do operacji.
- Pośrednik utrzymuje liczbę ostatnich niepowodzeń, a jeśli połączenie z operacją nie powiodło się, to serwer zwiększy tę liczbę.
- Jeśli liczba ostatnich awarii przekracza określoną wartość progową w danym przedziale czasowym, serwer proxy zostanie umieszczony w stanie otwartym.
- W tym momencie serwer proxy uruchamia timeout timer, a gdy ten timer wygasa, proxy zostanie umieszczone w stanie Half-Open.
Otwarty (Open)
• Żądanie od aplikacji natychmiast kończy się niepowodzeniem, do aplikacji zwracany jest wyjątek
Pół-otwarty (Half-Open)
• Ograniczona liczba żądań może zostać przekazana
• Jeśli te żądania zakończyły się sukcesem
- Przyjmuje się, że usterka powodująca awarię została naprawiona
- Wyłącznik zostanie przełączony w stan zamknięty (licznik awarii jest resetowany).
• Jeśli żądanie nie powiedzie się, wyłącznik zakłada, że błąd jest nadal obecny
- Powraca do stanu otwartego
- Uruchamia ponownie licznik czasu, aby dać systemowi dodatkowy okres czasu do odzyskania z awarii.
• Stan pół-otwarty jest przydatny, aby uniemożliwić nagły dostęp do usług z wieloma żądaniami
• W miarę odzyskiwania sprawności usługi, może ona obsługiwać ograniczoną liczbę żądań do czasu zakończenia odzyskiwania
pełnej sprawność
• W w czasie, gdy trwa naprawa, duża liczba żądań może spowodować, że usługa przestanie działać w zadanym czasie lub przestanie działać ponownie.
Kompensacja transakcji - Compensating Transaction
• Cofa pracę wykonaną przez szereg kroków, które razem definiują ostatecznie (eventually) spójną operację, jeśli jedna lub więcej operacji nie powiedzie się.
• Operacje, które podążają za ostatecznym modelem spójności, są powszechnie dostępne w aplikacjach obsługiwanych przez chmury, które
implementują skomplikowane procesy biznesowe i przepływy pracy
Kompensacja
- zrównoważenie określonego działania innym działaniem, które znosi lub wyrównuje początkowe działanie
- Umowa barterowa
- Umowa kompensacyjna
Umowa barterowa
• wymiana towarów i/lub usług na inne, równowartościowe towary i/lub usługi bez przekazania jakichkolwiek kwot pieniędzy
pomiędzy kupującym a sprzedającym.
Umowa kompensacyjna
• kontrakt, w ramach którego sprzedający zgadza się przyjąć część ceny towaru w pieniądzach, a pozostałość w towarach lub usługach
Transakcja w informatyce
• Zbiór operacji na bazie danych, które stanowią w istocie pewną całość i jako takie powinny być wykonane wszystkie lub żadna z nich.
• Zasady transakcji
- ACID (Atomicity, Consistency, Isolation, Durability
- Atomowość, Spójność, Izolacja, Trwałość).
• W systemach bazodanowych istotne jest, aby transakcja trwała jak najkrócej
- ponieważ równolegle może być dokonywanych wiele transakcji i część operacji musi zostać wykonana w pewnej kolejności.
Eventual consistency
Końcowa spójność
Ostateczna spójność jest cechą charakterystyczną rozproszonych systemów komputerowych, np.:
• Wartość konkretnego elementu danych,
- nie będzie aktualizowana natychmiast
- pozostanie bez aktualizacji przez pewien czas
Commit/rollback mechanism
• Commit - zatwierdzenie
• Rollback - cofnięcie
- technologia stosowana w bazach danych do przywracania struktury bazy danych do stanu sprzed określonego przedziału czasowego.
- przydatna w wypadkach np. uszkodzenia struktury bazy danych lub przypadkowego usunięcia istotnego znacznika.
- Działanie tej technologii polega na nadpisaniu zawartości danej bazy danych obrazem kopii zapasowej zapisanym na dysku twardym komputera, z którego jest przeprowadzana operacja rollbacku bazy danych.
Kompensacja transakcji
Compensating Transaction
• Każda transakcja może składać się z kilku pojedynczych operacji, jako całość, przenosi system pomiędzy spójnymi stanami.
• Dwie grupy systemów do stosują kompensację transakcji:
- W kontekście bazy danych często uzyskuje się to często przy użyciu transakcji i mechanizmu commit /
rollback
- W przypadku systemów bez mechanizmu zatwierdzania / wycofywania można „odkręcić” uszkodzoną transakcję poprzez kompensacje, która przywróci system do stanu początkowego.
Compensating Transaction Pattern
• Aplikacje w chmurze często modyfikują dane.
• Dane mogą być rozproszone w różnych lokalizacjach geograficznych.
• Aby uniknąć sporów (contention) i poprawić wydajność
- Aplikacja nie powinna zapewniać silnej spójności transakcji
- Aplikacja raczej powinna wdrożyć ostateczną spójność
• Działanie składa się z serii autonomicznych kroków
- Podczas wykonywania kroków ogólny widok stanu systemu może być niespójny
- Ale po zakończeniu operacji system powinien być spójny
Resiliency Design Pattern
Wybór lidera (Leader Election)
• Koordynuje działania wykonywane przez zbiór współpracujących instancji zadań w rozproszonych aplikacjach, wybierając jedną instancję jako lider, która przyjmuje odpowiedzialność za zarządzanie innymi instancjami.
• Ten wzorzec może pomóc w zadbaniu o to, aby zadania nie były ze sobą w konflikcie, powodowały sprzeciwu na udostępniane zasoby lub niechcący ingerować w pracę wykonywaną przez inne instancje zadań.
• W przypadku komputerów rozproszonych wybór liderów jest procesem wyznaczania pojedynczego procesu jako organizatora niektórych zadań rozproszonych między kilkoma komputerami (węzłami).
• Po uruchomieniu algorytmu wyboru liderów każdy węzeł całej sieci rozpoznaje konkretny, unikalny węzeł jako lider zadania.
• Typowa aplikacja w chmurze składa się z wielu zadań działających w sposób skoordynowany
- Zadania te wymagają dostępu do tych samych zasobów lub mogą współpracować równolegle z poszczególnymi częściami złożonych obliczeń.
- Instancje zadań mogą działać autonomicznie przez większość czasu, ale może okazać się konieczne także koordynowanie ich działań
• Należy wybrać pojedynczą instancję na lidera, a instancja ta powinna koordynować działania innych instancji zadań podrzędnych
Blob (ang. binary large object)
• typ danych, który umożliwia przechowywanie dużych ilości
danych binarnych jako pojedynczy obiekt w bazie danych,
• stosowany w szczególności do przechowywania danych multimedialnych, takich jak grafika, muzyka czy filmy.
Scheduler Agent Supervisor
Dyspozytor – Agent - Nadzorca
• Koordynuje zestaw działań w rozproszonym zestawie usług i innych odległych zasobach, próbuje przezwyciężać awarie, jeśli którekolwiek z tych działań się nie powiedzie, lub cofnąć efekty pracy, jeśli system nie może powstać (recover) z błędu.
• Ten wzorzec może zwiększyć odporność systemu rozproszonego, umożliwiając jej odzyskanie (recover) i ponawianie działań, które są spowodowane przejściowymi wyjątkami, długotrwałymi błędami i awariami procesu.
• Aplikacja wykonuje zadania składające się z kilku etapów, z których niektóre mogą wywoływać usługi zdalne lub uzyskać dostęp do zdalnych zasobów.
- Poszczególne kroki mogą być niezależne od siebie, ale są one skoordynowane z logiką aplikacji, która wykonuje zadanie.
• Harmonogram organizuje poszczególne
czynności, które obejmują ogólne zadanie, które ma być wykonywane i skoordynować ich działanie.
• Jeśli jest to możliwe, aplikacja powinna zapewnić, że zadanie zostanie ukończone i rozwiązane zostaną wszelkie błędy, które mogą wystąpić podczas uzyskiwania dostępu do zdalnych usług lub zasobów.
• Jeśli aplikacja wykryje bardziej trwały błąd, z którego nie można go łatwo odzyskać, musi być w stanie przywrócić system do stanu spójnego i zapewnić integralność całego procesu końcowego.
Resilience tactics - Isolation (izolacja)
• System nie może ulec awarii jako całość • Podziel system na części i dokonaj izolacji części względem siebie • Unikanie kaskadowych awarii • Wymaga implementacji szeregu środków
Resilience tactics
1. Isolation – Bulkheads (grodzie)
• Główny wzorzec izolacji
• Stosowany jako jednostki redundancji (jednostki skalowalności)
• Izoluj elementy aplikacji w pulach, aby w razie niepowodzenia pozostałe nadal działały.
• Kontekst
- Aplikacja oparta na chmurze może zawierać wiele usług, przy czym każda usługa ma jednego lub więcej klientów.
- Nadmierne obciążenie lub awaria usługi będą miały wpływ na wszystkich użytkowników usługi.
• Rozwiązanie
- Podział instancji usług na różne grupy w oparciu o wymagania dotyczące obciążenia i dostępności konsumenta. Ten projekt
• pomaga wyizolować awarie i pozwala utrzymać funkcjonalność usług dla niektórych konsumentów, nawet podczas awarii.
Resilience tactics
1. Isolation – Bulkheads (grodzie)
• Zalety
- Izoluje klientów i usługi od awarii kaskadowych. Problem może dotyczyć konsumenta lub usługi izolowany w obrębie własnej przegrody, zapobiegając awariom całego rozwiązania.
- Pozwala zachować pewne funkcje w przypadku awarii usługi. Inne usługi i funkcje aplikacja będzie nadal działać.
- Umożliwia wdrażanie usług, które oferują inną jakość usług do korzystania z aplikacji. Wysoki priorytet Konsumenci mogą być skonfigurowani do korzystania z usług o wysokim priorytecie.
Bulkheads (grodzie)
Stosowanie
- Izoluj zasoby używane do korzystania z zestawu usług zaplecza (back-end), zwłaszcza jeśli aplikacja może zapewnić pewien poziom funkcjonalności nawet wtedy, gdy jedna z usług nie odpowiada.
- Izoluj krytycznych konsumentów od standardowych konsumentów.
- Chroń aplikację przed kaskadowymi awariami.
Kontenery
• Zainteresowanie kontenerami doprowadziło do utworzenia Open Container Initiative (OCI) w celu zdefiniowania standardów środowiska
wykonawczego kontenerów i formatów graficznych.
• Złożona architektura zajmująca się wieloma hostami i kontenerami działającymi w środowisku produkcyjnym wymaga zestawu narzędzi do zarządzania, najbardziej popularne
- Docker Datacenter
- Kubernetes
- Mesosphere DC / OS
Docker
- Docker zapewnia kontener do zarządzania obciążeniami oprogramowania w ramach współużytkowanej infrastruktury, przy jednoczesnym zachowaniu ich odizolowania od siebie.
- Maszyny wirtualne, takie jak KVM, wykonują podobną pracę, tworząc kompletny stos systemu operacyjnego wszystkich urządzeń systemu operacyjnego (za pośrednictwem hiperwizora).
Kubernetes
• System typu open source do zarządzania
kontenerowymi aplikacjami na wielu hostach, zapewniający podstawowe mechanizmy wdrażania, konserwacji i skalowania aplikacji.
• Pierwotnie zaprojektowany przez Google.
• Projekt open source jest hostowany przez Cloud Native Computing Foundation (CNCF).