Wdrażanie mikrousług za pomocą usługi Azure Container Apps

Azure Container Apps
Azure Cosmos DB
Azure Service Bus

W tym przykładowym scenariuszu przedstawiono przykład istniejącego obciążenia, które zostało pierwotnie zaprojektowane do uruchamiania na platformie Kubernetes, może zamiast tego działać w usłudze Azure Container Apps. Usługa Azure Container Apps jest odpowiednia dla obciążeń brownfield, w których zespoły chcą uprościć złożoną infrastrukturę i aranżację kontenerów. Przykładowe obciążenie uruchamia konteneryzowaną aplikację mikrousług.

W tym przykładzie obciążenie używane w architekturze mikrousług w usłudze Azure Kubernetes Service i ponowne hostowanie go w usłudze Azure Container Apps jako platformy aplikacji.

Napiwek

Logo usługi GitHubArchitektura jest wspierana przez przykładową implementację, która ilustruje niektóre wybory projektowe opisane w tym artykule.

Architektura

Diagram przedstawiający mikrousługi wdrożone za pomocą usługi Azure Container Apps.

Pobierz plik programu Visio z tą architekturą.

W tym scenariuszu obrazy kontenerów są pozyskiwane z usługi Azure Container Registry i wdrażane w środowisku usługi Container Apps.

Usługi współużytkowania tego samego środowiska korzystają z następujących korzyści:

  • Wewnętrzny ruch przychodzący i odnajdywanie usługi
  • Pojedynczy obszar roboczy usługi Log Analytics na potrzeby rejestrowania środowiska uruchomieniowego
  • Bezpieczne zarządzanie wpisami tajnymi i certyfikatami

Aplikacja kontenera usługi przepływu pracy działa w trybie pojedynczej poprawki. Aplikacja kontenera uruchomiona w trybie pojedynczej poprawki ma jedną poprawkę, wspieraną przez repliki zero-wielu. Replika składa się z kontenera aplikacji i wszystkich wymaganych kontenerów przyczepki. W tym przykładzie nie jest używane kontenery przyczepki, dlatego każda replika aplikacji kontenera reprezentuje pojedynczy kontener. Ponieważ w tym przykładzie nie stosuje się skalowania, tylko jedna replika jest uruchamiana dla każdej aplikacji kontenera.

Przepływ pracy używa hybrydowego podejścia do zarządzania wpisami tajnymi. Tożsamości zarządzane są używane w usługach, w których taka implementacja nie wymaga żadnych zmian w kodzie. Usługi Drone Scheduler i Delivery używają tożsamości zarządzanych przypisanych przez użytkownika do uwierzytelniania w usłudze Azure Key Vault w celu uzyskania dostępu do przechowywanych tam wpisów tajnych. Pozostałe usługi przechowują wpisy tajne za pośrednictwem usługi Container Apps na poziomie aplikacji.

Diagram przedstawiający architekturę środowiska uruchomieniowego dla rozwiązania.

Ten diagram ilustruje architekturę środowiska uruchomieniowego dla rozwiązania.

Pobierz plik programu Visio z tą architekturą.

Przepływ danych

  1. Usługa pozyskiwania: odbiera żądania klientów, buforuje je i wysyła za pośrednictwem usługi Azure Service Bus do usługi przepływu pracy.
  2. Usługa przepływu pracy: używa komunikatów z usługi Azure Service Bus i wysyła je do bazowych usług.
  3. Usługa pakietu: zarządza pakietami.
  4. Usługa harmonogramu dronów: planuje drony i monitoruje drony w locie.
  5. Usługa dostarczania: zarządza dostawami zaplanowanymi lub przesyłanymi.

Składniki

Usługa dostarczania dronów korzysta z serii usług platformy Azure nawzajem.

Azure Container Apps

Usługa Azure Container Apps jest podstawowym składnikiem.

Te funkcje zastępują wiele złożoności poprzedniej architektury usługi AKS:

  • Wbudowane odnajdywanie usług
  • W pełni zarządzane punkty końcowe HTTP i HTTP/2
  • Zintegrowane równoważenie obciążenia
  • Rejestrowanie i monitorowanie
  • Skalowanie automatyczne na podstawie ruchu HTTP lub zdarzeń obsługiwanych przez usługę KEDA (skalowanie automatyczne oparte na platformie Kubernetes)
  • Uaktualnienia aplikacji i przechowywanie wersji

Magazyn zewnętrzny i inne składniki

Usługa Azure Key Vault do bezpiecznego przechowywania i uzyskiwania dostępu do wpisów tajnych, takich jak klucze interfejsu API, hasła i certyfikaty.

Usługa Azure Container Registry przechowuje prywatne obrazy kontenerów. Możesz również użyć innych rejestrów kontenerów, takich jak Docker Hub.

