Öğretici: Blob Depolama ile yüksek oranda kullanılabilir bir uygulama oluşturunTutorial: Build a highly available application with Blob storage

Bu öğretici, bir dizinin birinci bölümüdür.This tutorial is part one of a series. İçinde uygulama verilerinizi azure'da yüksek oranda kullanılabilir hale getirme hakkında bilgi edinin.In it, you learn how to make your application data highly available in Azure.

Bu öğreticiyi tamamladıktan sonra yükler ve bir blobun alan bir konsol uygulaması gerekir bir okuma erişimli coğrafi olarak yedekli (RA-GRS) depolama hesabı.When you've completed this tutorial, you will have a console application that uploads and retrieves a blob from a read-access geo-redundant (RA-GRS) storage account.

RA-GRS, işlem birincil bir bölgeden ikincil bir bölgeye çoğaltarak çalışır.RA-GRS works by replicating transactions from a primary region to a secondary region. Bu çoğaltma işlemi, ikincil bölgedeki verilerin nihai olarak tutarlı olmasını sağlar.This replication process guarantees that the data in the secondary region is eventually consistent. Uygulamanın kullandığı devre kesici belirlemek hangi uç noktaya bağlanmak için uç noktalar olarak hataları arasında otomatik olarak geçiş desen ve kurtarmalar benzetimi.The application uses the Circuit Breaker pattern to determine which endpoint to connect to, automatically switching between endpoints as failures and recoveries are simulated.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.If you don't have an Azure subscription, create a free account before you begin.

Serinin birinci bölümünde şunları öğrenirsiniz:In part one of the series, you learn how to:

  • Depolama hesabı oluşturmaCreate a storage account
  • Bağlantı dizesini ayarlamaSet the connection string
  • Konsol uygulamasını çalıştırmaRun the console application

ÖnkoşullarPrerequisites

Bu öğreticiyi tamamlamak için:To complete this tutorial:

Azure portalında oturum açınSign in to the Azure portal

Azure Portal oturum açın.Sign in to the Azure portal.

Depolama hesabı oluşturmaCreate a storage account

Depolama hesabı, Azure Storage veri nesnelerinizi depolamak ve erişmek için benzersiz bir ad alanı sağlar.A storage account provides a unique namespace to store and access your Azure Storage data objects.

Okuma erişimli coğrafi olarak yedekli depolama hesabı oluşturmak için aşağıdaki adımları izleyin:Follow these steps to create a read-access geo-redundant storage account:

  1. Azure portalının sol üst köşesinde bulunan Kaynak oluştur düğmesini seçin.Select the Create a resource button found on the upper left-hand corner of the Azure portal.

  2. Seçin depolama gelen yeni sayfası.Select Storage from the New page.

  3. Seçin depolama hesabı - blob, dosya, tablo, kuyruk altında öne çıkan.Select Storage account - blob, file, table, queue under Featured.

  4. Aşağıdaki bilgileri kullanarak depolama hesabı formunu alttaki resimde gösterildiği gibi doldurun ve Oluştur’u seçin:Fill out the storage account form with the following information, as shown in the following image and select Create:

    AyarSetting       Önerilen değerSuggested value AçıklamaDescription
    AdName mystorageaccountmystorageaccount Depolama hesabınız için benzersiz bir değerA unique value for your storage account
    Dağıtım modeliDeployment model Resource ManagerResource Manager Resource Manager en son özellikleri içerir.Resource Manager contains the latest features.
    Hesap türüAccount kind StorageV2StorageV2 Hesap türleri hakkında ayrıntılı bilgi almak için bkz. depolama hesabı türleriFor details on the types of accounts, see types of storage accounts
    PerformansPerformance StandartStandard Standart, örnek senaryo için yeterli olacaktır.Standard is sufficient for the example scenario.
    ÇoğaltmaReplication Okuma erişimli coğrafi olarak yedekli depolama (RA-GRS)Read-access geo-redundant storage (RA-GRS) Örneğin çalışması için bunun seçilmesi gereklidir.This is necessary for the sample to work.
    AbonelikSubscription aboneliğinizyour subscription Abonelikleriniz hakkında daha ayrıntılı bilgi için bkz. Abonelikler.For details about your subscriptions, see Subscriptions.
    ResourceGroupResourceGroup myResourceGroupmyResourceGroup Geçerli kaynak grubu adları için bkz. Adlandırma kuralları ve kısıtlamalar.For valid resource group names, see Naming rules and restrictions.
    KonumLocation Doğu ABDEast US Konum seçin.Choose a location.

