Wzorzec niezawodnej aplikacji internetowej dla platformy .NET

Azure App Service
Azure Front Door
Azure Cache for Redis
.NET

Ten artykuł zawiera wskazówki dotyczące implementowania wzorca niezawodnej aplikacji internetowej. W tym wzorcu opisano sposób modyfikowania (replatformowania) aplikacji internetowych na potrzeby migracji do chmury. Zawiera on normatywne wskazówki dotyczące architektury, kodu i konfiguracji, które są zgodne z zasadami Azure Well-Architected Framework.

Dlaczego wzorzec niezawodnej aplikacji internetowej dla platformy .NET?

Wzorzec niezawodnej aplikacji internetowej to zestaw zasad i technik implementacji, które definiują sposób ponownego tworzenia platformy aplikacji internetowych podczas migracji ich do chmury. Koncentruje się on na minimalnych aktualizacjach kodu, które należy wprowadzić w chmurze. Poniższe wskazówki używają implementacji referencyjnej jako przykładu w całym. Wskazówki są zgodne z przeplatformową podróż fikcyjnej firmy Relecloud w celu zapewnienia kontekstu biznesowego podróży. Przed zaimplementowaniem wzorca niezawodnej aplikacji internetowej dla platformy .NET firma Relecloud miała monolityczną lokalną aplikację internetową do obsługi biletów, która używała platformy ASP.NET.

Napiwek

Logo usługi GitHub Istnieje implementacja referencyjna (przykład) wzorca niezawodnej aplikacji internetowej. Reprezentuje stan końcowy implementacji niezawodnej aplikacji internetowej dla fikcyjnej firmy o nazwie Relecloud. Jest to aplikacja internetowa klasy produkcyjnej, która zawiera wszystkie aktualizacje kodu, architektury i konfiguracji omówione w tym artykule. Wdróż implementację referencyjną i użyj jej, aby kierować implementacją wzorca niezawodnej aplikacji internetowej.

Jak zaimplementować wzorzec niezawodnej aplikacji internetowej

Ten artykuł zawiera wskazówki dotyczące architektury, kodu i konfiguracji dotyczące implementowania wzorca niezawodnej aplikacji internetowej. Skorzystaj z poniższych linków, aby przejść do konkretnych potrzebnych wskazówek:

  • kontekst biznesowy. Dopasuj te wskazówki do kontekstu biznesowego i dowiedz się, jak definiować natychmiastowe i długoterminowe cele, które umożliwiają ponowne tworzenie decyzji.
  • wskazówki dotyczące architektury . Dowiedz się, jak wybrać odpowiednie usługi w chmurze i zaprojektować architekturę spełniającą wymagania biznesowe.
  • wskazówki dotyczące kodu. Zaimplementuj trzy wzorce projektowe, aby zwiększyć niezawodność i wydajność aplikacji internetowej w chmurze: ponawianie, wyłącznik i wzorce Cache-Aside.
  • wskazówki dotyczące konfiguracji . Konfigurowanie uwierzytelniania i autoryzacji, tożsamości zarządzanych, środowisk z prawami, infrastruktury jako kodu i monitorowania.

Kontekst biznesowy

Pierwszym krokiem ponownego tworzenia aplikacji internetowej jest zdefiniowanie celów biznesowych. Należy ustawić natychmiastowe cele, takie jak cele poziomu usług (SLO) i cele optymalizacji kosztów, a także przyszłe cele aplikacji internetowej. Te cele wpływają na wybór usług w chmurze i architekturę aplikacji internetowej w chmurze. Zdefiniuj docelowy cel slo dla aplikacji internetowej, na przykład 99,9% czasu pracy. Oblicz złożoną umowę SLA dla wszystkich usług, które mają wpływ na dostępność aplikacji internetowej.

Na przykład firma Relecloud ma pozytywną prognozę sprzedaży i przewiduje zwiększone zapotrzebowanie na aplikację internetową do obsługi biletów. Aby sprostać temu zapotrzebowaniu, zdefiniowali cele aplikacji internetowej:

  • Stosowanie tanich zmian kodu o wysokiej wartości.
  • Osiągnąć cel slo 99.9%.
  • Wdrażanie praktyk metodyki DevOps.
  • Tworzenie środowisk zoptymalizowanych pod kątem kosztów.
  • Zwiększanie niezawodności i bezpieczeństwa.

Infrastruktura lokalna firmy Relecloud nie była opłacalnym rozwiązaniem umożliwiającym osiągnięcie tych celów. Zdecydowali, że migracja aplikacji internetowej na platformę Azure była najbardziej opłacalnym sposobem osiągnięcia bezpośrednich i przyszłych celów.

Wskazówki dotyczące architektury

Wzorzec niezawodnej aplikacji internetowej zawiera kilka podstawowych elementów architektury. System DNS musi zarządzać rozpoznawaniem punktów końcowych, zaporą aplikacji internetowej w celu blokowania złośliwego ruchu HTTP oraz modułu równoważenia obciążenia w celu kierowania i ochrony przychodzących żądań użytkowników. Platforma aplikacji hostuje kod aplikacji internetowej i wykonuje wywołania wszystkich usług zaplecza za pośrednictwem prywatnych punktów końcowych w sieci wirtualnej. Narzędzie do monitorowania wydajności aplikacji przechwytuje metryki i dzienniki, aby ułatwić zrozumienie aplikacji internetowej.

Diagram przedstawiający podstawowe elementy architektury wzorca niezawodnej aplikacji internetowej.

Rysunek 1. Podstawowe elementy architektury wzorca niezawodnej aplikacji internetowej.

Projektowanie architektury