Usługa Azure Cosmos DB przechowuje dane przy użyciu usługi Azure Cosmos DB typu open source dla bazy danych MongoDB. Mikrousługi są zwykle bezstanowe i zapisują swój stan w zewnętrznych magazynach danych. Azure Cosmos DB to baza danych NoSQL z interfejsami API typu open source dla baz danych MongoDB i Cassandra.

Usługa Azure Service Bus oferuje niezawodną obsługę komunikatów w chmurze jako usługę i prostą integrację hybrydową. Usługa Service Bus obsługuje asynchroniczne wzorce obsługi komunikatów, które są wspólne dla aplikacji mikrousług.

Usługa Azure Cache for Redis dodaje warstwę buforowania do architektury aplikacji, aby zwiększyć szybkość i wydajność dużych obciążeń.

Usługa Azure Monitor zbiera i przechowuje metryki i dzienniki z aplikacji. Te dane służą do monitorowania aplikacji, konfigurowania alertów i pulpitów nawigacyjnych oraz analizowania głównych przyczyn awarii. W tym scenariuszu jest używany obszar roboczy usługi Log Analytics do kompleksowego monitorowania infrastruktury i aplikacji.

Usługa Application Insights zapewnia rozszerzone zarządzanie wydajnością aplikacji (APM) i monitorowanie usług. Każda usługa jest instrumentowana za pomocą zestawu SDK usługi Application Insights w celu monitorowania aplikacji i kierowania danych do usługi Azure Monitor.

Szablony Bicep do konfigurowania i wdrażania aplikacji.

Alternatywy

Alternatywnym scenariuszem tego przykładu jest aplikacja Fabrikam Drone Delivery korzystająca z platformy Kubernetes, która jest dostępna w usłudze GitHub w repozytorium Azure Kubernetes Service (AKS) Fabrikam Drone Delivery .

Szczegóły scenariusza

Twoja firma może uprościć wdrażanie kontenerów mikrousług i zarządzanie nimi przy użyciu usługi Azure Container Apps. Usługa Container Apps udostępnia w pełni zarządzane środowisko bezserwerowe do tworzenia i wdrażania nowoczesnych aplikacji.

Firma Fabrikam, Inc. (fikcyjna firma) implementuje aplikację dostarczania dronów, w której użytkownicy żądają drona do odbioru towarów do dostawy. Gdy klient planuje pobranie, system wewnętrznej bazy danych przypisuje drona i powiadamia użytkownika o szacowanym czasie dostawy.

Aplikacja mikrousług została wdrożona w klastrze usługi Azure Kubernetes Service (AKS). Jednak zespół firmy Fabrikam nie korzystał z zaawansowanych ani specyficznych dla platformy funkcji usługi AKS. Ostatecznie zmigrowali aplikację do usługi Azure Container Apps bez większych obciążeń. Przenoszenie rozwiązania do usługi Azure Container Apps umożliwiło firmie Fabrikam:

  • Przeprowadź migrację aplikacji niemal tak, jak to jest: podczas przenoszenia aplikacji z usługi AKS do usługi Azure Container Apps wymagane były bardzo minimalne zmiany kodu.
  • Wdrażanie infrastruktury i obciążenia przy użyciu szablonów Bicep: do wdrożenia kontenerów aplikacji nie są potrzebne manifesty YAML platformy Kubernetes.
  • Uwidacznianie aplikacji za pośrednictwem zarządzanego ruchu przychodzącego: wbudowana obsługa ruchu przychodzącego opartego na protokole https w celu uwidocznienia usługi pozyskiwania danych usunęła konieczność skonfigurowania własnego ruchu przychodzącego.
  • Ściąganie obrazów kontenerów z usługi ACR (Azure Container Registry): usługa Azure Container Apps nie wymaga określonego obrazu podstawowego ani rejestru.
  • Zarządzanie cyklem życia aplikacji: funkcja poprawek obsługuje uruchamianie wielu poprawek określonej aplikacji kontenera i dzielenie ruchu między nimi na potrzeby testowania A/B lub scenariuszy wdrażania Blue/Green.
  • Użyj tożsamości zarządzanej: zespół firmy Fabrikam mógł użyć tożsamości zarządzanej do uwierzytelniania za pomocą usługi Azure Key Vault i usługi Azure Container Registry.

Potencjalne przypadki użycia

  • Wdróż aplikację opartą na mikrousługach brownfield w ramach platformy jako usługi (PaaS), aby uprościć zarządzanie i uniknąć złożoności uruchamiania orkiestratora kontenerów.
  • Zoptymalizuj operacje i zarządzanie, migrując konteneryzowane usługi do platformy obsługującej natywną skalę do zera.
  • Wykonaj długotrwały proces w tle, taki jak usługa przepływu pracy w trybie pojedynczej poprawki.