depolama hesabı oluşturma

Örneği indirmeDownload the sample

Örnek projeyi indirin ve storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip dosyasını ayıklayın (sıkıştırmasını açın).Download the sample project and extract (unzip) the storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip file. Geliştirme ortamına uygulamanın bir kopyasını indirmek için git de kullanılabilir.You can also use git to download a copy of the application to your development environment. Örnek proje bir konsol uygulaması içerir.The sample project contains a console application.

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

Örnek yapılandırmaConfigure the sample

Uygulamada, depolama hesabınız için bağlantı dizesi sağlamanız gerekir.In the application, you must provide the connection string for your storage account. Bu bağlantı dizesini uygulamayı çalıştıran yerel makine üzerindeki bir ortam değişkeninde depolayabilirsiniz.You can store this connection string within an environment variable on the local machine running the application. Ortam değişkenini oluşturmak için İşletim Sisteminize bağlı olarak aşağıdaki örneklerden birini izleyin.Follow one of the examples below depending on your Operating System to create the environment variable.

Azure portalında depolama hesabınıza gidin.In the Azure portal, navigate to your storage account. Depolama hesabınızdaki Ayarlar bölümünde Erişim anahtarları’nı seçin.Select Access keys under Settings in your storage account. Birincil veya ikincil anahtardaki bağlantı dizesini kopyalayın.Copy the connection string from the primary or secondary key. İşletim sisteminize göre aşağıdaki komutlardan birini çalıştırın değiştirerek <yourconnectionstring> gerçek bağlantı dizenizle.Run one of the following commands based on your operating system, replacing <yourconnectionstring> with your actual connection string. Bu komut, yerel makinede bir ortam değişkeni kaydeder.This command saves an environment variable to the local machine. Yeniden yükleninceye kadar Windows içinde ortam değişkeni kullanılamıyor komut istemi veya kullanmakta olduğunuz Kabuk.In Windows, the environment variable is not available until you reload the Command Prompt or shell you are using.

LinuxLinux

export storageconnectionstring=<yourconnectionstring>

WindowsWindows

setx storageconnectionstring "<yourconnectionstring>"

Konsol uygulamasını çalıştırmaRun the console application

Visual Studio'da F5 veya Başlat uygulama hata ayıklamayı başlatmak için.In Visual Studio, press F5 or select Start to begin debugging the application. Visual studio otomatik olarak eksik yapılandırdıysanız, NuGet paketlerini geri yüklemeler ziyaret yükleme ve paket geri yükleme paketleri yeniden yükleme daha fazla bilgi için.Visual studio automatically restores missing NuGet packages if configured, visit Installing and reinstalling packages with package restore to learn more.

Bir konsol penceresi açılır ve uygulama çalışmaya başlar.A console window launches and the application begins running. Uygulama, çözümdeki HelloWorld.png resmini depolama hesabına yükler.The application uploads the HelloWorld.png image from the solution to the storage account. Uygulama, resmin ikincil RA-GRS uç noktasında çoğaltıldığını denetler.The application checks to ensure the image has replicated to the secondary RA-GRS endpoint. Ardından, resmi 999 kereye kadar indirmeye başlar.It then begins downloading the image up to 999 times. Her okuma tarafından temsil edilen bir P veya S. Burada, P birincil uç nokta ve S ikincil uç nokta demektir.Each read is represented by a P or an S. Where P represents the primary endpoint and S represents the secondary endpoint.

Çalışan konsol uygulaması