Zaprojektuj infrastrukturę tak, aby obsługiwała metryki odzyskiwania , takie jak cel czasu odzyskiwania (RTO) i cel punktu odzyskiwania (RPO). Cel czasu odzyskiwania wpływa na dostępność i musi obsługiwać cel slo. Określ cel punktu odzyskiwania i skonfiguruj nadmiarowość danych w celu spełnienia celu punktu odzyskiwania.

  • Wybierz niezawodność infrastruktury. Określ, ile stref dostępności i regionów należy spełnić wymagania dotyczące dostępności. Dodaj strefy dostępności i regiony do momentu spełnienia złożonej umowy SLA. Wzorzec niezawodnej aplikacji internetowej obsługuje wiele regionów dla konfiguracji aktywne-aktywne lub aktywne-pasywne. Na przykład implementacja referencyjna używa konfiguracji aktywne-pasywnej, aby spełnić cel SLO 99,9%.

    W przypadku aplikacji internetowej z wieloma regionami skonfiguruj moduł równoważenia obciążenia pod kątem kierowania ruchu do drugiego regionu tak, aby obsługiwał konfigurację aktywne-aktywne lub aktywne-pasywne w zależności od potrzeb biznesowych. Oba regiony wymagają tych samych usług, z wyjątkiem jednego regionu, ma sieć wirtualną koncentratora, która łączy regiony. Wdrażanie topologii sieci piasty i szprych w celu scentralizowania i udostępniania zasobów, takich jak zapora sieciowa. Jeśli masz maszyny wirtualne, dodaj hosta bastionu do sieci wirtualnej koncentratora, aby zarządzać nimi przy użyciu zwiększonych zabezpieczeń. (Zobacz rysunek 2.)

    Diagram przedstawiający wzorzec niezawodnej aplikacji internetowej z drugim regionem i topologią piasty i szprych.

    Rysunek 2. Wzorzec niezawodnej aplikacji internetowej z drugim regionem i topologią piasty i szprych.

  • Wybierz topologię sieci. Wybierz odpowiednią topologię sieci dla wymagań sieci web i sieci. Jeśli planujesz używać wielu sieci wirtualnych, użyj topologii sieci piasty i szprych . Zapewnia ona korzyści związane z kosztami, zarządzaniem i zabezpieczeniami oraz opcje łączności hybrydowej z sieciami lokalnymi i wirtualnymi.

Wybieranie odpowiednich usług platformy Azure

Po przeniesieniu aplikacji internetowej do chmury należy wybrać usługi platformy Azure spełniające wymagania biznesowe i dostosować je do bieżących funkcji lokalnej aplikacji internetowej. To wyrównanie pomaga zminimalizować nakład pracy ponownej platformy. Na przykład użyj usług, które umożliwiają zachowanie tego samego aparatu bazy danych i obsługę istniejącego oprogramowania pośredniczącego i struktur. Poniższe sekcje zawierają wskazówki dotyczące wybierania odpowiednich usług platformy Azure dla aplikacji internetowej.