Inne typowe zastosowania usługi Container Apps to:

  • Uruchamianie konteneryzowanych obciążeń na platformie bezserwerowej opartej na użyciu.
  • Automatyczne skalowanie aplikacji na podstawie ruchu HTTP/HTTPS i/lub wyzwalaczy sterowanych zdarzeniami obsługiwanych przez usługę KEDA
  • Minimalizacja nakładu pracy związanego z konserwacją dla konteneryzowanych aplikacji
  • Wdrażanie punktów końcowych interfejsu API
  • Hostowanie aplikacji do przetwarzania w tle
  • Obsługa przetwarzania sterowanego zdarzeniami

Kwestie wymagające rozważenia

Te zagadnienia implementują filary struktury Azure Well-Architected Framework, która jest zestawem wytycznych, które mogą służyć do poprawy jakości obciążenia. Aby uzyskać więcej informacji, zobacz Microsoft Azure Well-Architected Framework.

Dostępność

Usługa Container Apps umożliwia łatwiejsze wdrażanie i monitorowanie aplikacji oraz zarządzanie nimi oraz zarządzanie nimi. Dostępność można zapewnić za pomocą następujących kluczowych funkcji:

  • Poprawki ułatwiają wdrażanie aktualizacji aplikacji z zerowym przestojem. Za pomocą poprawek można zarządzać wdrażaniem aktualizacji aplikacji i dzielić ruch między poprawkami w celu obsługi wdrożeń niebieskich/zielonych i testowania A/B (obecnie nieużywanego w tym przykładowym obciążeniu).
  • Dzięki kompleksowym funkcjom obserwacji usługi Container Apps masz całościowy widok uruchomionych aplikacji. Usługa Container Apps jest zintegrowana z usługami Azure Monitor i Log Analytics, co umożliwia śledzenie wykonywania aplikacji kontenera i ustawianie alertów na podstawie metryk i zdarzeń.
  • Gdy aplikacja nieoczekiwanie zakończy działanie, usługa Container Apps automatycznie uruchomi ją ponownie.
  • Reguły skalowania automatycznego można włączyć, aby zaspokoić zapotrzebowanie w miarę wzrostu ruchu i obciążeń.
  • Funkcje dynamicznego równoważenia obciążenia usługi Container Apps optymalizują wydajność (chociaż nie są one używane w tym przykładowym obciążeniu).

Doskonałość operacyjna

Doskonałość operacyjna obejmuje procesy operacyjne, które wdrażają aplikację i działają w środowisku produkcyjnym. Aby uzyskać więcej informacji, zobacz Omówienie filaru doskonałości operacyjnej.

Aby osiągnąć doskonałość operacyjną, usługa Container Apps oferuje następujące funkcje:

  • Integracja funkcji GitHub Actions na potrzeby konfigurowania zautomatyzowanych wdrożeń ciągłej integracji/ciągłego wdrażania.
  • Tryb wielu poprawek z podziałem ruchu na potrzeby testowania zmian w kodzie aplikacji i regułach skalowania.
  • Integracja z usługami Azure Monitor i Log Analytics w celu zapewnienia wglądu w konteneryzowaną aplikację.

Efektywność wydajności

Efektywność wydajności to możliwość skalowania obciążenia w celu zaspokojenia zapotrzebowania użytkowników w wydajny sposób. Aby uzyskać więcej informacji, zobacz Omówienie filaru wydajności.

Zagadnienia dotyczące wydajności w tym rozwiązaniu:

  • Obciążenie jest dystrybuowane między wiele aplikacji mikrousług.
  • Każda mikrousługa jest niezależna, nie udostępnia niczego innym mikrousługom, dzięki czemu można je niezależnie skalować.
  • Skalowanie automatyczne można włączyć w miarę zwiększania obciążenia.
  • Żądania są dynamicznie równoważenia obciążenia.
  • Metryki, w tym wykorzystanie procesora CPU i pamięci, informacje o przepustowości i wykorzystanie magazynu, są dostępne za pośrednictwem usługi Azure Monitor.
  • Usługa Log Analytics zapewnia agregację dzienników w celu zbierania informacji w każdym środowisku usługi Container Apps.

Niezawodność

Niezawodność zapewnia, że aplikacja może spełnić zobowiązania podjęte przez klientów. Aby uzyskać więcej informacji, zobacz Omówienie filaru niezawodności.

Usługa Container Apps podejmie próbę ponownego uruchomienia kontenerów zakończonych niepowodzeniem i odejdzie od użytkowników sprzętu. Firma Microsoft obsługuje błędy przejściowe i zapewnia wysoką dostępność zasobów obliczeniowych.

