Samouczek: tworzenie aplikacji o wysokiej dostępności za pomocą usługi Blob Storage

Niniejszy samouczek jest pierwszą częścią serii. Z tego samouczka dowiesz się, jak uzyskać wysoką dostępność danych aplikacji na platformie Azure.

Po ukończeniu tego samouczka będziesz mieć aplikację konsolową, która przekazuje i pobiera obiekt blob z konta magazynu geograficznie nadmiarowego (RA-GZRS) dostępnego do odczytu.

Nadmiarowość geograficzna w usłudze Azure Storage replikuje transakcje asynchronicznie z regionu podstawowego do regionu pomocniczego, który jest oddalony o setki kilometrów. Ten proces replikacji gwarantuje, że dane w regionie pomocniczym ostatecznie uzyskają spójność. Aplikacja konsolowa używa wzorca wyłącznika, aby określić punkt końcowy do nawiązania połączenia, automatycznie przełączając się między punktami końcowymi w miarę symulowania awarii i odzyskiwania.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Część pierwsza serii zawiera informacje na temat wykonywania następujących czynności:

  • Tworzenie konta magazynu
  • Ustawianie parametrów połączenia
  • Uruchamianie aplikacji konsolowej

Wymagania wstępne

W celu ukończenia tego samouczka:

  • Zainstaluj program Visual Studio 2022 z pakietem roboczym Programowanie na platformie Azure.

    Screenshot of Visual Studio Azure development workload (under Web & Cloud).

Zaloguj się do witryny Azure Portal.

Zaloguj się w witrynie Azure Portal.

Tworzenie konta magazynu

Konto magazynu zapewnia unikatową przestrzeń nazw do przechowywania i umożliwiania dostępu do obiektów danych usługi Azure Storage.

Wykonaj następujące kroki, aby utworzyć konto magazynu geograficznie nadmiarowe (RA-GZRS) z dostępem do odczytu:

  1. Wybierz przycisk Utwórz zasób w witrynie Azure Portal.

  2. Wybierz pozycję Konto magazynu — obiekt blob, plik, tabela, kolejka na stronie Nowy .

  3. Wypełnij formularz konta magazynu przy użyciu następujących informacji zgodnie z ilustracją i wybierz pozycję Utwórz:

    Ustawienie Przykładowa wartość opis
    Subskrypcja Moja subskrypcja Aby uzyskać szczegółowe informacje o subskrypcjach, zobacz Subskrypcje.
    ResourceGroup myResourceGroup Prawidłowe nazwy grup zasobów opisano w artykule Naming rules and restrictions (Reguły i ograniczenia nazewnictwa).
    Nazwa/nazwisko mystorageaccount Unikatowa nazwa konta magazynu.
    Lokalizacja Wschodnie stany USA Wybierz lokalizację.
    Wydajność Standardowa Wydajność Standardowa jest dobrym rozwiązaniem dla przykładowego scenariusza.
    Rodzaj konta StorageV2 Zaleca się używanie konta magazynu ogólnego przeznaczenia w wersji 2. Aby uzyskać więcej informacji na temat typów kont usługi Azure Storage, zobacz Omówienie konta magazynu.
    Replikacja Magazyn geograficznie nadmiarowy dostępny do odczytu (RA-GZRS) Region podstawowy jest strefowo nadmiarowy i jest replikowany do regionu pomocniczego z włączonym dostępem do odczytu do regionu pomocniczego.
    Warstwa dostępu Gorąca Użyj warstwy Gorąca dla często używanych danych.

    create storage account

Pobierz przykład

Pobierz przykładowy projekt, wyodrębnij (rozpakuj) plik storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip, a następnie przejdź do folderu v12, aby znaleźć pliki projektu.

Możesz również użyć narzędzia git , aby sklonować repozytorium do lokalnego środowiska deweloperskiego. Przykładowy projekt w folderze v12 zawiera aplikację konsolową.

git clone https://github.com/Azure-Samples/storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.git

Konfigurowanie przykładu

Żądania aplikacji do usługi Azure Blob Storage muszą być autoryzowane. Użycie klasy udostępnionej DefaultAzureCredential przez bibliotekę Azure.Identity klienta jest zalecanym podejściem do nawiązywania połączenia z usługami platformy Azure w kodzie. Przykładowy kod platformy .NET w wersji 12 korzysta z tego podejścia. Aby dowiedzieć się więcej, zobacz Omówienie domyślneAzureCredential.