Na przykład przed przeniesieniem jej do chmury aplikacja internetowa usługi Relecloud była lokalną aplikacją monolityczną ASP.NET. Uruchomiono ją na dwóch maszynach wirtualnych i użyto bazy danych programu SQL Server. Aplikacja internetowa cierpiała na typowe problemy z skalowalnością i wdrażaniem funkcji. Ten punkt początkowy, ich cele biznesowe i SLO doprowadziły do wyborów usług.

  • Platforma aplikacji: użyj usługi aplikacja systemu Azure jako platformy aplikacji. Aplikacja Relecloud wybrała usługę App Service jako platformę aplikacji z następujących powodów:

    • Umowa dotycząca wysokiego poziomu usług (SLA). Ma wysoką umowę SLA spełniającą cel slo środowiska produkcyjnego 99,9%.
    • Zmniejszenie nakładu pracy związanego z zarządzaniem. Jest to w pełni zarządzane rozwiązanie, które obsługuje skalowanie, kontrole kondycji i równoważenie obciążenia.
    • Obsługa platformy .NET. Obsługuje on wersję platformy .NET, w ramach którego aplikacja jest zapisywana.
    • Możliwość konteneryzacji. Aplikacja internetowa może być zbieżna z chmurą bez konteneryzacji, ale platforma aplikacji obsługuje również konteneryzację bez zmieniania usług platformy Azure.
    • Automatyczne skalowanie. Aplikacja internetowa może automatycznie skalować w poziomie i w oparciu o ruch użytkowników i ustawienia konfiguracji. Platforma obsługuje również skalowanie w górę lub w dół, aby spełnić różne wymagania dotyczące hostingu.
  • Zarządzanie tożsamościami: użyj identyfikatora Entra firmy Microsoft jako rozwiązania do zarządzania tożsamościami i dostępem. Firma Relecloud wybrała identyfikator Entra firmy Microsoft z następujących powodów:

    • Uwierzytelnianie i autoryzacja. Aplikacja musi uwierzytelniać i autoryzować pracowników centrum telefonicznego.
    • Skalowalne. Microsoft Entra ID skaluje w celu obsługi większych scenariuszy.
    • Kontrola tożsamości użytkownika. Pracownicy centrum telefonicznego mogą używać istniejących tożsamości przedsiębiorstwa.
    • Obsługa protokołu autoryzacji. Identyfikator Entra firmy Microsoft obsługuje protokół OAuth 2.0 dla tożsamości zarządzanych.
  • Baza danych: użyj usługi, która pozwala zachować ten sam aparat bazy danych. Użyj drzewa decyzyjnego magazynu danych, aby kierować wyborem. Aplikacja internetowa firmy Relecloud używa lokalnego programu SQL Server. Chcieli użyć istniejącego schematu bazy danych, procedur składowanych i funkcji. Na platformie Azure jest dostępnych kilka produktów SQL, ale z następujących powodów firma Relecloud wybrała usługę Azure SQL Database :

    • Niezawodność. Warstwa ogólnego przeznaczenia zapewnia wysoką nadmiarowość umów SLA i wielu regionów. Może obsługiwać duże obciążenie użytkownika.
    • Zmniejszenie nakładu pracy związanego z zarządzaniem. Usługa SQL Database udostępnia zarządzane wystąpienie bazy danych SQL.
    • Obsługa migracji. Obsługuje migrację bazy danych z lokalnego programu SQL Server.
    • Spójność z konfiguracjami lokalnymi. Obsługuje ona istniejące procedury składowane, funkcje i widoki.
    • Elastyczność. Obsługuje kopie zapasowe i przywracanie do punktu w czasie.
    • Wiedza i minimalna praca. Usługa SQL Database umożliwia firmie Relecloud korzystanie z istniejącej wiedzy i wymaga minimalnej pracy do wdrożenia.
  • Monitorowanie wydajności aplikacji: Użyj Application Insights do analizowania danych telemetrycznych aplikacji. Z następujących powodów usługa Relecloud zdecydowała się korzystać z usługi Application Insights:

    • Integracja z usługą Azure Monitor. Zapewnia najlepszą integrację z usługą Azure Monitor.
    • Wykrywanie anomalii. Automatycznie wykrywa anomalie wydajności.
    • Rozwiązywanie problemów. Ułatwia diagnozowanie problemów w uruchomionej aplikacji.
    • Monitoring. Zbiera informacje o sposobie korzystania z aplikacji przez użytkowników i umożliwia łatwe śledzenie zdarzeń niestandardowych.
    • Luka w widoczności. Rozwiązanie lokalne nie ma rozwiązania do monitorowania wydajności aplikacji. Usługa Application Insights zapewnia łatwą integrację z platformą aplikacji i kodem.
  • Cache: Wybierz, czy dodać pamięć podręczną do architektury aplikacji internetowej. azure cache for Redis jest podstawowym rozwiązaniem pamięci podręcznej platformy Azure. Jest to zarządzany magazyn danych w pamięci oparty na oprogramowaniu Redis. Obciążenie aplikacji internetowej relecloud jest mocno niesymetryczne w kierunku wyświetlania koncertów i szczegółów miejsca. Usługa Relecloud dodała usługę Azure Cache for Redis z następujących powodów:

    • Zmniejszenie nakładu pracy związanego z zarządzaniem. Jest to w pełni zarządzana usługa.
    • Szybkość i głośność. Ma ona wysoką przepływność danych i odczyty o małym opóźnieniu dla często używanych, wolno zmieniających się danych.
    • Zróżnicowana możliwość obsługi. Jest to ujednolicona lokalizacja pamięci podręcznej dla wszystkich wystąpień aplikacji internetowej do użycia.
    • Zewnętrzny magazyn danych. Lokalne serwery aplikacji wykonały buforowanie lokalne maszyn wirtualnych. Ta konfiguracja nie odciążyła bardzo częstych danych i nie mogła unieważnić danych.
    • Sesje bez szminki. Stan sesji zewnętrznej obsługuje sesje inne niż szminki.
  • moduł równoważenia obciążenia: aplikacje internetowe korzystające z rozwiązań PaaS powinny używać usług Azure Front Door, Azure Application Gateway lub obu tych rozwiązań w zależności od architektury i wymagań aplikacji internetowej. Użyj drzewa decyzyjnego modułu równoważenia obciążenia, aby wybrać odpowiedni moduł równoważenia obciążenia. Usługa Relecloud potrzebowała modułu równoważenia obciążenia warstwy 7, który może kierować ruch między wieloma regionami. Firma potrzebowała aplikacji internetowej w wielu regionach, aby spełnić cel slo 99,9%. Usługa Relecloud wybrała usługę Azure Front Door z następujących powodów:

    • Globalne równoważenie obciążenia. Jest to moduł równoważenia obciążenia warstwy 7, który może kierować ruch między wieloma regionami.
    • Zapora aplikacji internetowej. Integruje się natywnie z usługą Azure Web Application Firewall.
    • Elastyczność routingu. Umożliwia zespołowi aplikacji konfigurowanie ruchu przychodzącego w celu obsługi przyszłych zmian w aplikacji.
    • Przyspieszanie ruchu. Używa emisji anycast, aby dotrzeć do najbliższego punktu obecności platformy Azure i znaleźć najszybszą trasę do aplikacji internetowej.
    • Domeny niestandardowe. Obsługuje niestandardowe nazwy domen z elastyczną weryfikacją domeny.
    • Sondy kondycji. Aplikacja wymaga inteligentnego monitorowania sondy kondycji. Usługa Azure Front Door używa odpowiedzi z sondy, aby określić najlepsze źródło routingu żądań klientów.
    • Obsługa monitorowania. Obsługuje wbudowane raporty z pulpitem nawigacyjnym typu all-in-one zarówno dla usługi Azure Front Door, jak i wzorców zabezpieczeń. Możesz skonfigurować alerty zintegrowane z usługą Azure Monitor. Usługa Azure Front Door umożliwia aplikacji rejestrowanie poszczególnych żądań i nieudanych sond kondycji.
    • Ochrona przed atakami DDoS. Ma wbudowaną ochronę przed atakami DDoS warstwy 3-4.
    • Sieć dostarczania zawartości. Umieszcza ono usługę Relecloud w celu korzystania z sieci dostarczania zawartości. Sieć dostarczania zawartości zapewnia przyspieszenie lokacji.
  • Zapora aplikacji internetowej: użyj usługi Azure Web Application Firewall , aby zapewnić scentralizowaną ochronę przed typowymi programami wykorzystującymi luki w zabezpieczeniach i lukami w zabezpieczeniach internetowych. Usługa Relecloud używa usługi Azure Web Application Firewall z następujących powodów:

    • Ochrona globalna. Zapewnia ulepszoną globalną ochronę aplikacji internetowych bez poświęcania wydajności.
    • Ochrona botnetu. Zespół może monitorować i konfigurować ustawienia w celu rozwiązania problemów z zabezpieczeniami związanych z botnetami.
    • Równoważność ze środowiskiem lokalnym. Rozwiązanie lokalne działało za zaporą aplikacji internetowej zarządzanej przez it.
    • Łatwość użytkowania. Zapora aplikacji internetowej integruje się z usługą Azure Front Door.
  • Magazyn konfiguracji: wybierz, czy chcesz dodać magazyn konfiguracji aplikacji do aplikacji internetowej. aplikacja systemu Azure Configuration to usługa umożliwiająca centralne zarządzanie ustawieniami aplikacji i flagami funkcji. Zapoznaj się z najlepszymi rozwiązaniami dotyczącymi usługi App Configuration, aby zdecydować, czy ta usługa jest odpowiednia dla twojej aplikacji. Firma Relecloud chciała zastąpić konfigurację opartą na plikach centralnym magazynem konfiguracji, który integruje się z platformą aplikacji i kodem. Z następujących powodów dodali usługę App Configuration do architektury:

    • Elastyczność. Obsługuje flagi funkcji. Flagi funkcji umożliwiają użytkownikom rezygnację z funkcji wczesnej wersji zapoznawczej i jej korzystanie ze środowiska produkcyjnego bez konieczności ponownego wdrażania aplikacji.
    • Obsługa potoku Git. Źródło prawdy dla danych konfiguracji musi być repozytorium Git. Potok potrzebny do zaktualizowania danych w centralnym magazynie konfiguracji.
    • Obsługa tożsamości zarządzanej. Obsługuje tożsamości zarządzane w celu uproszczenia i zabezpieczenia połączenia z magazynem konfiguracji.
  • Menedżer wpisów tajnych: użyj usługi Azure Key Vault , jeśli masz wpisy tajne do zarządzania na platformie Azure. Usługę Key Vault można uwzględnić w aplikacjach platformy .NET przy użyciu obiektu ConfigurationBuilder. Lokalna aplikacja internetowa firmy Relecloud przechowywała wpisy tajne w plikach konfiguracji kodu, ale lepszym rozwiązaniem w zakresie zabezpieczeń jest przechowywanie wpisów tajnych w lokalizacji obsługującej kontrolę RBAC i inspekcję. Mimo że tożsamości zarządzane są preferowanym rozwiązaniem do nawiązywania połączenia z zasobami platformy Azure, firma Relecloud miała wpisy tajne aplikacji potrzebne do zarządzania. Usługa Relecloud używała usługi Key Vault z następujących powodów:

    • Szyfrowanie. Obsługuje szyfrowanie magazynowane i przesyłane.
    • Obsługa tożsamości zarządzanej. Usługi aplikacji mogą używać tożsamości zarządzanych do uzyskiwania dostępu do magazynu wpisów tajnych.
    • Monitorowanie i rejestrowanie. Usługa Key Vault ułatwia inspekcję dostępu i generuje alerty w przypadku zmiany przechowywanych wpisów tajnych.
    • Integracja. Usługa Key Vault zapewnia natywną integrację z magazynem konfiguracji platformy Azure (App Configuration) i platformą hostingu internetowego (App Service).
  • rozwiązanie Storage: Zobacz opcje usługi Azure Storage wybrać odpowiednie rozwiązanie magazynu na podstawie Twoich wymagań. Lokalna aplikacja internetowa firmy Relecloud miała zainstalowany magazyn dysków na każdym serwerze internetowym, ale zespół chciał użyć zewnętrznego rozwiązania magazynu danych. Z następujących powodów usługa Relecloud wybrała usługę Azure Blob Storage :

    • Rozszerzony dostęp do zabezpieczeń. Aplikacja internetowa może wyeliminować punkty końcowe umożliwiające uzyskiwanie dostępu do magazynu udostępnianego publicznemu Internetowi z dostępem anonimowym.
    • Szyfrowanie. Usługa Blob Storage szyfruje dane magazynowane i przesyłane.
    • Elastyczność. Usługa Blob Storage obsługuje magazyn strefowo nadmiarowy (ZRS). Magazyn strefowo nadmiarowy replikuje dane synchronicznie w trzech strefach dostępności platformy Azure w regionie podstawowym. Każda strefa dostępności znajduje się w oddzielnej lokalizacji fizycznej, która ma niezależne zasilanie, chłodzenie i sieć. Ta konfiguracja powinna sprawić, że obrazy biletów będą odporne na utratę.
  • Zabezpieczenia punktu końcowego: Użyj usługi Azure Private Link, aby uzyskać dostęp do rozwiązań platformy jako usługi (PaaS) za pośrednictwem prywatnego punktu końcowego w sieci wirtualnej. Ruch między siecią wirtualną a usługą jest przesyłany przez sieć szkieletową firmy Microsoft. Z następujących powodów usługa Relecloud wybrała usługę Private Link:

    • Komunikacja z zwiększonymi zabezpieczeniami. Usługa Private Link umożliwia aplikacji prywatny dostęp do usług na platformie Azure i zmniejsza zużycie sieci magazynów danych w celu ochrony przed wyciekiem danych.
    • Minimalny nakład pracy. Prywatne punkty końcowe obsługują platformę aplikacji internetowej i platformę bazy danych używaną przez aplikację internetową. Obie platformy dubluje istniejące konfiguracje lokalne, więc wymagana jest minimalna zmiana.
  • Zabezpieczenia sieci. Użyj usługi Azure Firewall do kontrolowania ruchu przychodzącego i wychodzącego na poziomie sieci. Użyj usługi Azure Bastion, aby nawiązać połączenie z maszynami wirtualnymi z rozszerzonymi zabezpieczeniami bez uwidaczniania portów RDP/SSH. Firma Relecloud przyjęła topologię sieci piasty i szprych i chciała umieścić udostępnione usługi zabezpieczeń sieci w centrum. Usługa Azure Firewall zwiększa bezpieczeństwo, sprawdzając cały ruch wychodzący z szprych w celu zwiększenia bezpieczeństwa sieci. Usługa Relecloud potrzebowała usługi Azure Bastion do wdrożeń zabezpieczeń rozszerzonych z hosta przesiadkowego w podsieci DevOps.

