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

Azure Container Apps
.NET
Azure SQL Database
Azure Cosmos DB
Azure Cache for Redis

W tym artykule opisano rozwiązanie do uruchamiania systemu zarządzania zamówieniami z 10 mikrousług w usłudze Azure Container Apps. Rozwiązanie korzysta również z najlepszych rozwiązań dotyczących mikrousług za pośrednictwem języka Dapr i skalowania opartego na zdarzeniach za pomocą usługi KEDA.

Dapr i Traefik są znakami towarowymi swoich firm. Użycie tych znaków nie jest dorozumiane.

Architektura

Diagram przedstawiający system zarządzania zamówieniami z mikrousługami w usłudze Container Apps.

Pobierz plik programu PowerPoint tej architektury.

Przepływ danych

To rozwiązanie używa szablonów Bicep do wykonania wdrożenia systemu zarządzania zamówieniami Reddog i jego pomocniczej infrastruktury platformy Azure. Architektura składa się z jednego środowiska usługi Azure Container Apps, które hostuje 10 aplikacji mikrousług platformy .NET Core. Użyjesz zestawu .NET Core Dapr SDK do integracji z zasobami platformy Azure za pośrednictwem bloków konstrukcyjnych publikowania-subskrypcji (pub/sub) i stanu i powiązania. Chociaż język Dapr zwykle zapewnia elastyczność podczas implementowania składników, to rozwiązanie jest oparte na opinii. Usługi korzystają również z reguł skalowania KEDA, aby umożliwić skalowanie na podstawie wyzwalaczy zdarzeń i skalowanie do zera scenariuszy.

Na poniższej liście opisano każdą mikrousługę i konfigurację usługi Azure Container Apps, za pomocą których jest wdrażana. Aby wyświetlić kod, zobacz repozytorium reddog-code w witrynie GitHub.

  1. Traefik: podstawowy serwer proxy routingu żądań użytkowników z interfejsu użytkownika do usług księgowych i Makeline dla interaktywnego pulpitu nawigacyjnego.

  2. Interfejs użytkownika: pulpit nawigacyjny przedstawiający zamówienie w czasie rzeczywistym i zagregowane dane sprzedaży dla systemu zarządzania zamówieniami Reddog.

  3. Wirtualny klient: program symulacji klienta, który symuluje klientom składanie zamówień za pośrednictwem usługi zamówienia.

  4. Usługa zamówień: interfejs API CRUD do składania zamówień i zarządzania nimi.

  5. Usługa księgowości: usługa, która przetwarza, przechowuje i agreguje dane zamówień. Przekształca zamówienia klientów w znaczące metryki sprzedaży, które są prezentowane przez interfejs użytkownika.

  6. Usługa paragonów: program archiwalny, który generuje i przechowuje potwierdzenia zamówień na potrzeby inspekcji i celów historycznych.

  7. Usługa lojalnościowa: usługa, która zarządza programem lojalnościowym, śledząc punkty nagród klientów na podstawie wydatków na zamówienie.

  8. Usługa makeline: usługa odpowiedzialna za zarządzanie kolejką bieżących zamówień oczekujących na realizację. Śledzi przetwarzanie i uzupełnianie zamówień przez usługę wirtualnego procesu roboczego.

  9. Wirtualny proces roboczy: program symulacji procesu roboczego, który symuluje ukończenie zamówień klientów.

  10. Program inicjujący (nie pokazano): usługa, która używa programu Entity Framework Core do inicjowania tabel w usłudze Azure SQL Database do użycia z usługą ewidencjonowania aktywności.

Usługa Ruch przychodzący Składniki języka Dapr Reguły skalowania KEDA
Traefik Zewnętrzne Nie włączono języka Dapr HTTP
INTERFEJS UŻYTKOWNIKA Wewnętrzny Nie włączono języka Dapr HTTP
Klient wirtualny Brak Wywołanie usługi do usługi Nie dotyczy
Zamawianie usługi Wewnętrzny Pub/sub: Azure Service Bus HTTP
Usługa ewidencjonowania aktywności Wewnętrzny Pub/sub: Azure Service Bus Długość tematu usługi Azure Service Bus, HTTP
Usługa paragonów Wewnętrzny Pub/sub: Azure Service Bus
Powiązanie: Azure Blob
Długość tematu usługi Azure Service Bus
Usługa lojalnościowa Wewnętrzny Pub/sub: Azure Service Bus
Stan: Azure Cosmos DB
Długość tematu usługi Azure Service Bus
Usługa makeline Wewnętrzny Pub/sub: Azure Service Bus
Stan: Azure Redis
Długość tematu usługi Azure Service Bus, HTTP
Wirtualny proces roboczy Brak Wywołanie usługi do usługi
Powiązanie: Cron
Brak

