Dlaczego Kubernetes to przerost formy nad treścią w większości aplikacji Azure (i czym go zastąpić)
By Mirko Peters ·
Dowiedz się, dlaczego Kubernetes jest często przerostem formy nad treścią w aplikacjach Azure. Poznaj prostsze alternatywy PaaS i twórz odporne, opłacalne systemy chmurowe.
Automatically translated with AI from the original post. Read the English original
![Cover: Building Azure That Survives the Real World — with Mike Martin [MVP]](https://d3wo5wojvuv7l.cloudfront.net/t_rss_itunes_square_1400/images.spreaker.com/original/a907cccbe53d60b24bd2317acc40f151.jpg)
Projektując architekturę chmurową, wiele zespołów od razu sięga po Kubernetes i złożone mikrousługi, zakładając, że nowoczesne systemy cloud-native wymagają orkiestracji kontenerów. Tymczasem wciskanie każdej aplikacji do Kubernetesa wprowadza zbędne obciążenie operacyjne i dodatkowe punkty awarii. Wybór prostszych natywnych usług Azure często daje znacznie bardziej odporne, łatwiejsze w utrzymaniu i opłacalne systemy produkcyjne.
Najważniejsze wnioski
- Cloud-native nie oznacza automatycznie kontenerów ani Kubernetesa.
- Przesadne komplikowanie prostych rozwiązań wprowadza kruche zależności i większe obciążenie operacyjne.
- Rozpoczynanie od wymagań biznesowych, a nie od preferencji technicznych, zapobiega rozrostowi architektury.
- Azure oferuje solidne, zarządzane usługi platformy, które obsługują skalowanie i odporność bez obciążenia infrastrukturą.
- Prawdziwa odporność wymaga asynchronicznego projektowania i wzorca circuit breaker, a nie tylko większej ilości zasobów obliczeniowych.
Pułapka domyślnego wyboru Kubernetesa we współczesnej architekturze
Od lat branża programistyczna ulega zbiorowej chęci naśladowania gigantów technologicznych. Gdy zespoły zaczynają projektować nową aplikację w Microsoft Azure, pojawia się znany schemat: ktoś proponuje kontenery, ktoś inny upiera się przy Kubernetesie i nagle prosте narzędzie wewnętrzne owija się w charty Helm, kontrolery ingress i service mesh. Zjawisko to często wynika z chęci stworzenia imponującego diagramu architektury zamiast praktycznego rozwiązania biznesowego.
Azure Kubernetes Service (AKS) jest znakomitą platformą dla obciążeń, które rzeczywiście wymagają rozproszonej orkiestracji kontenerów, jednak stosowanie jej uniwersalnie prowadzi do tego, co architekci nazywają systemami Frankensteina. Zespoły spędzają więcej czasu na zarządzaniu infrastrukturą, debugowaniu zasad sieciowych i aktualizacjach klastrów niż na dostarczaniu wartości biznesowej. Podstawową prawdą architektury chmurowej jest to, że w dłuższej perspektywie prostota zawsze wygrywa.
Ocena alternatywnych usług obliczeniowych Azure przed wyborem AKS
Zanim wybierzesz platformę obliczeniową, architekci muszą cofnąć się i ocenić rzeczywiste wymagania obciążenia. Czy aplikacja jest wewnętrzna, czy zewnętrzna? Ilu użytkowników będzie z niej korzystać? Czy musi skalować się globalnie, czy działa osiem godzin dziennie i nocą pozostaje bezczynna? Odpowiedzi na te podstawowe pytania naturalnie wskażą właściwą usługę Azure.
Azure App Service i Azure Functions
W przypadku wielu aplikacji webowych, interfejsów API i procesów działających w tle w pełni zarządzane usługi, takie jak Azure App Service lub Azure Functions, całkowicie eliminują obciążenie związane z zarządzaniem klastrem. Azure App Service zapewnia skalowalność klasy korporacyjnej, sloty wdrożeniowe i wbudowaną obsługę certyfikatów SSL, bez konieczności pisania choćby jednego manifestu Kubernetes. Podobnie zdarzeniowe obciążenia świetnie pasują do Azure Functions, które mogą skalować się do zera, gdy są nieaktywne, i błyskawicznie obsługiwać nagłe skoki ruchu bez udostępniania bezczynnej infrastruktury.
Korzystając z tych natywnych usług PaaS (Platform-as-a-Service), organizacje przerzucają na Microsoft ciężar takich zadań jak aktualizowanie systemu operacyjnego, utrzymanie środowisk uruchomieniowych czy podstawowe zasady skalowania. Dzięki temu zespoły inżynierskie mogą skupić się wyłącznie na logice aplikacji i wzorcach odporności.
Projektowanie pod rzeczywistą odporność zamiast obsesji na punkcie czasu bezawaryjnej pracy
Kolejną częstą pułapką w architekturze chmurowej jest obsesja na punkcie 100-procentowej dostępności. W praktyce całkowite zero przestojów jest rzadko osiągalne i prawie zawsze nieuzasadnione finansowo. Naprawdę odporna architektura zakłada, że komponenty będą ulegać awariom, sieci będą gubić pakiety, a zewnętrzne zależności będą od czasu do czasu znikać.
Odporność uzyskuje się dzięki przemyślanym wzorcom architektonicznym, a nie przez samą nadmiarowość infrastruktury. Wdrożenie komunikacji asynchronicznej za pomocą usług Azure Service Bus lub Event Hubs sprawia, że chwilowe spowolnienie bazy danych po stronie backendu nie przekształca się w pełną awarię frontendu. Gdy systemy są luźno powiązane, nagłe skoki ruchu – na przykład przed corocznym terminem składania zeznań podatkowych – mogą być łagodnie buforowane w kolejkach, dzięki czemu backend przetwarza zadania we własnym, zrównoważonym tempie.
Podsumowanie
Budowa architektury chmurowej, która przetrwa w prawdziwym świecie, wymaga zmiany myślenia: odejścia od rozwoju napędzanego CV (resume-driven development) na rzecz pragmatycznej inżynierii. Koncentrując się na wymaganiach biznesowych, stosując wzorce asynchroniczne i wybierając najprostszą usługę Azure, która wykona zadanie, zespoły mogą uniknąć pułapki przeinżynierowania. Aby zgłębić te koncepcje i poznać opinie ekspertów na temat unikania pułapek architektonicznych, posłuchaj pełnego odcinka i dowiedz się, jak projektować systemy przygotowane na realia produkcyjne.
Często zadawane pytania
Czy architektura cloud-native wymaga Kubernetes?
Nie. Cloud-native oznacza po prostu, że aplikacja jest zaprojektowana tak, aby wykorzystywać skalowalność, elastyczność i zarządzane możliwości platformy chmurowej. W pełni cloud-native rozwiązania można zbudować, korzystając z usług PaaS platformy Azure, takich jak App Service, Azure SQL czy Azure Functions, bez wdrażania ani jednego kontenera.
Kiedy zespół powinien wybrać Azure Kubernetes Service zamiast App Service?
AKS sprawdza się najlepiej, gdy masz złożone mikrousługi wymagające niestandardowych środowisk uruchomieniowych kontenerów, zaawansowanej konfiguracji sieci lub przenośności między wieloma dostawcami chmury. W przypadku standardowych aplikacji webowych i API usługa App Service jest niemal zawsze prostsza i szybsza w zarządzaniu.
W jaki sposób wzorce projektowe asynchroniczne poprawiają odporność aplikacji chmurowych?
Wzorce asynchroniczne wykorzystują kolejki i brokery zdarzeń, aby oddzielić frontendy od backendów. Jeśli usługa backendowa doświadcza dużych opóźnień lub całkowicie zawodzi, frontend może nadal przyjmować żądania użytkowników i umieszczać pracę w kolejce, zapobiegając całkowitej awarii systemu.
Dlaczego 100-procentowa dostępność jest nierealistycznym celem architektonicznym?
Nowoczesne aplikacje opierają się na złożonych łańcuchach zależności, obejmujących dostawców tożsamości, bazy danych, API i infrastrukturę sieciową. Ponieważ każdy komponent ma własne SLA, ich połączenie matematycznie ogranicza łączną dostępność systemu, przez co solidne plany odzyskiwania po awarii są cenniejsze niż gwarancje zerowych przestojów.