Wskazówki dotyczące kodu

Aby pomyślnie przenieść aplikację internetową do chmury, należy zaktualizować kod aplikacji internetowej przy użyciu wzorca ponawiania, wzorca wyłącznika i wzorca Cache-Aside.

Diagram przedstawiający role wzorców projektowych we wzorcu niezawodnej aplikacji internetowej.

Rysunek 3. Role wzorców projektowych.

Każdy wzorzec projektu zapewnia korzyści projektowe obciążeń, które są zgodne z co najmniej jednym filarem Well-Architected Framework. Oto omówienie wzorców, które należy zaimplementować:

  1. Wzorzec ponawiania prób. Wzorzec ponawiania próby obsługuje błędy przejściowe, ponawiając próby operacji, które mogą sporadycznie zakończyć się niepowodzeniem. Zaimplementuj ten wzorzec dla wszystkich wywołań wychodzących do innych usług platformy Azure.

  2. Wzorzec wyłącznika. Wzorzec wyłącznika uniemożliwia aplikacji ponawianie prób operacji, które nie są przejściowe. Zaimplementuj ten wzorzec we wszystkich wywołaniach wychodzących do innych usług platformy Azure.

  3. Cache-Aside wzorzec. Wzorzec Cache-Aside ładuje dane na żądanie do pamięci podręcznej z magazynu danych. Zaimplementuj ten wzorzec dla żądań do bazy danych.

Wzorzec projektowania Niezawodność (RE) Zabezpieczenia (SE) Optymalizacja kosztów (CO) Doskonałość operacyjna (OE) Wydajność (PE) Obsługa zasad zapory aplikacji internetowej
Wzorzec ponawiania RE:07
wzorzec wyłącznika RE:03
RE:07
PE:07
PE:11
wzorcaCache-Aside RE:05
PE:08
PE:12

Implementowanie wzorca ponawiania prób

