Projektuj oprogramowanie dla środowiska cloud native
Połącz powtarzalną infrastrukturę, wymienialne procesy, trwały stan i obserwowalne działanie. Oceń cloud native szerzej niż samo pakowanie w kontenery.
Wydawca TaigaJak piszemy
Czego się nauczysz
- Odróżniaj pakowanie w kontenery od zachowania cloud native.
- Wskaż ryzyka stanu, ponawiania i wymiany procesu w wygenerowanej usłudze.
- Określ kontrakt platformy możliwy do sprawdzenia przez ludzi i agentów.
Określ potrzebne zachowanie
Praktyki cloud native wspierają powtarzalne wytwarzanie i eksploatację w środowiskach publicznych, prywatnych i hybrydowych. CNCF podkreśla systemy, które podczas zmian pozostają zarządzalne, obserwowalne i odporne. Kontenery i orkiestracja mogą wspierać to podejście. Same nie zapewniają wszystkich tych cech.
Zacznij od fikcyjnej usługi raportowej. Narzędzie AI tworzy endpoint, workera i obraz kontenera. Demonstracja daje poprawny PDF. Przed produkcją zespół musi odpowiedzieć na inne pytanie: co nastąpi, gdy platforma zastąpi workera w trakcie zadania?
To pytanie dotyczy projektu aplikacji oraz infrastruktury. Restart może przywrócić proces, a jednocześnie utracić jego niedokończoną pracę.
Oddziel proces od trwałego stanu
Prototyp przechowuje kolejkę zadań i gotowe raporty na dysku kontenera. Wymiana kontenera może usunąć oba. Dodanie workerów może też dawać różne odpowiedzi zależnie od tego, który obsługuje żądanie.
Poprawiony projekt używa trwałego magazynu zadań i zatwierdzonego magazynu obiektowego. Żądanie zapisuje tożsamość zadania. Worker przejmuje zadanie, tworzy wynik i zapisuje jego lokalizację. Kontrole dostępu nadal obowiązują przy pobieraniu raportu.
| Obszar | Pytanie dla usługi raportowej |
|---|---|
| Stan | Które rekordy muszą przetrwać wymianę procesu? |
| Konfiguracja | Jak ten sam artefakt działa w każdym środowisku? |
| Tożsamość | Która tożsamość usługi może odczytać zadanie i zapisać wynik? |
| Stan działania | Czy worker może przyjąć pracę i ją ukończyć? |
| Wyłączanie | Co dzieje się z przejętym zadaniem po zatrzymaniu workera? |
| Wydajność | Który limit wystąpi pierwszy: workerów, bazy, magazynu czy innej usługi? |
Przechowuj sekrety poza obrazem. Dostarczaj je przez zatwierdzony system sekretów. Zapisz, które zmiany konfiguracji wymagają nowego wydania lub restartu procesu.
Zaprojektuj ponowienia przed dodaniem workerów
Załóżmy, że worker zapisuje PDF, a potem zatrzymuje się przed potwierdzeniem zadania. Kolejka dostarcza zadanie ponownie. Druga próba nie może obciążyć klienta drugi raz ani wysłać sprzecznych powiadomień o zakończeniu.
Gdzie to właściwe, użyj operacji idempotentnej. Powtórzenie tego samego logicznego żądania powinno zachować zamierzony skutek. Zdefiniuj stałą tożsamość żądania, trwale zapisz wynik i sprawdź zachowanie w każdym punkcie awarii. AWS opisuje tę technikę w przewodniku bezpiecznych ponowień.
Ponowienia także wymagają granic. Użyj limitu czasu, limitu prób i opóźnienia zapobiegającego jednoczesnym powtórzeniom żądań. Zachowuj nieudane zadania do sprawdzenia zamiast ponawiać je bez końca.
Ułatw przegląd stanu docelowego
Konfiguracja deklaratywna określa zamierzone wdrożenie. Kontroler dąży do utrzymania tego stanu. Na przykład Kubernetes Deployment zarządza replikami aplikacji i kontrolowanymi aktualizacjami. Aplikacja nadal musi poprawnie obsługiwać wymianę procesu.
Wersjonuj konfigurację infrastruktury i aplikacji. Przeglądaj zmiany w zwykłym procesie dostarczania. Obserwuj rzeczywiste ukończenie zadań, wiek kolejki, błędy i ograniczenia zależności. Działający proces nadal może nie być zdolny do utworzenia raportu.
Wybierz platformę, którą zespół potrafi utrzymywać
Cloud native nie wymaga zamiany każdej aplikacji w mikroserwisy. Modułowa aplikacja na zarządzanym runtime może spełnić wymagania. Więcej usług oznacza więcej interfejsów, decyzji wdrożeniowych i pracy operacyjnej.
Przekaż agentowi rzeczywisty kontrakt platformy: wspierany runtime, metodę tożsamości, usługi danych, zasady wdrażania i wymagane dowody. Oprócz udanych żądań testuj przerwanie i wymianę procesu. Przejdź do dostępności i granic awarii.
Wykonaj ćwiczenie
Fikcyjna usługa raportowa przechowuje zadania i gotowe pliki na dysku kontenera. Narysuj przepływ przez żądanie, zadanie, plik i pobranie. Zaznacz trwały stan. Określ, co się stanie, gdy worker zatrzyma się po zapisaniu pliku, ale przed potwierdzeniem zadania.
Pobierz arkusz (Markdown)Sprawdź zrozumienie
Źródła i dalsza lektura
- CNCF: Cloud Native Definition v1.1 ↗
- Kubernetes: Deployments ↗
- AWS Builders’ Library: Making retries safe with idempotent APIs ↗
Powiązana lektura od Taiga
Odznaczenie tej opcji usuwa wszystkie postępy zapisane w tej przeglądarce.
Postępy pozostają w tej przeglądarce. Bez konta i śledzenia.