Omówienie zarządzania stanami na platformie Kubernetes
Mówiąc ogólnie o aplikacjach, często można usłyszeć o stanie aplikacji . W tej lekcji zapoznamy się z definicją stanu i różnymi typami stanów, aby lepiej przygotować aplikację do ich obsługi.
Stan
Stan aplikacji to wszystko, co jest przechowywane w pamięci przez czas działania aplikacji. Stan może obejmować różne elementy, ale skupiamy się głównie na danych użytkownika.
Aby nadać przykład stanu aplikacji, wyobraź sobie, że masz otwarty odtwarzacz muzyczny. Ta aplikacja ma stan. Wie, kim jesteś, co chcesz usłyszeć, i jaka muzyka została pobrana. Wszystkie te informacje są częścią stanu aplikacji.
Stan w pamięci to informacje, których aplikacja nie musi szukać nigdzie indziej. Stan dysku zawiera informacje, których aplikacja nie ma, więc musi pobrać je z innego źródła danych.
Typy stanów
Istnieją dwa typy stanów aplikacji. Pierwszym typem jest stan efemeryczny, który nie jest trwały i zniknie natychmiast po zamknięciu aplikacji.
Kontenery mają stan efemeryczny. Wszystkie przechowywane w nich dane zostaną natychmiast utracone po usunięciu kontenera. Niektóre aplikacje mogą pracować z tym samodzielnie, ponieważ mogą ponownie wygenerować stan z innych źródeł i stan nie musi być przechowywany lokalnie. Te aplikacje są nazywane aplikacjami stateless.
Cały pozostały stan, który nie jest efemeryczny, jest nazywany stan trwały. Stan trwały nadal istnieje po cyklu życia kontenera. Większość używanych technologii kontenerowych ma koncepcję wolumenu, czyli lokalizacji na dysku, w której przechowywany jest stan. Nawet jeśli usuniesz kontener i włączysz go ponownie, stan pozostanie przechowywany w bezpiecznej lokalizacji i może być używany ponownie.
Aplikacje, które wymagają stanu zewnętrznego do odzyskania, nazywane są aplikacjami stateful.
Stany i platforma Kubernetes
Platforma Kubernetes może obsługiwać zarówno aplikacje bezstanowe, jak i stanowe. Aplikacje bezstanowe są łatwiejsze, ponieważ możemy skupić się tylko na samej aplikacji, a nie na jej stanie (gdyż ten nie istnieje).
W przypadku większości aplikacji bezstanowych proste wdrożenie z użyciem kontenera wystarczy, aby uzyskać całkowicie funkcjonalny system i w pełni wykorzystać możliwości klastra.
Obsługa aplikacji stanowych jest czymś odwrotnym. W takich przypadkach należy wziąć pod uwagę aplikację i jej stan, miejsce przechowywania stanu oraz sposób bezpiecznego i niezawodnego przechowywania stanu.
Dlatego Kubernetes ma również koncepcję PersistentVolumes (PVs) i PersistentVolumeClaims (PVCs).
Napiwek
W tym module nie omawia się dalej pojęć związanych z przechowywaniem, ale możesz zapoznać się z zasobami usługi Azure Kubernetes Service w podsumowaniu, aby dowiedzieć się więcej.
PersistentVolumes
to dyski przydzielone do węzłów do przechowywania stanów z kontenera poda. Ponieważ platforma Kubernetes jest najlepsza w przypadku aplikacji rozproszonych, wszystkie utworzone woluminy znajdują się w puli dostępnych woluminów. Następnie kontenery zajmują to miejsce dla siebie. Za pomocą PersistentVolumeClaims
można powiązać PersistentVolume
z zasobnikiem i użyć jej miejsca do przechowywania potrzebnych danych.
Wszyscy dostawcy baz danych to aplikacje stanowe. Jeśli wdrażasz dostawcę bazy danych w klastrze, potrzebujesz PV i PVC do przechowywania danych bazy danych w bezpiecznym miejscu oraz aby umożliwić dostawcy odzyskiwanie tych danych, nawet jeśli jego kontenery zostały usunięte.
Najlepsze rozwiązania dotyczące obsługi stanu
Stan jest obecny w większości aplikacji. Jednak najlepszą praktyką dotyczącą obsługi stanu jest w ogóle się nim nie zajmować.
Każda wydajna aplikacja zostanie zaprojektowana w celu zapewnienia wysokiej dostępności i skalowalności. Stan idzie w przeciwnym kierunku. Pomimo opcji oferowanych przez dostawców magazynu i łatwość wdrażania i używania, stan nie jest łatwo skalowany. Nie jest też wysoce dostępny.
Stan wysokiej dostępności
Aby zapewnić wysoką dostępność, aplikacja musi być w trybie online przez cały czas. Odbywa się to za pośrednictwem replikacji strefy i regionu. Platforma Kubernetes uwzględnia strefy w większości obciążeń. Oznacza to, że można mieć kilka wystąpień aplikacji, które są wdrażane w różnych strefach. Dyski nie są jednak świadome stref.
Podczas wdrażania nowego obiektu PersistentVolume
na platformie Kubernetes jest on powiązany z dyskiem w węźle. Ten dysk jest również powiązany z określoną strefą w określonym regionie. Korzystanie z replikacji strefy lub regionu ze stałymi woluminami (PV) jest złożone i wymaga dużego nakładu pracy, zarówno przy replikacji, jak i synchronizacji danych.
Stan wysoce skalowalny
Aby zapewnić wysoką skalowalność, aplikacja powinna zwiększyć swoją przepływność wraz z liczbą użytkowników, którzy są z nią połączeni. Jest to skomplikowane w zarządzaniu stanem, ponieważ każdy stan zewnętrzny jest zasadniczo dyskiem, a dysk ma ograniczoną szybkość wejścia i wyjścia. Zarządzanie przepływnością pomaga rozwiązać ten problem.
Rozwiązania baz danych przedstawiły pomysł ReplicaSets, poprzez który cała baza danych jest replikowana do wielu wystąpień. Replikacja zwiększa liczbę dysków i, co wpływa na operacje wejścia/wyjścia w odniesieniu do stanu.
W każdej zmianie bazy danych należy zsynchronizować stan, aby wszystkie dyski zawierały te same dane. Ta synchronizacja jest również złożona.
Eksternalizacja stanu
Platforma Azure ma rozwiązania typu "platforma jako usługa" (PaaS), takie jak Azure Cosmos DB, które są wysoce dostępne i skalowalne i rozwiązuje większość problemów z zarządzaniem stanem.
Przechowywanie stanu zewnętrznego i usuwanie konieczności konserwacji może pomóc skupić się na aplikacji i zmniejszyć nakład pracy związany z integralnością danych w infrastrukturze.