Dodaj wzorzec ponawiania prób do kodu aplikacji, aby rozwiązać tymczasowe zakłócenia usługi. Te zakłócenia są nazywane błędami przejściowymi. Błędy przejściowe zwykle są rozwiązywane w ciągu kilku sekund. Wzorzec ponawiania umożliwia ponowne wysyłanie żądań, które zakończyły się niepowodzeniem. Umożliwia również skonfigurowanie opóźnienia między ponownymi próbami a liczbą prób do wykonania przed niepowodzeniem.

  • Użyj wbudowanych mechanizmów ponawiania prób. Użyj wbudowanego mechanizmu ponawiania prób, który zapewnia większość usług platformy Azure, aby przyspieszyć implementację. Na przykład implementacja referencyjna używa odporności połączenia w Entity Framework Core w celu zastosowania wzorca ponawiania prób w żądaniach do usługi SQL Database:

    services.AddDbContextPool<ConcertDataContext>(options => options.UseSqlServer(sqlDatabaseConnectionString,
        sqlServerOptionsAction: sqlOptions =>
        {
            sqlOptions.EnableRetryOnFailure(
            maxRetryCount: 5,
            maxRetryDelay: TimeSpan.FromSeconds(3),
            errorNumbersToAdd: null);
        }));
    
  • Użyj bibliotek programowania ponawiania prób. W przypadku komunikacji HTTP należy zintegrować standardową bibliotekę odporności, na przykład Polly lub Microsoft.Extensions.Http.Resilience. Te biblioteki zapewniają kompleksowe mechanizmy ponawiania prób, które mają kluczowe znaczenie dla zarządzania komunikacją z zewnętrznymi usługami internetowymi. Na przykład implementacja referencyjna używa metody Polly do wymuszania wzorca ponawiania za każdym razem, gdy kod tworzy obiekt, który wywołuje obiekt IConcertSearchService:

    private void AddConcertSearchService(IServiceCollection services)
    {
        var baseUri = Configuration["App:RelecloudApi:BaseUri"];
        if (string.IsNullOrWhiteSpace(baseUri))
        {
            services.AddScoped<IConcertSearchService, MockConcertSearchService>();
        }
        else
        {
            services.AddHttpClient<IConcertSearchService, RelecloudApiConcertSearchService>(httpClient =>
            {
                httpClient.BaseAddress = new Uri(baseUri);
                httpClient.DefaultRequestHeaders.Add(HeaderNames.Accept, "application/json");
                httpClient.DefaultRequestHeaders.Add(HeaderNames.UserAgent, "Relecloud.Web");
            })
            .AddPolicyHandler(GetRetryPolicy())
            .AddPolicyHandler(GetCircuitBreakerPolicy());
        }
    }
    
    private static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
    {
        var delay = Backoff.DecorrelatedJitterBackoffV2(TimeSpan.FromMilliseconds(500), retryCount: 3);
        return HttpPolicyExtensions
          .HandleTransientHttpError()
          .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
          .WaitAndRetryAsync(delay);
    }
    

Implementowanie wzorca wyłącznika

Użyj wzorca wyłącznika, aby obsługiwać przerwy w działaniu usługi, które nie są błędami przejściowymi. Wzorzec wyłącznika uniemożliwia aplikacji ciągłe próby uzyskania dostępu do usługi, która nie odpowiada. Zwalnia aplikację i pomaga zapobiegać marnowaniu cykli procesora CPU, dzięki czemu aplikacja zachowuje integralność wydajności dla użytkowników końcowych.

Na przykład implementacja referencyjna stosuje wzorzec wyłącznika dla wszystkich żądań do interfejsu API. Używa logiki HandleTransientHttpError do wykrywania żądań HTTP, które można bezpiecznie ponowić, ale ogranicza liczbę zagregowanych błędów w określonym przedziale czasu:

private static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
        .CircuitBreakerAsync(5, TimeSpan.FromSeconds(30));
}

Implementowanie wzorca z odkładania do pamięci podręcznej

Dodaj wzorzec Odkładanie do pamięci podręcznej do aplikacji internetowej, aby ulepszyć zarządzanie danymi w pamięci. Wzorzec przypisuje aplikacji odpowiedzialność za obsługę żądań danych i zapewnienie spójności między pamięcią podręczną a magazynem trwałym, takim jak baza danych. Skraca czas odpowiedzi, zwiększa przepływność i zmniejsza potrzebę większego skalowania. Zmniejsza to również obciążenie podstawowego magazynu danych, co zwiększa niezawodność i optymalizację kosztów. Aby zaimplementować wzorzec odkładania do pamięci podręcznej, wykonaj następujące zalecenia:

  • Skonfiguruj aplikację do używania pamięci podręcznej. Aplikacje produkcyjne powinny używać rozproszonej pamięci podręcznej Redis Cache. Ta pamięć podręczna zwiększa wydajność, zmniejszając liczbę zapytań bazy danych. Umożliwia również sesje inne niż szminki, dzięki czemu moduł równoważenia obciążenia może równomiernie dystrybuować ruch. Implementacja referencyjna używa rozproszonej pamięci podręcznej Redis Cache. Metoda AddAzureCacheForRedis konfiguruje aplikację do korzystania z usługi Azure Cache for Redis:

    private void AddAzureCacheForRedis(IServiceCollection services)
    {
        if (!string.IsNullOrWhiteSpace(Configuration["App:RedisCache:ConnectionString"]))
        {
            services.AddStackExchangeRedisCache(options =>
            {
                options.Configuration = Configuration["App:RedisCache:ConnectionString"];
            });
        }
        else
        {
            services.AddDistributedMemoryCache();
        }
    }
    
  • Buforowanie danych o wysokiej potrzebie. Zastosuj wzorzec Cache-Aside dla danych o dużej potrzebie, aby zwiększyć jego skuteczność. Usługa Azure Monitor umożliwia śledzenie procesora CPU, pamięci i magazynu bazy danych. Te metryki ułatwiają określenie, czy można użyć mniejszej jednostki SKU bazy danych po zastosowaniu wzorca Cache-Aside. Na przykład implementacja referencyjna buforuje bardzo potrzebne dane, które obsługują stronę Nadchodzące koncerty. Metoda GetUpcomingConcertsAsync pobiera dane do pamięci podręcznej Redis z usługi SQL Database i wypełnia pamięć podręczną najnowszymi danymi koncertowymi:

    public async Task<ICollection<Concert>> GetUpcomingConcertsAsync(int count)
    {
        IList<Concert>? concerts;
        var concertsJson = await this.cache.GetStringAsync(CacheKeys.UpcomingConcerts);
        if (concertsJson != null)
        {
            // There is cached data. Deserialize the JSON data.
            concerts = JsonSerializer.Deserialize<IList<Concert>>(concertsJson);
        }
        else
        {
            // There's nothing in the cache. Retrieve data 
            // from the repository and cache it for one hour.
            concerts = await this.database.Concerts.AsNoTracking()
                .Where(c => c.StartTime > DateTimeOffset.UtcNow && c.IsVisible)
                .OrderBy(c => c.StartTime)
                .Take(count)
                .ToListAsync();
            concertsJson = JsonSerializer.Serialize(concerts);
            var cacheOptions = new DistributedCacheEntryOptions {
                AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
            };
            await this.cache.SetStringAsync(CacheKeys.UpcomingConcerts, concertsJson, cacheOptions);
        }
        return concerts ?? new List<Concert>();
    }
    
  • Zachowaj świeżość danych pamięci podręcznej. Zaplanuj regularne aktualizacje pamięci podręcznej w celu synchronizacji z najnowszymi zmianami bazy danych. Użyj zmienności danych, a użytkownik musi określić optymalną częstotliwość odświeżania. Dzięki temu aplikacja korzysta ze wzorca Cache-Aside w celu zapewnienia szybkiego dostępu i bieżących informacji. Na przykład implementacja referencyjna buforuje dane tylko przez jedną godzinę i używa metody CreateConcertAsync do wyczyszczenia klucza pamięci podręcznej po zmianie danych:

    public async Task<CreateResult> CreateConcertAsync(Concert newConcert)
    {
        database.Add(newConcert);
        await this.database.SaveChangesAsync();
        this.cache.Remove(CacheKeys.UpcomingConcerts);
        return CreateResult.SuccessResult(newConcert.Id);
    }
    
  • Zapewnianie spójności danych. Zaimplementuj mechanizmy aktualizacji pamięci podręcznej bezpośrednio po każdej operacji zapisu bazy danych. Użyj aktualizacji opartych na zdarzeniach lub dedykowanych klas zarządzania danymi, aby zapewnić spójność pamięci podręcznej. Spójna synchronizacja pamięci podręcznej z modyfikacjami bazy danych jest kluczowa dla wzorca z odkładaniem do pamięci podręcznej. Implementacja referencyjna używa metody UpdateConcertAsync, aby zachować spójność danych w pamięci podręcznej:

    public async Task<UpdateResult> UpdateConcertAsync(Concert existingConcert), 
    {
       database.Update(existingConcert);
       await database.SaveChangesAsync();
       this.cache.Remove(CacheKeys.UpcomingConcerts);
       return UpdateResult.SuccessResult();
    }
    

