Självstudie: Skapa ett program med hög tillgänglighet med Blob Storage

Den här självstudien ingår i en serie. I den lär du dig att ge programdata hög tillgänglighet i Azure.

När du har slutfört den här självstudien har du ett konsolprogram som laddar upp och hämtar en blob från ett ra-GZRS-lagringskonto (read-access geo-zone-redundant ).

Geo-redundans i Azure Storage replikerar transaktioner asynkront från en primär region till en sekundär region som ligger hundratals mil bort. Replikeringsprocessen garanterar att data i den sekundära regionen blir konsekventa. Konsolprogrammet använder kretsbrytarmönstret för att avgöra vilken slutpunkt som ska anslutas till, vilket automatiskt växlar mellan slutpunkter när fel och återställningar simuleras.

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

I del ett i den här serien lärde du dig att:

  • Skapa ett lagringskonto
  • Ange anslutningssträngen
  • Kör konsolprogrammet

Förutsättningar

För att slutföra den här kursen behöver du:

Logga in på Azure-portalen

Logga in på Azure-portalen.

Skapa ett lagringskonto

Ett lagringskonto tillhandahåller en unik namnrymd där du kan lagra och få åtkomst till dina Azure-lagringdataobjekt.

Följ de här stegen för att skapa ett ra-GZRS-lagringskonto (read-access geo-zone-redundant):

  1. Välj knappen Skapa en resurs i Azure-portalen.

  2. Välj Lagringskonto – blob, fil, tabell, kö från sidan Ny .

  3. Fyll i formuläret för lagringskontot med följande information (se bilden nedan) och välj Skapa:

    Inställning Exempelvärde beskrivning
    Abonnemang Min prenumeration Mer information om dina prenumerationer finns i Prenumerationer.
    ResourceGroup myResourceGroup Giltiga resursgruppnamn finns i Namngivningsregler och begränsningar.
    Namn mystorageaccount Ett unikt namn för ditt lagringskonto.
    Plats USA, östra Välj en plats.
    Prestanda Standard Standardprestanda är ett bra alternativ för exempelscenariot.
    Typ av konto StorageV2 Vi rekommenderar att du använder ett v2-lagringskonto för generell användning. Mer information om typer av Azure-lagringskonton finns i Översikt över lagringskonto.
    Replikering Geozonredundant lagring med läsåtkomst (RA-GZRS) Den primära regionen är zonredundant och replikeras till en sekundär region med läsbehörighet till den sekundära regionen aktiverad.
    Åtkomstnivå Frekvent Använd frekvent nivå för data som används ofta.

    skapa lagringskonto

Hämta exemplet

Ladda ned exempelprojektet, extrahera (packa upp) storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip-filen och gå sedan till mappen v12 för att hitta projektfilerna.

Du kan också använda git för att klona lagringsplatsen till din lokala utvecklingsmiljö. Exempelprojektet i mappen v12 innehåller ett konsolprogram.

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

Konfigurera exemplet

Programbegäranden till Azure Blob Storage måste vara auktoriserade. Att använda klassen DefaultAzureCredential som tillhandahålls av Azure.Identity klientbiblioteket är den rekommenderade metoden för att ansluta till Azure-tjänster i koden. Kodexemplet .NET v12 använder den här metoden. Mer information finns i Översikt över DefaultAzureCredential.

Du kan också auktorisera begäranden till Azure Blob Storage med hjälp av kontoåtkomstnyckeln. Den här metoden bör dock användas med försiktighet för att skydda åtkomstnycklar från att exponeras.

Kör konsolprogrammet

I Visual Studio trycker du på F5 eller väljer Start för att starta felsökning av programmet. Visual Studio återställer automatiskt saknade NuGet-paket om paketåterställningen har konfigurerats. Mer information finns i Installera och installera om paket med paketåterställning .

När konsolfönstret startas får appen statusen för den sekundära regionen och skriver informationen till konsolen. Sedan skapar appen en container i lagringskontot och laddar upp en blob till containern. När bloben har laddats upp kontrollerar appen kontinuerligt om bloben har replikerats till den sekundära regionen. Den här kontrollen fortsätter tills bloben har replikerats, eller så når vi det maximala antalet iterationer som definieras av loopvillkoren.

Därefter anger programmet en loop med en uppmaning om att ladda ned bloben, som först läser från den primära lagringen. Tryck på valfri tangent för att ladda ned bloben. Om det uppstår ett nytt försök att läsa från den primära regionen utförs ett nytt försök av läsbegäran mot slutpunkten för den sekundära regionen. Konsolutdata visas när regionen växlar till sekundär.

Skärmbild av konsolutdata för sekundär begäran.

Om du vill avsluta loopen och rensa resurser trycker du Esc på nyckeln i kommandotolken för blobnedladdning.

Förstå exempelkoden

Exemplet skapar ett BlobServiceClient objekt som konfigurerats med återförsöksalternativ och en sekundär regionsslutpunkt. Med den här konfigurationen kan programmet automatiskt växla till den sekundära regionen om begäran misslyckas på slutpunkten för den primära regionen.

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);

När egenskapen GeoRedundantSecondaryUri anges i BlobClientOptionsväxlar återförsök för GET- eller HEAD-begäranden till att använda den sekundära slutpunkten. Efterföljande återförsök växlar mellan den primära och den sekundära slutpunkten. Men om statusen för svaret från den sekundära URI:n är 404 kommer efterföljande återförsök för begäran inte längre att använda den sekundära URI:n eftersom den här felkoden anger att resursen inte har replikerats till den sekundära regionen.

Nästa steg

I del ett av serien lärde du dig att göra ett program mycket tillgängligt med RA-GZRS-lagringskonton.

Gå vidare till del två i serien för att lära dig hur du simulerar ett fel och tvingar ditt program att använda den sekundära RA-GZRS-slutpunkten.