Uwaga

Możesz również wykonać program inicjerowy w aplikacji kontenera. Jednak ta usługa jest uruchamiana raz, aby wykonać tworzenie bazy danych, a następnie skalowana do zera po utworzeniu niezbędnych obiektów w usłudze Azure SQL Database.

Składniki

To rozwiązanie korzysta z następujących składników:

  • Grupy zasobów platformy Azure to logiczne kontenery dla zasobów platformy Azure. Pojedyncza grupa zasobów służy do tworzenia struktury wszystkich elementów związanych z tym rozwiązaniem w witrynie Azure Portal.
  • Azure Container Apps to w pełni zarządzana bezserwerowa usługa kontenera używana do tworzenia i wdrażania nowoczesnych aplikacji na dużą skalę. W tym rozwiązaniu hostujesz wszystkie 10 mikrousług w usłudze Azure Container Apps i wdrażasz je w jednym środowisku aplikacji kontenera. To środowisko działa jako bezpieczna granica systemu.
  • Usługa Azure Service Bus to w pełni zarządzany broker komunikatów przedsiębiorstwa wraz z kolejkami i tematami publikowania-subskrybowania. W tym rozwiązaniu użyj go do implementacji składnika pub/podrzędnego dapr. Ten składnik jest używany przez wiele usług. Usługa zamówienia publikuje komunikaty w autobusie, a usługi Makeline, księgowość, lojalność i paragony subskrybują te wiadomości.
  • Azure Cosmos DB to usługa bazy danych NoSQL, wielomodelowa zarządzana baza danych. Użyj go jako składnika magazynu stanów Dapr dla usługi lojalnościowej do przechowywania danych lojalnościowych klienta.
  • Usługa Azure Cache for Redis to rozproszona, skalowalna pamięć podręczna Redis Cache zarządzana w pamięci. Jest on używany jako składnik magazynu stanów Dapr dla usługi Makeline do przechowywania danych w przetwarzanych zamówieniach.
  • Azure SQL Database to inteligentna, skalowalna, relacyjna usługa bazy danych utworzona dla chmury. Utwórz ją dla usługi księgowej, która używa programu Entity Framework Core do interfejsu z bazą danych. Usługa bootstrapper jest odpowiedzialna za skonfigurowanie tabel SQL w bazie danych, a następnie jest uruchamiana raz przed nawiązaniem połączenia z usługą księgowości.
  • Usługa Azure Blob Storage przechowuje ogromne ilości danych bez struktury, takich jak pliki tekstowe lub binarne. Usługa paragonów używa usługi Blob Storage za pośrednictwem powiązania wyjściowego języka Dapr do przechowywania paragonów zamówień.
  • Traefik to wiodący nowoczesny zwrotny serwer proxy i moduł równoważenia obciążenia, który ułatwia wdrażanie mikrousług. W tym rozwiązaniu użyj funkcji konfiguracji dynamicznej Traefik do wykonywania routingu opartego na ścieżkach z interfejsu użytkownika, który jest Vue.js jednostronicowej aplikacji (SPA). Ta konfiguracja umożliwia również bezpośrednie wywołania interfejsu API do usług zaplecza na potrzeby testowania.
  • Usługa Azure Monitor umożliwia zbieranie, analizowanie i wykonywanie działań na temat danych zawartości klienta ze środowisk infrastruktury platformy Azure. Użyjesz go z usługą Application Insights , aby wyświetlić dzienniki kontenerów i zbierać metryki z mikrousług.

Alternatywy

W tej architekturze wdrożysz serwer proxy Traefik, aby włączyć routing oparty na ścieżkach dla interfejsu API Vue.js. Istnieje wiele alternatywnych serwerów proxy typu open source, których można używać w tym celu. Dwa inne popularne projekty to NGINX i HAProxy.