Wskazówki dotyczące konfiguracji

Poniższe sekcje zawierają wskazówki dotyczące implementowania aktualizacji konfiguracji. Każda sekcja jest zgodna z co najmniej jednym filarem dobrze zaprojektowanej struktury.

Konfigurowanie Niezawodność (RE) Zabezpieczenia (SE) Optymalizacja kosztów (CO) Doskonałość operacyjna (OE) Wydajność (PE) Obsługa zasad zapory aplikacji internetowej
Konfigurowanie uwierzytelniania i autoryzacji użytkownika SE:05
OE:10
Implementowanie tożsamości zarządzanych SE:05
OE:10
Środowiska rightsize CO:05
CO:06
Implementowanie skalowania automatycznego RE:06
CO:12
PE:05
Automatyzowanie wdrażania zasobów OE:05
Implementowanie monitorowania OE:07
PE:04

Konfigurowanie uwierzytelniania i autoryzacji użytkownika

Podczas migracji aplikacji internetowych na platformę Azure należy skonfigurować mechanizmy uwierzytelniania i autoryzacji użytkowników. Postępuj zgodnie z następującymi zaleceniami:

  • Korzystanie z platformy tożsamości. Konfigurowanie uwierzytelniania aplikacji internetowej za pomocą platformyMicrosoft Identity. Ta platforma obsługuje aplikacje korzystające z jednego katalogu Microsoft Entra, wielu katalogów Firmy Microsoft Entra z różnych organizacji oraz tożsamości microsoft lub kont społecznościowych.

  • Utwórz rejestrację aplikacji. Identyfikator Entra firmy Microsoft wymaga rejestracji aplikacji w dzierżawie podstawowej. Rejestracja aplikacji pomaga zapewnić, że użytkownicy, którzy uzyskują dostęp do aplikacji internetowej, mają tożsamości w dzierżawie podstawowej.

  • Korzystanie z funkcji platformy. Zminimalizuj potrzebę niestandardowego kodu uwierzytelniania przy użyciu funkcji platformy do uwierzytelniania użytkowników i uzyskiwania dostępu do danych. Na przykład usługa App Service zapewnia wbudowaną obsługę uwierzytelniania, dzięki czemu można logować użytkowników i uzyskiwać dostęp do danych podczas pisania minimalnej lub braku kodu w aplikacji internetowej.

  • Wymuszanie autoryzacji w aplikacji. Użyj kontroli dostępu opartej na rolach, aby przypisać najmniejsze uprawnienia do ról aplikacji . Zdefiniuj określone role dla różnych akcji użytkownika, aby uniknąć nakładania się i zapewnić przejrzystość. Zamapuj użytkowników na odpowiednie role i upewnij się, że mają dostęp tylko do niezbędnych zasobów i akcji.

  • Preferuj tymczasowy dostęp do magazynu. Użyj tymczasowych uprawnień, aby chronić przed nieautoryzowanym dostępem i naruszeniami. Na przykład można użyć sygnatur dostępu współdzielonego (SAS), aby ograniczyć dostęp do okresu. Użyj sygnatury dostępu współdzielonego delegowania użytkownika, aby zmaksymalizować bezpieczeństwo podczas udzielania tymczasowego dostępu. Jest to jedyna sygnatura dostępu współdzielonego, która używa poświadczeń identyfikatora Entra firmy Microsoft i nie wymaga trwałego klucza konta magazynu.

  • Wymuszanie autoryzacji na platformie Azure. Użyj kontroli dostępu opartej na rolach platformy Azure, aby przypisać najmniejsze uprawnienia do tożsamości użytkowników. Kontrola dostępu oparta na rolach platformy Azure definiuje zasoby platformy Azure, do których tożsamości mogą uzyskiwać dostęp, co mogą robić z tymi zasobami, oraz obszary, do których mają dostęp.

  • Unikaj trwałych uprawnień z podwyższonym poziomem uprawnień. Użyj usługi Microsoft Entra Privileged Identity Management , aby udzielić dostępu just in time dla uprzywilejowanych operacji. Deweloperzy często potrzebują dostępu na poziomie administratora do tworzenia/usuwania baz danych, modyfikowania schematów tabel i zmieniania uprawnień użytkownika. W przypadku korzystania z dostępu just in time tożsamości użytkowników otrzymują tymczasowe uprawnienia do wykonywania zadań uprzywilejowanych.

