Rekomendacje dotyczące hostowania platformy Azure dla aplikacji internetowych platformy ASP.NET Core

Napiwek

Ta zawartość jest fragmentem książki eBook, architekta nowoczesnych aplikacji internetowych z platformą ASP.NET Core i platformą Azure, dostępnym na platformie .NET Docs lub jako bezpłatny plik PDF do pobrania, który można odczytać w trybie offline.

Architect Modern Web Applications with ASP.NET Core and Azure eBook cover thumbnail.

"Liderzy biznesowi wszędzie pomijają działy IT, aby pobierać aplikacje z chmury (znanej również jako SaaS) i płacić za nie tak, jakby mieli subskrypcję magazynu. A gdy usługa nie jest już wymagana, mogą anulować subskrypcję bez sprzętu pozostawionego w rogu.
- Daryl Plummer, analityk Gartner

Niezależnie od potrzeb i architektury aplikacji, platforma Microsoft Azure może ją obsługiwać. Twoje potrzeby hostingu mogą być tak proste, jak statyczna witryna internetowa lub zaawansowana aplikacja składa się z kilkudziesięciu usług. W przypadku ASP.NET Core monolitycznych aplikacji internetowych i usług pomocniczych istnieje kilka dobrze znanych konfiguracji, które są zalecane. Zalecenia dotyczące tego artykułu są pogrupowane na podstawie rodzaju zasobu, który ma być hostowany, niezależnie od tego, czy pełne aplikacje, poszczególne procesy, czy dane.

Aplikacje sieci Web

Aplikacje internetowe mogą być hostowane za pomocą:

  • App Service Web Apps

  • Kontenery (kilka opcji)

  • Virtual Machines

Z nich usługa App Service Web Apps jest zalecaną metodą dla większości scenariuszy, w tym prostych aplikacji opartych na kontenerach. W przypadku architektur mikrousług należy wziąć pod uwagę podejście oparte na kontenerach. Jeśli potrzebujesz większej kontroli nad maszynami z uruchomioną aplikacją, rozważ użycie usługi Azure Virtual Machines.

App Service Web Apps

Usługa App Service Web Apps oferuje w pełni zarządzaną platformę zoptymalizowaną pod kątem hostowania aplikacji internetowych. Jest to oferta typu platforma jako usługa (PaaS), która umożliwia skoncentrowanie się na logice biznesowej, podczas gdy platforma Azure zajmuje się infrastrukturą potrzebną do uruchamiania i skalowania aplikacji. Niektóre kluczowe funkcje usługi App Service Web Apps:

  • Optymalizacja metodyki DevOps (ciągła integracja i dostarczanie, wiele środowisk, testowanie A/B, obsługa skryptów).

  • Globalna skala i wysoka dostępność.

  • Połączenie do platform SaaS i danych lokalnych.

  • Zabezpieczenia i zgodność.

  • Integracja z programem Visual Studio.

Usługa Azure App Service to najlepszy wybór w przypadku większości aplikacji internetowych. Wdrażanie i zarządzanie są zintegrowane z platformą, witryny można szybko skalować na potrzeby obsługi dużych obciążeń generowanych przez ruch sieciowy, a wbudowane równoważenie obciążenia i usługa Traffic Manager zapewniają wysoką dostępność. Istniejące witryny można łatwo przenieść do usługi aplikacja systemu Azure Za pomocą narzędzia do migracji online. Możesz użyć aplikacji typu open source z galerii aplikacji internetowych lub utworzyć nową witrynę przy użyciu wybranej struktury i narzędzi. Zadania WebJob upraszczają dodawanie przetwarzania zadań w tle do aplikacji internetowej usługi App Service. Jeśli masz istniejącą aplikację ASP.NET hostowaną lokalnie przy użyciu lokalnej bazy danych, istnieje wyraźna ścieżka do migracji. Możesz użyć aplikacji internetowej usługi App Service z usługą Azure SQL Database (lub zabezpieczyć dostęp do lokalnego serwera bazy danych, jeśli jest to preferowane).

Recommended migration strategy for on-premises .NET apps to Azure App Service

