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. Ten wzorzec przedstawia sposób modyfikowania (replatformowania) aplikacji internetowych na potrzeby migracji do chmury. Oferuje on normatywne wskazówki dotyczące architektury, kodu i konfiguracji dostosowane do zasad dobrze zaprojektowanej struktury.

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 do chmury. Koncentruje się on na minimalnych aktualizacjach kodu, które należy wprowadzić w chmurze. Poniższe wskazówki korzystają z implementacji referencyjnej jako przykładu w całym środowisku i są zgodne z przeplatformową podróż fikcyjnej firmy Relecloud, aby zapewnić kontekst biznesowy podróży. Przed zaimplementowaniem wzorca Reliable Web App 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 GitHubIstnieje implementacja referencyjna (przykład) wzorca niezawodnej aplikacji internetowej. Reprezentuje ona 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 w celu zaimplementowania wzorca niezawodnej aplikacji internetowej. Skorzystaj z poniższych linków, aby przejść do konkretnych potrzebnych wskazówek:

  • Kontekst biznesowy: dostosuj 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 prób, wyłącznik i wzorce odkładania do pamięci podręcznej
  • Wskazówki dotyczące konfiguracji: Konfigurowanie uwierzytelniania i autoryzacji, tożsamości zarządzanych, środowisk chronionych prawami, infrastruktury jako kodu i monitorowania.

Kontekst biznesowy

Pierwszym krokiem ponownego tworzenia aplikacji internetowej jest zdefiniowanie celów biznesowych. Należy określić natychmiastowe cele, takie jak cele poziomu usług 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ągnięcie celu poziomu usług (SLO) w wysokości 99,9%
  • Wdrażanie praktyk metodyki DevOps
  • Tworzenie środowisk zoptymalizowanych pod kątem kosztów
  • Zwiększanie niezawodności i zabezpieczeń

Infrastruktura lokalna firmy Relecloud nie była opłacalnym rozwiązaniem umożliwiającym osiągnięcie tych celów. Dlatego zdecydowali, że migracja aplikacji internetowej na platformę Azure była najbardziej opłacalnym sposobem osiągnięcia ich natychmiastowych 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 ochrony i kierowania 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 zrozumieć aplikację internetową.