Korzystanie z tożsamości zarządzanych

Użyj tożsamości zarządzanych dla wszystkich usług platformy Azure, które je obsługują. Tożsamość zarządzana umożliwia zasobom platformy Azure (tożsamościom obciążeń) uwierzytelnianie w innych usługach platformy Azure i interakcję z nimi bez konieczności zarządzania poświadczeniami. Aby uprościć migrację, można nadal używać lokalnych rozwiązań uwierzytelniania dla systemów hybrydowych i starszych, ale należy je jak najszybciej przenieść do tożsamości zarządzanych. Aby zaimplementować tożsamości zarządzane, wykonaj następujące zalecenia:

  • Wybierz odpowiedni typ tożsamości zarządzanej. Preferuj tożsamości zarządzane przypisane przez użytkownika, jeśli masz co najmniej dwa zasoby platformy Azure, które wymagają tego samego zestawu uprawnień. Takie podejście jest bardziej wydajne niż tworzenie tożsamości zarządzanych przypisanych przez system dla każdego z tych zasobów i przypisywanie tych samych uprawnień do wszystkich z nich. W przeciwnym razie użyj tożsamości zarządzanych przypisanych przez system.

  • Konfigurowanie najmniejszych uprawnień. Użyj RBAC platformy Azure, aby udzielić tylko uprawnień krytycznych dla operacji, takich jak akcje CRUD w bazach danych lub uzyskiwanie dostępu do wpisów tajnych. Uprawnienia tożsamości obciążenia są trwałe, więc nie można zapewnić uprawnień just in time ani krótkoterminowych do tożsamości obciążeń. Jeśli kontrola dostępu oparta na rolach platformy Azure nie obejmuje określonego scenariusza, uzupełnij kontrolę dostępu na podstawie ról platformy Azure przy użyciu zasad dostępu na poziomie usług platformy Azure.

  • Zapewnij bezpieczeństwo pozostałych wpisów tajnych. Przechowywanie pozostałych wpisów tajnych w usłudze Azure Key Vault. Załaduj wpisy tajne z usługi Key Vault podczas uruchamiania aplikacji zamiast podczas każdego żądania HTTP. Dostęp o wysokiej częstotliwości w żądaniach HTTP może przekraczać limity transakcji usługi Key Vault. Przechowywanie konfiguracji aplikacji w konfiguracji aplikacja systemu Azure.

Implementacja referencyjna używa argumentu Authentication w parametrach połączenia bazy danych SQL, aby usługa App Service mogła nawiązać połączenie z bazą danych SQL przy użyciu tożsamości zarządzanej: Server=tcp:my-sql-server.database.windows.net,1433;Initial Catalog=my-sql-database;Authentication=Active Directory Default. Używa DefaultAzureCredential, aby umożliwić internetowym interfejsowi API nawiązywanie połączenia z usługą Key Vault przy użyciu tożsamości zarządzanej:

    builder.Configuration.AddAzureAppConfiguration(options =>
    {
         options
            .Connect(new Uri(builder.Configuration["Api:AppConfig:Uri"]), new DefaultAzureCredential())
            .ConfigureKeyVault(kv =>
            {
                // Some of the values coming from App Configuration
                // are stored in Key Vault. Use the managed identity
                // of this host for the authentication.
                kv.SetCredential(new DefaultAzureCredential());
            });
    });

Środowiska rightsize

Używaj warstw wydajności (SKU) usług platformy Azure spełniających potrzeby każdego środowiska bez przekraczania ich. Aby rozbudować odpowiednie środowiska, postępuj zgodnie z następującymi zaleceniami:

  • Szacowanie kosztów. Skorzystaj z kalkulatora cen platformy Azure, aby oszacować koszt każdego środowiska.

  • Optymalizacja kosztów środowisk produkcyjnych. Środowiska produkcyjne wymagają jednostek SKU spełniających umowy dotyczące poziomu usług (SLA), funkcji i skali wymaganej do produkcji. Ciągłe monitorowanie użycia zasobów i dostosowywanie jednostek SKU w celu dostosowania ich do rzeczywistych potrzeb związanych z wydajnością.

  • środowiska przedprodukcyjne optymalizacji kosztów.środowiska przedprodukcyjne powinny korzystać z zasobów o niższych kosztach i korzystać z rabatów, takich jak cennik usługi Azure Dev/Test. W tych środowiskach należy wyłączyć usługi, które nie są potrzebne. Jednocześnie upewnij się, że środowiska przedprodukcyjne są wystarczająco podobne do środowisk produkcyjnych, aby uniknąć wprowadzania zagrożeń. Utrzymanie tej równowagi gwarantuje, że testowanie będzie skuteczne bez ponoszenia niepotrzebnych kosztów.

  • Użyj infrastruktury jako kodu (IaC), aby zdefiniować jednostki SKU. Zaimplementuj IaC, aby dynamicznie wybierać i wdrażać odpowiednie jednostki SKU na podstawie środowiska. Takie podejście zwiększa spójność i upraszcza zarządzanie.

Na przykład implementacja referencyjna używa parametrów Bicep do wdrażania droższych warstw (SKU) w środowisku produkcyjnym:

    var redisCacheSkuName = isProd ? 'Standard' : 'Basic'
    var redisCacheFamilyName = isProd ? 'C' : 'C'
    var redisCacheCapacity = isProd ? 1 : 0

Implementowanie skalowania automatycznego

Skalowanie automatyczne pomaga zapewnić, że aplikacja internetowa pozostaje odporna, elastyczna i wydajna obsługa obciążeń dynamicznych. Aby zaimplementować skalowanie automatyczne, wykonaj następujące zalecenia:

  • Automatyzowanie skalowania w poziomie. Automatyczne skalowanie platformy Azure umożliwia zautomatyzowanie skalowania w poziomie w środowiskach produkcyjnych. Skonfiguruj reguły skalowania automatycznego w celu skalowania w poziomie na podstawie kluczowych metryk wydajności, aby aplikacja mogła obsługiwać różne obciążenia.

  • Uściślij wyzwalacze skalowania. Użyj użycia procesora CPU jako początkowego wyzwalacza skalowania, jeśli nie znasz wymagań dotyczących skalowania aplikacji. Uściślij wyzwalacze skalowania, aby uwzględnić inne metryki, takie jak pamięć RAM, przepływność sieci i operacje we/wy dysku. Celem jest dopasowanie zachowania aplikacji internetowej w celu uzyskania lepszej wydajności.

  • Podaj bufor skalowalny w poziomie. Ustaw progi skalowania tak, aby wyzwalały się przed osiągnięciem maksymalnej pojemności. Na przykład skonfiguruj skalowanie, aby nastąpiło przy użyciu procesora CPU na poziomie 85%, zamiast czekać, aż osiągnie 100%. Takie proaktywne podejście pomaga zachować wydajność i uniknąć potencjalnych wąskich gardeł.