W większości przypadków przejście z lokalnie hostowanej aplikacji ASP.NET do aplikacji internetowej usługi App Service jest prostym procesem. Niewielka lub żadna modyfikacja nie powinna być wymagana dla samej aplikacji i może szybko zacząć korzystać z wielu funkcji oferowanych przez usługę Aplikacja systemu Azure Service Web Apps.

Oprócz aplikacji, które nie są zoptymalizowane pod kątem chmury, aplikacja systemu Azure Service Web Apps to doskonałe rozwiązanie dla wielu prostych aplikacji monolitycznych (nieprostrybucyjnych), takich jak wiele aplikacji ASP.NET Core. W tym podejściu architektura jest podstawowa i prosta do zrozumienia i zarządzania:

Basic Azure architecture

Niewielka liczba zasobów w jednej grupie zasobów jest zwykle wystarczająca do zarządzania taką aplikacją. Aplikacje, które są zwykle wdrażane jako pojedyncza jednostka, a nie te aplikacje, które składają się z wielu oddzielnych procesów, są dobrymi kandydatami do tego podstawowego podejścia architektonicznego. Chociaż architektura jest prosta, to podejście nadal umożliwia hostowanej aplikacji skalowanie w górę (więcej zasobów na węzeł) i w poziomie (więcej hostowanych węzłów) w celu spełnienia wszelkich wzrostów zapotrzebowania. Dzięki automatycznemu skalowaniu można skonfigurować aplikację tak, aby automatycznie dostosowywać liczbę węzłów hostowania aplikacji na podstawie zapotrzebowania i średniego obciążenia między węzłami.

App Service Web Apps for Containers

Oprócz obsługi hostowania aplikacji internetowych bezpośrednio usługa App Service Web Apps for Containers może służyć do uruchamiania konteneryzowanych aplikacji w systemach Windows i Linux. Korzystając z tej usługi, można łatwo wdrażać i uruchamiać konteneryzowane aplikacje, które można skalować za pomocą swojej firmy. Aplikacje mają wszystkie funkcje usługi App Service Web Apps wymienione powyżej. Ponadto usługa Web Apps for Containers obsługuje usprawnione ciągłe wdrażanie/ciągłe wdrażanie za pomocą usługi Docker Hub, Azure Container Registry i GitHub. Za pomocą usługi Azure DevOps można definiować potoki kompilacji i wdrażania, które publikują zmiany w rejestrze. Te zmiany można następnie testować w środowisku przejściowym i automatycznie wdrażać w środowisku produkcyjnym przy użyciu miejsc wdrożenia, co pozwala na uaktualnienia bez przestojów. Wycofywanie z poprzednich wersji można wykonać tak samo łatwo.

Istnieje kilka scenariuszy, w których usługa Web Apps for Containers ma najwięcej sensu. Jeśli masz istniejące aplikacje, które można konteneryzować, zarówno w kontenerach systemu Windows, jak i Linux, możesz je łatwo hostować przy użyciu tego zestawu narzędzi. Wystarczy opublikować kontener, a następnie skonfigurować usługę Web Apps for Containers, aby pobrać najnowszą wersję tego obrazu z wybranego rejestru. Jest to "lift and shift" podejście do migracji z klasycznych modeli hostingu aplikacji do modelu zoptymalizowanego pod kątem chmury.

Migrate containerized on-premises .NET application to Azure Web Apps for Containers

Takie podejście działa również dobrze, jeśli zespół programistyczny może przejść do procesu programowania opartego na kontenerach. "Wewnętrzna pętla" tworzenia aplikacji z kontenerami obejmuje tworzenie aplikacji z kontenerami. Zmiany wprowadzone w kodzie, a także konfiguracja kontenera są wypychane do kontroli źródła, a automatyczna kompilacja jest odpowiedzialna za publikowanie nowych obrazów kontenerów w rejestrze, takich jak Docker Hub lub Azure Container Registry. Te obrazy są następnie używane jako podstawa dodatkowego programowania, a także dla wdrożeń w środowisku produkcyjnym, jak pokazano na poniższym diagramie:

End to End Docker DevOps Lifecycle Workflow

