Udostępnij za pośrednictwem


Implementowanie zasad ponawiania za pomocą platformy .NET

Każda aplikacja, która działa w chmurze lub komunikuje się z usługami zdalnymi i zasobami, musi mieć możliwość obsługi błędów przejściowych. Te aplikacje często występują błędy z powodu chwilowej utraty łączności sieciowej, przekroczenia limitu czasu żądania, gdy usługa lub zasób jest zajęta lub inne czynniki. Deweloperzy powinni tworzyć aplikacje do obsługi błędów przejściowych w sposób niewidoczny, aby poprawić stabilność i odporność.

Z tego artykułu dowiesz się, jak używać biblioteki klienta usługi Azure Storage dla platformy .NET do konfigurowania zasad ponawiania dla aplikacji łączącej się z usługą Azure Blob Storage. Zasady ponawiania prób definiują sposób obsługi żądań niepowodzeń przez aplikację i powinny być zawsze dostosowane do wymagań biznesowych aplikacji i charakteru awarii.

Konfigurowanie opcji ponawiania prób

Zasady ponawiania prób dla usługi Blob Storage są konfigurowane programowo, co zapewnia kontrolę nad sposobem stosowania opcji ponawiania prób do różnych żądań obsługi i scenariuszy. Na przykład aplikacja internetowa wydająca żądania na podstawie interakcji użytkownika może implementować zasady z mniejszą liczbą ponownych prób i krótszymi opóźnieniami w celu zwiększenia czasu reakcji i powiadamiania użytkownika o wystąpieniu błędu. Alternatywnie aplikacja lub składnik uruchamiając żądania wsadowe w tle może zwiększyć liczbę ponownych prób i użyć strategii wycofywania wykładniczego, aby umożliwić pomyślne zakończenie żądania.

W poniższej tabeli wymieniono właściwości klasy RetryOptions wraz z typem, krótkim opisem i wartością domyślną, jeśli nie wprowadzisz żadnych zmian. Należy aktywnie dostrajać wartości tych właściwości, aby spełniały potrzeby aplikacji.

Właściwość Type Opis Domyślna wartość
Delay Przedział czasu Opóźnienie między próbami ponawiania próby dla stałego podejścia lub opóźnieniem, na którym mają być oparte obliczenia na podstawie podejścia opartego na wycofywaniu. Jeśli usługa udostępnia nagłówek odpowiedzi Po ponowieniu próby, następne ponawianie zostanie opóźnione o czas trwania określony przez wartość nagłówka. 0,8 sekundy
MaxDelay Przedział czasu Maksymalne dopuszczalne opóźnienie między próbami ponawiania próby, gdy usługa nie udostępnia nagłówka odpowiedzi Ponów próbę po. Jeśli usługa udostępnia nagłówek odpowiedzi Po ponowieniu próby, następne ponawianie zostanie opóźnione o czas trwania określony przez wartość nagłówka. 1 minuta
Maksymalna liczba ponownych prób int Maksymalna liczba ponownych prób przed rezygnacją. 5
Tryb RetryMode Podejście do obliczania opóźnień ponawiania prób. Wykładniczy
NetworkTimeout Przedział czasu Limit czasu zastosowany do pojedynczej operacji sieciowej. 100 sekund

W tym przykładzie kodu dla usługi Blob Storage skonfigurujemy opcje ponawiania próby we Retry właściwości klasy BlobClientOptions . Następnie utworzymy obiekt klienta dla usługi blob przy użyciu opcji ponawiania prób.

// Provide the client configuration options for connecting to Azure Blob Storage
BlobClientOptions blobOptions = new BlobClientOptions()
{
    Retry = {
        Delay = TimeSpan.FromSeconds(2),
        MaxRetries = 5,
        Mode = RetryMode.Exponential,
        MaxDelay = TimeSpan.FromSeconds(10),
        NetworkTimeout = TimeSpan.FromSeconds(100)
    },
};

BlobServiceClient blobServiceClient = new BlobServiceClient(
    accountUri,
    new DefaultAzureCredential(),
    blobOptions);

W tym przykładzie BlobServiceClient każde żądanie obsługi wystawione z obiektu używa opcji ponawiania zgodnie z definicją BlobClientOptions w obiekcie. Można skonfigurować różne strategie ponawiania prób dla klientów usług na podstawie potrzeb aplikacji.

Używanie nadmiarowości geograficznej w celu zwiększenia odporności aplikacji

Jeśli aplikacja wymaga wysokiej dostępności i większej odporności na awarie, możesz skorzystać z opcji nadmiarowości geograficznej usługi Azure Storage w ramach zasad ponawiania prób. Konta magazynu skonfigurowane na potrzeby replikacji geograficznie nadmiarowej są synchronicznie replikowane w regionie podstawowym i asynchronicznie replikowane do regionu pomocniczego, który znajduje się setki kilometrów dalej.

Usługa Azure Storage oferuje dwie opcje replikacji geograficznie nadmiarowej: magazyn geograficznie nadmiarowy (GRS) i magazyn geograficznie nadmiarowy (GZRS). Oprócz włączenia nadmiarowości geograficznej dla konta magazynu należy również skonfigurować dostęp do odczytu do danych w regionie pomocniczym. Aby dowiedzieć się, jak zmienić opcje replikacji dla konta magazynu, zobacz Zmienianie sposobu replikacji konta magazynu.

W tym przykładzie ustawiliśmy właściwość GeoRedundantSecondaryUri w pliku BlobClientOptions. Jeśli ta właściwość jest ustawiona, pomocniczy identyfikator URI jest używany dla GET żądań lub HEAD podczas ponownych prób. Jeśli stan odpowiedzi z pomocniczego identyfikatora URI to 404, kolejne próby dla żądania nie będą ponownie używać pomocniczego identyfikatora URI, ponieważ ten kod stanu wskazuje, że zasób nie został jeszcze rozpropagowany. W przeciwnym razie kolejne próby są ponawiane między podstawowym i pomocniczym identyfikatorem URI.

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

// Provide the client configuration options for connecting to Azure Blob Storage
BlobClientOptions blobOptionsGRS = new BlobClientOptions()
{
    Retry = {
        Delay = TimeSpan.FromSeconds(2),
        MaxRetries = 5,
        Mode = RetryMode.Exponential,
        MaxDelay = TimeSpan.FromSeconds(10),
        NetworkTimeout = TimeSpan.FromSeconds(100)
    },

    // Set the secondary storage URI
    GeoRedundantSecondaryUri = secondaryAccountUri
};

BlobServiceClient blobServiceClient = new BlobServiceClient(
    accountUri,
    new DefaultAzureCredential(),
    blobOptionsGRS);

Aplikacje korzystające z nadmiarowości geograficznej muszą pamiętać o pewnych konkretnych zagadnieniach projektowych. Aby dowiedzieć się więcej, zobacz Projektowanie aplikacji o wysokiej dostępności przy użyciu nadmiarowości geograficznej.

Następne kroki

  • Ten artykuł jest częścią przewodnika dla deweloperów usługi Blob Storage dla platformy .NET. Zobacz pełną listę artykułów z przewodnika dla deweloperów na stronie Tworzenie aplikacji.
  • Aby uzyskać wskazówki dotyczące architektury i ogólne najlepsze rozwiązania dotyczące zasad ponawiania prób, zobacz Obsługa błędów przejściowych.
  • Aby uzyskać wskazówki dotyczące implementowania wzorca ponawiania prób dla błędów przejściowych, zobacz Wzorzec ponawiania prób.