Monitorowanie wydajności za pomocą usługi Log Analytics i usługi Azure Monitor umożliwia ocenę aplikacji pod obciążeniem. Metryki i informacje rejestrowania zawierają dane potrzebne do rozpoznawania trendów w celu zapobiegania awariom i przeprowadzania analizy głównych przyczyn awarii w momencie ich wystąpienia.

Zabezpieczenia

Zabezpieczenia zapewniają ochronę przed celowymi atakami i nadużyciami cennych danych i systemów. Aby uzyskać więcej informacji, zobacz Omówienie filaru zabezpieczeń.

Wpisy tajne

  • Aplikacja kontenera może przechowywać i pobierać poufne wartości jako wpisy tajne. Po zdefiniowaniu wpisu tajnego dla aplikacji kontenera będzie ona dostępna do użycia przez aplikację i wszystkie skojarzone reguły skalowania. Jeśli używasz trybu wielowersyjnego, wszystkie poprawki współdzielą te same wpisy tajne. Ponieważ wpisy tajne są uznawane za zmianę zakresu aplikacji, jeśli zmienisz wartość wpisu tajnego, nowa poprawka nie zostanie utworzona. Jednak w przypadku wszystkich uruchomionych poprawek w celu załadowania nowej wartości wpisu tajnego należy je ponownie uruchomić. W tym scenariuszu są używane wartości zmiennych aplikacji i zmiennych środowiskowych.
  • Zmienne środowiskowe: poufne wartości można bezpiecznie przechowywać na poziomie aplikacji. Gdy zmienne środowiskowe zostaną zmienione, aplikacja kontenera zduplikuje nową poprawkę.

Bezpieczeństwo sieci

  • Ruch przychodzący: aby ograniczyć dostęp zewnętrzny, tylko usługa pozyskiwania jest skonfigurowana dla ruchu przychodzącego zewnętrznego. Usługi zaplecza są dostępne tylko za pośrednictwem wewnętrznej sieci wirtualnej w środowisku Container Apps. Uwidaczniaj usługi tylko w Internecie, jeśli jest to wymagane. Ponieważ ta architektura korzysta z wbudowanej funkcji zewnętrznego ruchu przychodzącego, to rozwiązanie nie oferuje możliwości całkowitego umieszczania punktu przychodzącego za zaporą aplikacji internetowej (WAF) ani dołączania go do planów usługi DDoS Protection. Wszystkie obciążenia internetowe powinny być frontowane za pomocą zapory aplikacji internetowej.
  • Sieć wirtualna: podczas tworzenia środowiska można podać niestandardową sieć wirtualną; w przeciwnym razie sieć wirtualna jest automatycznie generowana i zarządzana przez firmę Microsoft. Nie można manipulować tą siecią wirtualną zarządzaną przez firmę Microsoft, na przykład dodając sieciowe grupy zabezpieczeń lub wymuszając tunelowanie ruchu do zapory ruchu wychodzącego. W tym przykładzie użyto automatycznie wygenerowanej sieci wirtualnej.

Aby uzyskać więcej opcji topologii sieci, zobacz Architektura sieci w usłudze Azure Container Apps.

Tożsamości obciążeń

  • Usługa Container Apps obsługuje tożsamości zarządzane firmy Microsoft Entra, dzięki czemu aplikacja może uwierzytelniać się w innych zasobach chronionych przez identyfikator Entra firmy Microsoft, takich jak Usługa Azure Key Vault, bez zarządzania poświadczeniami w aplikacji kontenera. Aplikacja kontenera może używać przypisanego przez system, przypisanego przez użytkownika lub obu typów tożsamości zarządzanych. W przypadku usług, które nie obsługują uwierzytelniania usługi AD, należy przechowywać wpisy tajne w usłudze Azure Key Vault i używać tożsamości zarządzanej do uzyskiwania dostępu do wpisów tajnych.
  • Użyj tożsamości zarządzanych na potrzeby dostępu do usługi Azure Container Registry. Usługa Azure Container Apps umożliwia użycie innej tożsamości zarządzanej dla obciążenia niż w przypadku dostępu do rejestru kontenerów. Takie podejście jest zalecane w celu uzyskania szczegółowej kontroli dostępu nad tożsamościami zarządzanymi.

Optymalizacja kosztów

  • Usługa Azure Container Apps ma model cen oparty na użyciu.
  • Usługa Azure Container Apps obsługuje skalowanie do zera. Gdy aplikacja kontenera jest skalowana do zera, nie są naliczane opłaty.
  • W tym scenariuszu usługi Azure Cosmos DB i Azure Cache for Redis są głównymi sterownikami kosztów.

Wdrażanie tego scenariusza

Wykonaj kroki opisane w README.md w przykładowym repozytorium scenariuszy usługi Azure Container Apps.

Współautorzy

Firma Microsoft utrzymuje ten artykuł. Pierwotnie został napisany przez następujących współautorów.

Główny autor:

Następne kroki