Programowanie za pomocą kontenerów oferuje wiele zalet, zwłaszcza gdy kontenery są używane w środowisku produkcyjnym. Ta sama konfiguracja kontenera jest używana do hostowania aplikacji w każdym środowisku, w którym działa, z lokalnej maszyny dewelopera do kompilowania i testowania systemów po środowisko produkcyjne. Takie podejście znacznie zmniejsza prawdopodobieństwo wystąpienia wad wynikających z różnic w konfiguracji maszyny lub wersjach oprogramowania. Deweloperzy mogą również używać dowolnych narzędzi, z którymi najbardziej wydajnie korzystają, w tym systemu operacyjnego, ponieważ kontenery mogą działać w dowolnym systemie operacyjnym. W niektórych przypadkach aplikacje rozproszone obejmujące wiele kontenerów mogą być bardzo intensywnie uruchamiane na jednej maszynie programistycznej. W tym scenariuszu warto przeprowadzić uaktualnienie do korzystania z usług Kubernetes i Azure Dev Spaces, które opisano w następnej sekcji.

W miarę jak fragmenty większych aplikacji są podzielone na własne mniejsze, niezależne mikrousługi, dodatkowe wzorce projektowe mogą służyć do poprawy zachowania aplikacji. Zamiast pracować bezpośrednio z poszczególnymi usługami, brama interfejsu API może uprościć dostęp i rozdzielić klienta z zaplecza. Posiadanie oddzielnych zapleczy usług dla różnych frontonów umożliwia również rozwijanie usług w porozumieniu ze swoimi konsumentami. Dostęp do typowych usług można uzyskać za pośrednictwem oddzielnego kontenera przyczepki, który może obejmować typowe biblioteki łączności klienta przy użyciu wzorca ambasadora.

Microservices sample architecture with several common design patterns noted.

Dowiedz się więcej o wzorcach projektowych, które należy wziąć pod uwagę podczas tworzenia systemów opartych na mikrousługach.

Azure Kubernetes Service

Usługa Azure Kubernetes Service (AKS) zarządza hostowanym środowiskiem Kubernetes, dzięki czemu można szybko i łatwo wdrażać konteneryzowane aplikacje i zarządzać nimi bez specjalistycznej wiedzy z zakresu aranżacji kontenerów. Eliminuje również obciążenie bieżących operacji i konserwacji przez aprowizowanie, uaktualnianie i skalowanie zasobów na żądanie bez konieczności przełączenia aplikacji w tryb offline.

Usługa AKS zmniejsza złożoność i nakłady operacyjne związane z zarządzaniem klastrem Kubernetes, przenosząc znaczną część tej odpowiedzialności na platformę Azure. Jako hostowana usługa Kubernetes, platforma Azure obsługuje krytyczne zadania, takie jak monitorowanie kondycji i konserwacja. Ponadto płacisz tylko za węzły agenta w klastrach, a nie za wzorce. Jako zarządzana usługa Kubernetes, usługa AKS zapewnia:

  • Automatyczne uaktualnienia wersji i stosowanie poprawek na platformie Kubernetes.
  • Łatwe skalowanie klastra.
  • Samonaprawiania hostowanej płaszczyzny sterowania (wzorce).
  • Oszczędności kosztów — płacisz tylko za uruchomione węzły puli agentów.

Dzięki temu, że platforma Azure obsługuje zarządzanie węzłami w klastrze AKS, nie musisz już ręcznie wykonywać wielu zadań, takich jak uaktualnianie klastra. Ponieważ platforma Azure obsługuje te krytyczne zadania konserwacji, usługa AKS nie zapewnia bezpośredniego dostępu (takiego jak protokół SSH) do klastra.

Zespoły korzystające z usługi AKS mogą również korzystać z usługi Azure Dev Spaces. Usługa Azure Dev Spaces pomaga zespołom skupić się na tworzeniu i szybkim iteracji aplikacji mikrousług, umożliwiając zespołom bezpośrednie pracę z całą architekturą mikrousług lub aplikacją działającą w usłudze AKS. Usługa Azure Dev Spaces umożliwia również niezależne aktualizowanie części architektury mikrousług w izolacji bez wpływu na pozostałą część klastra usługi AKS lub innych deweloperów.

Azure Dev Spaces workflow example