Cała infrastruktura platformy Azure, z wyjątkiem usługi Azure SQL Database, używa składników dapr do współdziałania. Jedną z zalet języka Dapr jest możliwość zamiany wszystkich tych składników przez zmianę konfiguracji wdrożenia aplikacji kontenera. W tym przypadku usługi Azure Service Bus, Azure Cosmos DB, Cache for Redis i Blob Storage zostały wybrane do zaprezentowania niektórych dostępnych składników języka Dapr w wersji 70+. Lista alternatywnych brokerów pub/sub, magazynów stanów i powiązań wyjściowych znajduje się w dokumentacji języka Dapr.

Szczegóły scenariusza

Mikrousługi to coraz bardziej popularny styl architektury, który może mieć wiele korzyści, w tym wysoką skalowalność, krótsze cykle programowania i zwiększoną prostotę. Kontenery można używać jako mechanizmu do wdrażania aplikacji mikrousług, a następnie używać orkiestratora kontenerów, takiego jak Kubernetes, aby uprościć operacje. Istnieje wiele czynników, które należy wziąć pod uwagę w przypadku architektur mikrousług na dużą skalę. Zazwyczaj platforma infrastruktury wymaga znaczącego zrozumienia złożonych technologii, takich jak orkiestratory kontenerów.

Azure Container Apps to w pełni zarządzana bezserwerowa usługa kontenera do uruchamiania nowoczesnych aplikacji na dużą skalę. Umożliwia wdrażanie konteneryzowanych aplikacji za pomocą abstrakcji podstawowej platformy. W ten sposób nie trzeba zarządzać skomplikowaną infrastrukturą. Usługa Azure Container Apps jest obsługiwana przez technologie open source.

Ta architektura korzysta z integracji usługi Azure Container Apps z zarządzaną wersją środowiska uruchomieniowego aplikacji rozproszonej (Dapr). Dapr to projekt typu open source, który pomaga deweloperom sprostać nieodłącznym wyzwaniom związanym z aplikacjami rozproszonym, takimi jak zarządzanie stanem i wywoływanie usług.

Usługa Azure Container Apps udostępnia również zarządzaną wersję automatycznego skalowania opartego na zdarzeniach (KEDA) platformy Kubernetes. Usługa KEDA umożliwia automatyczne skalowanie kontenerów na podstawie zdarzeń przychodzących z usług zewnętrznych, takich jak Azure Service Bus i Azure Cache for Redis.

Możesz również włączyć ruch przychodzący HTTPS w usłudze Azure Container Apps bez tworzenia większej liczby zasobów sieciowych platformy Azure. Możesz użyć serwera proxy usługi Envoy, który umożliwia również scenariusze podziału ruchu.

Aby dowiedzieć się, jak usługa Azure Container Apps porównuje się z innymi platformami hostingu kontenerów na platformie Azure, zobacz Porównanie aplikacji kontenera z innymi opcjami kontenera platformy Azure.

W tym artykule opisano rozwiązanie do uruchamiania systemu zarządzania zamówieniami z 10 mikrousług w usłudze Azure Container Apps. Rozwiązanie korzysta również z najlepszych rozwiązań dotyczących mikrousług za pośrednictwem języka Dapr i skalowania opartego na zdarzeniach za pomocą usługi KEDA.

Potencjalne przypadki użycia

To rozwiązanie dotyczy każdej organizacji, która używa bezstanowych i stanowych mikrousług dla systemów rozproszonych. Rozwiązanie jest najlepsze dla konsumentów pakowanych towarów i przemysłu produkcyjnego, które mają system zamawiania i realizacji.

Te inne rozwiązania mają podobne projekty:

  • Architektura mikrousług w usłudze Azure Kubernetes Service (AKS)
  • Architektura mikrousług w usłudze Azure Functions
  • Architektury sterowane zdarzeniami

Kwestie wymagające rozważenia

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

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 Azure Container Apps działa na platformie Kubernetes w tle. Mechanizmy odporności są wbudowane w platformę Kubernetes, która monitoruje i uruchamia ponownie kontenery lub zasobniki, jeśli występują problemy. Mechanizmy odporności łączą się z wbudowanym modułem równoważenia obciążenia w celu uruchamiania wielu replik każdej aplikacji kontenera. Dzięki tej nadmiarowości rozwiązanie może tolerować niedostępność wystąpienia.