Diagram przedstawiający podstawowe elementy architektury wzorca Reliable Web App.

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 (RPO) 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. Dwa 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 bezpiecznie (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 posiadanie wielu sieci wirtualnych, użyj topologii sieci piasty i szprych. Zapewnia ona korzyści związane z kosztami, zarządzaniem i zabezpieczeniami dzięki opcjom łą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. 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 przejściem do chmury aplikacja internetowa usługi Relecloud była lokalną, monolityczną aplikacją ASP.NET. Uruchomiono ją na dwóch maszynach wirtualnych i miała bazę danych programu Microsoft SQL Server. Aplikacja internetowa cierpiała na typowe wyzwania związane 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ę aplikacja systemu Azure 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 na poziomie 99,9%.
    • Mniejsze obciążenie związane 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 wersję platformy .NET zapisaną w aplikacji.
    • Możliwości 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.
    • Skalowanie automatyczne: 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: umożliwia skalowanie 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: 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. Aplikacja internetowa firmy Relecloud używa lokalnego programu SQL Server. Dlatego 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ść umowy SLA i wielu regionów. Może obsługiwać duże obciążenie użytkownika.
    • Mniejsze obciążenie związane z zarządzaniem: zapewnia 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 istniejące procedury składowane, funkcje i widoki.
    • Odporność: obsługuje kopie zapasowe i przywracanie do punktu w czasie.
    • Wiedza i minimalna praca rework: usługa SQL Database wykorzystuje wiedzę i wymaga minimalnej pracy do wdrożenia.
  • Monitorowanie wydajności aplikacji: użyj usługi Application Insights do analizowania danych telemetrycznych w 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.
    • Monitorowanie: 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.
  • Pamięć podręczna: wybierz, czy chcesz dodać pamięć podręczną do architektury aplikacji internetowej. Azure Cache for Redis to podstawowe rozwiązanie 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 szczegółów koncertów i miejsca, a także dodała usługę Azure Cache for Redis z następujących powodów:

    • Mniejsze obciążenie związane z zarządzaniem: jest to w pełni zarządzana usługa.
    • Szybkość i wolumin: ma wysoką przepływność danych i odczyty o małych opóźnieniach 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 inne niż 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ługi Azure Front Door, aplikacja systemu Azure Gateway lub w oparciu o architekturę i wymagania 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. Usługa Relecloud potrzebowała wieloregionowej aplikacji internetowej, aby spełnić cel SLO na 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 zaporą aplikacji internetowej platformy Azure.
    • 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 Front Door, jak i wzorców zabezpieczeń. Możesz skonfigurować alerty zintegrowane z usługą Azure Monitor. Umożliwia aplikacji rejestrowanie każdego żądania i nieudanych sond kondycji.
    • Ochrona przed atakami DDoS: ma wbudowaną ochronę przed atakami DDoS warstwy 3-4.
    • Sieć dostarczania zawartości: umieszcza 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ła usługi Azure Web Application Firewall z następujących powodów:

    • Ochrona globalna: zapewnia lepszą globalną ochronę aplikacji internetowych bez utraty 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 dział IT.
    • Łatwość użycia: 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 brak w środowisku produkcyjnym bez ponownego wdrażania aplikacji.
    • Obsługuje potok Git: źródło prawdy dla danych konfiguracji wymaganych do repozytorium Git. Potok potrzebny do zaktualizowania danych w centralnym magazynie konfiguracji.
    • Obsługuje tożsamości zarządzane: 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ę. Tożsamości zarządzane są preferowanym rozwiązaniem do nawiązywania połączenia z zasobami platformy Azure, ale 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: ułatwia inspekcję dostępu i generuje alerty podczas zmiany przechowywanych wpisów tajnych.
    • Integracja: zapewnia natywną integrację z magazynem konfiguracji platformy Azure (App Configuration) i platformą hostingu internetowego (App Service).
  • Rozwiązanie magazynu: zapoznaj się z opcjami usługi Azure Storage, aby 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 :

    • Bezpieczny dostęp: 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: szyfruje dane magazynowane i przesyłane.
    • Odporność: 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ń typu platforma jako usługa 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:

    • Ulepszona komunikacja z zabezpieczeniami: 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 w celu minimalnej zmiany.
  • Zabezpieczenia sieciowe: użyj usługi Azure Firewall , aby kontrolować ruch przychodzący i wychodzący na poziomie sieci. Usługa Azure Bastion umożliwia bezpieczne łączenie się z maszynami wirtualnymi 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 zabezpieczania wdrożeń z hosta szybkiego dostępu w podsieci DevOps.

Wskazówki dotyczące kodu

Aby pomyślnie przenieść aplikację internetową do chmury, musisz zaktualizować kod aplikacji internetowej przy użyciu wzorca ponawiania prób, wzorca wyłącznika i wzorca projektowania z odkładania do pamięci podręcznej.

Diagram przedstawiający rolę wzorców projektowych w podstawowej niezawodnej architekturze aplikacji internetowej.

Rysunek 3. Rola wzorców projektowych.

Każdy wzorzec projektu zapewnia korzyści projektowe obciążeń, które są zgodne z jednym z kolejnych filarów dobrze zaprojektowanej struktury. Oto omówienie wzorców, które należy zaimplementować:

  1. Wzorzec ponawiania: wzorzec ponawiania 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. Wzorzec odkładania do pamięci podręcznej: wzorzec z odkładania do pamięci podręcznej jest dodany i pobierany z pamięci podręcznej częściej niż magazyn 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
Wzorzec odkładania do pamięci podręcznej 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óźnień żądań i liczbę prób przed przekazaniem błędu.

  • Użyj wbudowanych mechanizmów ponawiania prób Użyj wbudowanego mechanizmu ponawiania prób, który większość usług platformy Azure musi przyspieszyć implementację. Na przykład implementacja referencyjna używa odporności połączenia w programie Entity Framework Core , aby zastosować wzorzec ponawiania prób w żądaniach do usługi Azure SQL Database (zobacz następujący kod).

    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, taką jak Polly lub Microsoft.Extensions.Http.Resilience. Te biblioteki oferują 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 narzędzia Polly do wymuszania wzorca ponawiania za każdym razem, gdy kod tworzy obiekt, który wywołuje IConcertSearchService obiekt (zobacz następujący kod).

    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 unika marnowania 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 HandleTransientHttpError logiki do wykrywania żądań HTTP, które można bezpiecznie ponowić, ale ogranicza liczbę zagregowanych błędów w określonym przedziale czasu (zobacz następujący kod).

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, zwiększając 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, ponieważ poprawia wydajność dzięki zmniejszeniu liczby zapytań bazy danych i umożliwia sesje nieszminujące sticky, dzięki czemu moduł równoważenia obciążenia może równomiernie dystrybuować ruch. Na przykład implementacja referencyjna używa rozproszonej pamięci podręcznej Redis Cache. Metoda AddAzureCacheForRedis konfiguruje aplikację do korzystania z usługi Azure Cache for Redis (zobacz następujący kod).

    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 Odkładanie do pamięci podręcznej na 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 z odkładaniem do pamięci podręcznej. 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 Cache z usługi SQL Database i wypełnia pamięć podręczną najnowszymi danymi koncertów (zobacz następujący kod).

    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. Określ optymalną częstotliwość odświeżania na podstawie zmienności danych i potrzeb użytkowników. Dzięki temu aplikacja korzysta ze wzorca z odkładania do pamięci podręcznej w celu zapewnienia szybkiego dostępu i bieżących informacji. Na przykład implementacja referencyjna buforuje dane tylko przez jedną godzinę i używa CreateConcertAsync metody do wyczyszczenia klucza pamięci podręcznej po zmianie danych (zobacz następujący kod).

    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. Na przykład implementacja referencyjna używa UpdateConcertAsync metody w celu zachowania spójności danych w pamięci podręcznej (zobacz następujący kod).

    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
Odpowiednie środowiska rozmiaru 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ą platformy Microsoft 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.

  • Tworzenie rejestracji aplikacji. Identyfikator Entra firmy Microsoft wymaga rejestracji aplikacji w dzierżawie podstawowej. Rejestracja aplikacji gwarantuje, ż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, zapisując minimalny lub żaden kod w aplikacji internetowej.

  • Wymuszanie autoryzacji w aplikacji. Użyj kontroli dostępu opartej na rolach (RBAC), 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, takimi jak sygnatury dostępu współdzielonego (SAS) . Użyj usług SAS delegowania użytkowników, aby zmaksymalizować zabezpieczenia 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 określa, do jakich tożsamości zasobów platformy Azure mogą uzyskiwać dostęp, co mogą robić z tymi zasobami i do jakich obszarów 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. Dzięki dostępowi just in time tożsamości użytkowników otrzymują tymczasowe uprawnienia do wykonywania zadań uprzywilejowanych.

Implementowanie tożsamości zarządzanych

Użyj tożsamości zarządzanych dla wszystkich usług platformy Azure, które obsługują tożsamości zarządzane. Tożsamość zarządzana umożliwia zasobom platformy Azure (tożsamościom obciążeń) uwierzytelnianie i interakcję z innymi usługami platformy Azure bez zarządzania poświadczeniami. Hybrydowe i starsze systemy mogą zapewnić lokalne rozwiązania uwierzytelniania w celu uproszczenia migracji, ale powinny przejść do tożsamości zarządzanych tak szybko, jak to możliwe. 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ń. Ta konfiguracja jest wydajniejsza 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 kontroli dostępu opartej na rolach 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.

  • Zabezpieczanie 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.

Na przykład implementacja referencyjna używa argumentu Authentication w bazie danych SQL parametry połączenia, 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 elementu , aby umożliwić internetowym interfejsowi API nawiązywanie połączenia z usługą Key Vault przy użyciu tożsamości zarządzanej (zobacz następujący kod).

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

Odpowiednie środowiska rozmiaru

Użyj warstw wydajności (SKU) usług platformy Azure, które spełniają potrzeby każdego środowiska bez nadmiaru. Aby uzyskać odpowiedni rozmiar środowisk, 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 w środowiskach 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ą.

  • Optymalizacja kosztów w środowiskach przedprodukcyjnych. Środowiska przedprodukcyjne powinny korzystać z zasobów o niższych kosztach , wyłączać niepotrzebne usługi i stosować rabaty, takie jak cennik tworzenia i testowania platformy Azure. Upewnij się, że środowiska przedprodukcyjne są wystarczająco podobne do środowiska produkcyjnego , aby uniknąć wprowadzania zagrożeń. Ta równowaga zapewnia, że testowanie pozostaje skuteczne bez ponoszenia niepotrzebnych kosztów.

  • Zdefiniuj jednostki SKU przy użyciu infrastruktury jako kodu (IaC). 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 zapewnia, że aplikacja internetowa pozostaje odporna, elastyczna i wydajna obsługa dynamicznych obciążeń. 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. Zacznij od 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 w celu wyzwolenia 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. Wdrażanie infrastruktury jako kodu za pośrednictwem potoków ciągłej integracji i ciągłego dostarczania (CI/CD). Platforma Azure ma 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. Skorzystaj z usługi Azure Pipelines, jeśli pracujesz z usługą Azure DevOps lub GitHub Actions dla projektów usługi 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.

  • Przyjęcie makiety platformy. Do testowania z udziałem zewnętrznych punktów końcowych użyj 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ń. Stosowanie statycznych testów zabezpieczeń aplikacji (SAST) w celu znalezienia błędów zabezpieczeń i 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 są łatwo zintegrowane 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 aplikacja systemu Azure Insights, aby zbierać dane telemetryczne aplikacji, takie jak przepływność żądań, średni czas trwania żądania, błędy i monitorowanie zależności, bez zmian w kodzie.

    Implementacja referencyjna używa pakietu NuGet Microsoft.ApplicationInsights.AspNetCore do włączenia zbierania danych telemetrycznych (zobacz następujący kod).AddApplicationInsightsTelemetry

    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 element i count (zobacz następujący kod).

    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 i wyślij diagnostykę do tego samego miejsca docelowego co dzienniki aplikacji na potrzeby 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 niezbędne zmiany w początkowej fazie 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 zmian kodu o wysokiej wartości
  • Osiągnięcie celu poziomu usług (SLO) w wysokości 99,9%
  • Wdrażanie praktyk metodyki DevOps
  • Tworzenie środowisk zoptymalizowanych pod kątem kosztów
  • Zwiększanie niezawodności i bezpieczeństwa

Relecloud ustaliła, że ich infrastruktura lokalna nie była opłacalnym rozwiązaniem, które spełnia te cele. Zdecydowali, że migracja aplikacji internetowej CAMS na platformę Azure była najbardziej opłacalnym sposobem osiągnięcia ich natychmiastowych i przyszłych celów. Poniższa architektura reprezentuje stan końcowy implementacji wzorca niezawodnej aplikacji internetowej firmy Relecloud.

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