Azure Dev Spaces:

  • Minimalizuj czas instalacji komputera lokalnego i wymagania dotyczące zasobów
  • Zezwalaj zespołom na szybsze iterowanie
  • Zmniejszenie liczby środowisk integracji wymaganych przez zespół
  • Usuwanie konieczności pozorowania niektórych usług w systemie rozproszonym podczas opracowywania/testowania

Dowiedz się więcej o usłudze Azure Dev Spaces

Azure Virtual Machines

Jeśli masz istniejącą aplikację, która wymagałaby istotnych modyfikacji do uruchomienia w usłudze App Service, możesz wybrać pozycję Maszyny wirtualne, aby uprościć migrację do chmury. Jednak prawidłowe konfigurowanie, zabezpieczanie i konserwowanie maszyn wirtualnych wymaga znacznie więcej czasu i wiedzy it w porównaniu z usługą aplikacja systemu Azure Service. Jeśli rozważasz usługę Azure Virtual Machines, upewnij się, że uwzględnisz trwające prace konserwacyjne wymagane do stosowania poprawek, aktualizacji i zarządzania środowiskiem maszyny wirtualnej. Usługa Azure Virtual Machines to infrastruktura jako usługa (IaaS), a usługa App Service to PaaS. Należy również rozważyć, czy wdrożenie aplikacji jako kontenera systemu Windows w usłudze Web App for Containers może być opłacalną opcją dla danego scenariusza.

Procesy logiczne

Poszczególne procesy logiczne, które mogą być oddzielone od reszty aplikacji, mogą być wdrażane niezależnie w usłudze Azure Functions w sposób "bezserwerowy". Usługa Azure Functions pozwala po prostu napisać potrzebny kod dla danego problemu bez martwienia się o aplikację lub infrastrukturę, aby ją uruchomić. Możesz wybrać spośród różnych języków programowania, w tym C#, F#, Node.js, Python i PHP, co pozwala wybrać najbardziej produktywny język zadania. Podobnie jak w przypadku większości rozwiązań opartych na chmurze, płacisz tylko za czas użycia i możesz ufać usłudze Azure Functions w celu skalowania w górę zgodnie z potrzebami.

Data

Platforma Azure oferuje szeroką gamę opcji magazynowania danych, dzięki czemu aplikacja może używać odpowiedniego dostawcy danych dla danych, których dotyczą dane.

W przypadku danych transakcyjnych, relacyjnych usługa Azure SQL Databases jest najlepszą opcją. W przypadku danych z dużą wydajnością do odczytu pamięć podręczna Redis cache wspierana przez usługę Azure SQL Database jest dobrym rozwiązaniem.

Dane JSON bez struktury mogą być przechowywane na różne sposoby, od kolumn usługi SQL Database do obiektów blob lub tabel w usłudze Azure Storage do usługi Azure Cosmos DB. Z nich usługa Azure Cosmos DB oferuje najlepszą funkcję wykonywania zapytań i jest zalecaną opcją dla dużej liczby dokumentów opartych na formacie JSON, które muszą obsługiwać wykonywanie zapytań.

Przejściowe polecenia lub dane oparte na zdarzeniach używane do organizowania zachowania aplikacji mogą używać usługi Azure Service Bus lub kolejek usługi Azure Storage. Usługa Azure Service Bus oferuje większą elastyczność i jest zalecaną usługą do obsługi komunikatów innych niż proste w aplikacjach i między nimi.

Zalecenia dotyczące architektury

Wymagania aplikacji powinny dyktować jej architekturę. Dostępnych jest wiele różnych usług platformy Azure. Wybór właściwego jest ważną decyzją. Firma Microsoft oferuje galerię architektur referencyjnych, które ułatwiają identyfikowanie typowych architektur zoptymalizowanych pod kątem typowych scenariuszy. Możesz znaleźć architekturę referencyjną, która jest ściśle mapna na wymagania aplikacji lub przynajmniej oferuje punkt wyjścia.

Rysunek 11–1 przedstawia przykładową architekturę referencyjną. Na tym diagramie opisano zalecane podejście architektury witryny internetowej systemu zarządzania zawartością typu Sitecore zoptymalizowane pod kątem marketingu.

Figure 11-1

Rysunek 11–1. Architektura referencyjna witryny marketingowej sitecore.

Dokumentacja — rekomendacje dotyczące hostingu platformy Azure