Usługi Azure Monitor i Application Insights można używać do monitorowania usługi Azure Container Apps. Dzienniki kontenerów można wyświetlić, przechodząc w portalu do okienka Dzienniki w każdej aplikacji kontenera, a następnie uruchamiając następujące zapytanie Kusto. W tym przykładzie przedstawiono dzienniki aplikacji usługi Makeline.

ContainerAppConsoleLogs_CL |
    where ContainerAppName_s contains "make-line-service" |
    project TimeGenerated, _timestamp_d, ContainerGroupName_s, Log_s |
    order by _timestamp_d asc

Mapa aplikacji w usłudze Application Insights pokazuje również, jak usługi komunikują się w czasie rzeczywistym. Następnie można ich używać do debugowania scenariuszy. Przejdź do mapy aplikacji w obszarze zasobu usługi Application Insights, aby wyświetlić coś podobnego do poniższego.

Zrzut ekranu przedstawiający mapę aplikacji w usłudze Application Insights.

Aby uzyskać więcej informacji na temat monitorowania usługi Azure Container Apps, zobacz Monitorowanie aplikacji w usłudze Azure Container Apps.

Optymalizacja kosztów

Zoptymalizuj koszty, przeglądając sposoby zmniejszenia niepotrzebnych wydatków i poprawy wydajności operacyjnej. Aby uzyskać więcej informacji, zobacz Omówienie filaru optymalizacji kosztów.

Skorzystaj z kalkulatora cen platformy Azure, aby oszacować koszt usług w tej architekturze.

Efektywność wydajności

Wydajność to możliwość skalowania obciążenia w celu spełnienia wymagań, które należy umieścić w nim w wydajny sposób. Aby uzyskać więcej informacji, zobacz Omówienie filaru wydajności.

To rozwiązanie opiera się w dużej mierze na implementacji KEDA w usłudze Azure Container Apps na potrzeby skalowania opartego na zdarzeniach. Podczas wdrażania wirtualnej obsługi klienta będzie ona stale składać zamówienia, co powoduje skalowanie usługi zamówień w górę za pośrednictwem narzędzia skalowania KEDA HTTP. Gdy usługa zamówienia publikuje zamówienia w magistrali usług, skalowanie KEDA magistrali usług powoduje, że księgowość, paragon, makeline i usługi lojalnościowe są skalowane w górę. Aplikacje kontenerów interfejsu użytkownika i traefik konfigurują również moduły skalowania HTTP KEDA, aby aplikacje skalowały się w miarę uzyskiwania dostępu do pulpitu nawigacyjnego przez większej liczby użytkowników.

Gdy wirtualny klient nie jest uruchomiony, wszystkie mikrousługi w tym rozwiązaniu są skalowane do zera, z wyjątkiem wirtualnych procesów roboczych i usług Makeline. Wirtualny proces roboczy nie jest skalowany w dół, ponieważ stale sprawdza realizację zamówienia. Aby uzyskać więcej informacji na temat skalowania w aplikacjach kontenerów, zobacz Ustawianie reguł skalowania w usłudze Azure Container Apps. Aby uzyskać więcej informacji na temat narzędzia KEDA Scalers, przeczytaj dokumentację KEDA dotyczącą skalowania.

Wdrażanie tego scenariusza

Aby uzyskać instrukcje dotyczące wdrażania, zobacz Pokaz red dog: Wdrażanie aplikacji kontenera platformy Azure w witrynie GitHub.

Pokaz red dog: integracja mikrousług to spakowany szablon aplikacji, który opiera się na poprzednich zasobach kodu w celu zademonstrowania integracji usług Azure Container Apps, App Service, Functions i API Management oraz aprowizowania infrastruktury, wdraża kod przy użyciu funkcji GitHub Actions.

Współautorzy

Ten artykuł jest obsługiwany przez firmę Microsoft. Pierwotnie został napisany przez następujących współautorów.

Główny autor:

Inni współautorzy:

Aby wyświetlić niepubalne profile serwisu LinkedIn, zaloguj się do serwisu LinkedIn.

Następne kroki