Automatyzowanie wdrażania zasobów

Użyj automatyzacji, aby wdrożyć i zaktualizować zasoby i kod platformy Azure we wszystkich środowiskach. Postępuj zgodnie z następującymi zaleceniami:

  • Użyj infrastruktury jako kodu. Wdróż infrastrukturę jako kod przy użyciu potoków ciągłej integracji i ciągłego dostarczania (CI/CD). Platforma Azure udostępnia wstępnie utworzone szablony Bicep, ARM (JSON) i Terraform dla każdego zasobu platformy Azure.

  • Użyj potoku ciągłej integracji/ciągłego wdrażania (CI/CD). Użyj potoku ciągłej integracji/ciągłego wdrażania, aby wdrożyć kod z kontroli źródła w różnych środowiskach, takich jak testowanie, przemieszczanie i produkcja. Użyj usługi Azure Pipelines, jeśli pracujesz z usługą Azure DevOps. Użyj funkcji GitHub Actions dla projektów GitHub.

  • Integrowanie testów jednostkowych. Określ priorytety wykonywania i przekazywania wszystkich testów jednostkowych w potoku przed każdym wdrożeniem do usługi App Services. Uwzględnij narzędzia jakości kodu i pokrycia, takie jak SonarQube, aby uzyskać kompleksowy zakres testowania.

  • Adopt makiety struktur. Do testowania obejmującego zewnętrzne punkty końcowe należy używać pozorujących struktur. Te struktury umożliwiają tworzenie symulowanych punktów końcowych. Eliminują one konieczność konfigurowania rzeczywistych zewnętrznych punktów końcowych i zapewnienia jednolitych warunków testowania w różnych środowiskach.

  • Przeprowadź skanowanie zabezpieczeń. Użyj statycznego testowania zabezpieczeń aplikacji (SAST), aby znaleźć błędy zabezpieczeń i błędy kodowania w kodzie źródłowym. Ponadto przeprowadź analizę kompozycji oprogramowania (SCA), aby zbadać biblioteki i składniki innych firm pod kątem zagrożeń bezpieczeństwa. Narzędzia do tych analiz można łatwo zintegrować zarówno z usługami GitHub, jak i Azure DevOps.

Implementowanie monitorowania

Zaimplementuj monitorowanie aplikacji i platformy, aby zwiększyć doskonałość operacyjną i wydajność aplikacji internetowej. Aby zaimplementować monitorowanie, wykonaj następujące zalecenia:

  • Zbieranie danych telemetrycznych aplikacji. Użyj autoinstrumentacji w usłudze Azure Application Insights, aby zbierać dane telemetryczne aplikacji, takie jak przepływność żądań, średni czas trwania żądania, błędy i monitorowanie zależności. Nie musisz wprowadzać żadnych zmian w kodzie, aby korzystać z tej telemetrii.

    Implementacja referencyjna używa AddApplicationInsightsTelemetry z pakietu NuGet Microsoft.ApplicationInsights.AspNetCore w celu włączenia zbierania danych telemetrycznych:

    public void ConfigureServices(IServiceCollection services)
    {
       ...
       services.AddApplicationInsightsTelemetry(Configuration["App:Api:ApplicationInsights:ConnectionString"]);
       ...
    }
    
  • Tworzenie niestandardowych metryk aplikacji. Użyj instrumentacji opartej na kodzie na potrzeby telemetrii aplikacji niestandardowej. Dodaj zestaw SDK usługi Application Insights do kodu i użyj interfejsu API usługi Application Insights.

    Implementacja referencyjna zbiera dane telemetryczne dotyczące zdarzeń związanych z działaniem koszyka. this.telemetryClient.TrackEvent zlicza bilety dodane do koszyka. Dostarcza nazwę zdarzenia (AddToCart) i określa słownik, który ma concertId i count:

    this.telemetryClient.TrackEvent("AddToCart", new Dictionary<string, string> {
        { "ConcertId", concertId.ToString() },
        { "Count", count.ToString() }
    });
    
  • Monitorowanie platformy. Włącz diagnostykę dla wszystkich obsługiwanych usług. Wyślij diagnostykę do tego samego miejsca docelowego co dzienniki aplikacji w celu korelacji. Usługi platformy Azure tworzą dzienniki platformy automatycznie, ale przechowują je tylko po włączeniu diagnostyki. Włącz ustawienia diagnostyczne dla każdej usługi obsługującej diagnostykę.

Wdrażanie implementacji referencyjnej

Implementacja referencyjna prowadzi deweloperów przez symulowaną migrację z lokalnej aplikacji ASP.NET na platformę Azure, podkreślając zmiany, które są niezbędne w fazie początkowej wdrażania. W tym przykładzie użyto aplikacji do obsługi biletów koncertowych dla fikcyjnej firmy Relecloud, która sprzedaje bilety za pośrednictwem lokalnej aplikacji internetowej. Usługa Relecloud wyznaczyła następujące cele dla swojej aplikacji internetowej:

  • Implementowanie tanich, wysokowartych zmian kodu.
  • Osiągnij cel slo 99,9%.
  • Wdrażanie praktyk metodyki DevOps.
  • Tworzenie środowisk zoptymalizowanych pod kątem kosztów.
  • Zwiększ niezawodność i bezpieczeństwo.

Relecloud ustaliła, że ich infrastruktura lokalna nie była opłacalnym rozwiązaniem do realizacji tych celów. Zdecydowali, że migracja aplikacji internetowej na platformę Azure była najbardziej opłacalnym sposobem osiągnięcia ich bezpośrednich i przyszłych celów. Poniższa architektura reprezentuje stan końcowy implementacji wzorca Reliable Web App w usłudze Relecloud.

Diagram przedstawiający architekturę implementacji referencyjnej. Rysunek 4. Architektura implementacji referencyjnej. Pobierz plik programu Visio tej architektury.