Örnek kodda, DownloadToFileAsync yöntemini kullanarak depolama hesabından bir resim indirmek için Program.cs dosyasındaki RunCircuitBreakerAsync görevi kullanılmaktadır.In the sample code, the RunCircuitBreakerAsync task in the Program.cs file is used to download an image from the storage account using the DownloadToFileAsync method. İndirme işlemi öncesinde bir OperationContext (İşlem Bağlamı) tanımlanır.Prior to the download, an OperationContext is defined. İşlem bağlamı, indirme işlemi başarıyla tamamlandığında veya indirme işlemi başarısız olup yeniden denendiğinde başlatılan olay işleyicilerini tanımlar.The operation context defines event handlers, that fire when a download completes successfully or if a download fails and is retrying.

Örnek kodu anlamaUnderstand the sample code

Yeniden deneme olay işleyicisiRetry event handler

OperationContextRetrying olay işleyicisi, resmin indirilmesi işlemi başarısız olmuşsa ve yeniden denenecek şekilde ayarlanmışsa çağrılır.The OperationContextRetrying event handler is called when the download of the image fails and is set to retry. Uygulamada tanımlı yeniden deneme sayısı üst sınırına ulaşılmışsa isteğin LocationMode değeri SecondaryOnly olarak değiştirilir.If the maximum number of retries defined in the application are reached, the LocationMode of the request is changed to SecondaryOnly. Bu ayar, uygulamayı resmi ikincil uç noktadan indirmeyi denemeye zorlar.This setting forces the application to attempt to download the image from the secondary endpoint. Birincil uç nokta süresiz olarak yeniden denenmediği için bu yapılandırma resmin istenmesinde harcanan süreyi azaltmış olur.This configuration reduces the time taken to request the image as the primary endpoint is not retried indefinitely.

private static void OperationContextRetrying(object sender, RequestEventArgs e)
{
    retryCount++;
    Console.WriteLine("Retrying event because of failure reading the primary. RetryCount = " + retryCount);

    // Check if we have had more than n retries in which case switch to secondary.
    if (retryCount >= retryThreshold)
    {

        // Check to see if we can fail over to secondary.
        if (blobClient.DefaultRequestOptions.LocationMode != LocationMode.SecondaryOnly)
        {
            blobClient.DefaultRequestOptions.LocationMode = LocationMode.SecondaryOnly;
            retryCount = 0;
        }
        else
        {
            throw new ApplicationException("Both primary and secondary are unreachable. Check your application's network connection. ");
        }
    }
}

İstek tamamlandı olay işleyicisiRequest completed event handler

OperationContextRequestCompleted olay işleyicisi, resmin indirilmesi işlemi başarılı olduğunda çağrılır.The OperationContextRequestCompleted event handler is called when the download of the image is successful. Uygulama ikincil uç noktayı kullanıyorsa bu uç noktayı 20 kereye kadar daha kullanmaya devam eder.If the application is using the secondary endpoint, the application continues to use this endpoint up to 20 times. 20 kereden sonra uygulama LocationMode değerini yeniden PrimaryThenSecondary olarak ayarlar ve birincil uç noktayı tekrar dener.After 20 times, the application sets the LocationMode back to PrimaryThenSecondary and retries the primary endpoint. Bir istek başarılı olursa uygulama birincil uç noktadan okumaya devam eder.If a request is successful, the application continues to read from the primary endpoint.

private static void OperationContextRequestCompleted(object sender, RequestEventArgs e)
{
    if (blobClient.DefaultRequestOptions.LocationMode == LocationMode.SecondaryOnly)
    {
        // You're reading the secondary. Let it read the secondary [secondaryThreshold] times,
        //    then switch back to the primary and see if it's available now.
        secondaryReadCount++;
        if (secondaryReadCount >= secondaryThreshold)
        {
            blobClient.DefaultRequestOptions.LocationMode = LocationMode.PrimaryThenSecondary;
            secondaryReadCount = 0;
        }
    }
}

Sonraki adımlarNext steps

Bölümünde bir dizi uygulamaya RA-GRS depolama hesapları ile yüksek oranda kullanılabilir yapma hakkında bilgi edindiniz.In part one of the series, you learned about making an application highly available with RA-GRS storage accounts.

Bir hata simülasyonu yapıp uygulamanızı ikincil RA-GRS uç noktasını kullanmaya zorlamayı öğrenmek için serinin ikinci bölümüne geçin.Advance to part two of the series to learn how to simulate a failure and force your application to use the secondary RA-GRS endpoint.