Możesz również autoryzować żądania do usługi Azure Blob Storage przy użyciu klucza dostępu do konta. Należy jednak zachować ostrożność przy zachowaniu ostrożności w celu ochrony kluczy dostępu przed uwidocznieniem.

Uruchamianie aplikacji konsolowej

W programie Visual Studio naciśnij klawisz F5 lub wybierz pozycję Uruchom, aby rozpocząć debugowanie aplikacji. Program Visual Studio automatycznie przywraca brakujące pakiety NuGet, jeśli jest skonfigurowane przywracanie pakietów. Aby dowiedzieć się więcej, zobacz Instalowanie i ponowne instalowanie pakietów przy użyciu przywracania pakietów.

Po uruchomieniu okna konsoli aplikacja uzyska stan regionu pomocniczego i zapisze te informacje w konsoli programu . Następnie aplikacja utworzy kontener na koncie magazynu i przekaże obiekt blob do kontenera. Po przekazaniu obiektu blob aplikacja będzie stale sprawdzać, czy obiekt blob został zreplikowany do regionu pomocniczego. Ta kontrola jest kontynuowana do momentu zreplikowania obiektu blob lub osiągnięcia maksymalnej liczby iteracji zgodnie z definicją warunków pętli.

Następnie aplikacja wprowadza pętlę z monitem o pobranie obiektu blob, początkowo odczytu z magazynu podstawowego. Naciśnij dowolny klawisz, aby pobrać obiekt blob. Jeśli w regionie podstawowym występuje błąd z możliwością ponawiania próby, zostanie wykonana ponowna próba wykonania żądania odczytu względem pomocniczego punktu końcowego regionu. Dane wyjściowe konsoli będą wyświetlane po przełączeniu regionu do pomocniczego.

Screenshot of Console output for secondary request.

Aby zakończyć pętlę i wyczyścić zasoby, naciśnij Esc klawisz w wierszu polecenia pobierania obiektu blob.

Omówienie przykładowego kodu

Przykład tworzy BlobServiceClient obiekt skonfigurowany z opcjami ponawiania prób i pomocniczym punktem końcowym regionu. Ta konfiguracja umożliwia aplikacji automatyczne przełączenie się do regionu pomocniczego, jeśli żądanie zakończy się niepowodzeniem w punkcie końcowym regionu podstawowego.

string accountName = "<YOURSTORAGEACCOUNTNAME>";
Uri primaryAccountUri = new Uri($"https://{accountName}.blob.core.windows.net/");
Uri secondaryAccountUri = new Uri($"https://{accountName}-secondary.blob.core.windows.net/");

// Provide the client configuration options for connecting to Azure Blob storage
BlobClientOptions blobClientOptions = new BlobClientOptions()
{
    Retry = {
        // The delay between retry attempts for a fixed approach or the delay
        // on which to base calculations for a backoff-based approach
        Delay = TimeSpan.FromSeconds(2),

        // The maximum number of retry attempts before giving up
        MaxRetries = 5,

        // The approach to use for calculating retry delays
        Mode = RetryMode.Exponential,

        // The maximum permissible delay between retry attempts
        MaxDelay = TimeSpan.FromSeconds(10)
    },

    // Secondary region endpoint
    GeoRedundantSecondaryUri = secondaryAccountUri
};

// Create a BlobServiceClient object using the configuration options above
BlobServiceClient blobServiceClient = new BlobServiceClient(primaryAccountUri, new DefaultAzureCredential(), blobClientOptions);

Gdy właściwość jest ustawiona w BlobClientOptionselemecie GeoRedundantSecondaryUri , ponawia próby dla żądań GET lub HEAD przełączą się w celu użycia pomocniczego punktu końcowego. Kolejne ponawianie prób będzie się zmieniać między podstawowym i pomocniczym punktem końcowym. Jeśli jednak stan odpowiedzi z pomocniczego identyfikatora URI to 404, kolejne próby dla żądania nie będą już używać pomocniczego identyfikatora URI, ponieważ ten kod błędu wskazuje, że zasób nie został zreplikowany do regionu pomocniczego.

Następne kroki

W części jednej z serii omówiono udostępnianie aplikacji o wysokiej dostępności przy użyciu kont magazynu RA-GZRS.

Przejdź do drugiej części serii, aby dowiedzieć się, jak symulować awarię i wymusić korzystanie z pomocniczego punktu końcowego RA-GZRS.

Zasoby

Aby uzyskać powiązane przykłady kodu korzystające z przestarzałych zestawów SDK, zobacz następujące zasoby: