教學課程:建置採用 Blob 儲存體的高可用性應用程式

本教學課程是一個系列的第一部分。 在其中,您可了解如何讓應用程式資料在 Azure 中具有高可用性。

當您完成本教學課程時,就會擁有主控台應用程式,可從讀取權限異地區域備援 (RA-GZRS) 儲存體帳戶上傳及擷取 Blob。

Azure 儲存體中的異地備援可將交易從主要區域非同步複寫到相隔數百英哩的次要區域。 此複寫程序可保證次要區域中的資料是最終一致的。 主控台應用程式會使用斷路器模式來決定要連線至哪一個端點,並且在模擬失敗和復原時自動在端點間切換。

如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶

在系列的第一部分中,您將了解如何:

  • 建立儲存體帳戶
  • 設定連接字串
  • 執行主控台應用程式

必要條件

完成本教學課程:

登入 Azure 入口網站

登入 Azure 入口網站

建立儲存體帳戶

儲存體帳戶提供唯一命名空間來儲存及存取您的 Azure 儲存體資料物件。

請依照下列步驟建立讀取權限異地區域備援 (RA-GZRS) 儲存體帳戶:

  1. 在 Azure 入口網站中選取 [建立資源] 按鈕。

  2. 在 [新增] 頁面中,選取 [儲存體帳戶 - Blob、檔案、資料表、佇列]

  3. 在儲存體帳戶表單中填寫下列資訊 (如下圖所示),然後選取 [建立]

    設定 範例值 描述
    訂用帳戶 我的訂用帳戶 如需訂用帳戶的詳細資訊,請參閱訂用帳戶
    ResourceGroup myResourceGroup 如需有效的資源群組名稱,請參閱命名規則和限制
    名稱 mystorageaccount 儲存體帳戶的唯一名稱。
    地點 美國東部 選擇位置。
    效能 標準 在範例案例中,標準效能是不錯的選擇。
    帳戶類型 StorageV2 建議使用一般用途 v2 儲存體帳戶。 如需 Azure 儲存體帳戶類型的詳細資訊,請參閱儲存體帳戶概觀
    複寫 讀取權限異地區域備援儲存體 (RA-GZRS) 主要區域具區域備援性質,若已啟用次要區域的讀取權限,則會複寫至次要區域。
    存取層 經常性 針對經常存取的資料,請使用經常性存取層。

    create storage account

下載範例

下載範例專案、解壓縮 (unzip) storage-dotnet-circuit-breaker-pattern-ha-apps-using-ra-grs.zip 檔案,接著瀏覽至 v12 資料夾以尋找專案檔。

您也可以使用 git,將存放庫複製到本機開發環境。 v12 資料夾中的範例專案包含主控應用程式。

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

設定範例

對 Azure Blob 儲存體的應用程式要求必須經過授權。 在程式碼中使用 Azure.Identity 用戶端程式庫提供的 DefaultAzureCredential 類別是連線至 Azure 服務的建議方法。 .NET v12 程式碼範例使用此方法。 如需深入了解,請參閱 DefaultAzureCredential 概觀

您也可以使用帳戶存取金鑰,藉此授權對 Azure Blob 儲存體的要求。 然而,您應謹慎使用此方法以保護存取金鑰遭到公開。

執行主控台應用程式

在 Visual Studio 中,按下 F5 或選取 [啟動],開始對應用程式進行偵錯。 若已設定套件還原,Visual Studio 會自動還原缺少的 NuGet 套件。 如需深入了解,請參閱使用套件還原安裝和解除安裝套件

當啟動主控台視窗時,應用程式會取得次要區域的狀態並將該資訊寫入主控台。 然後,應用程式將在儲存體帳戶中建立容器並將 Blob 上傳至容器。 上傳 Blob 後,應用程式將持續檢查 Blob 是否已複寫至次要區域。 這項檢查會繼續執行,直到複寫 Blob 為止,或我們達到迴圈條件定義的反覆運算次數上限。

接下來,應用程式會進入迴圈並提示下載 Blob (一開始會從主要儲存體讀取)。 按下任意鍵以下載 Blob。 若從主要區域讀取時發生可重試錯誤,則會針對次要區域端點執行重試讀取要求。 區域切換至次要時,將顯示主控台輸出。

Screenshot of Console output for secondary request.

若要結束迴圈並清除資源,請在 Blob 下載提示時按下 Esc 鍵。

了解範例程式碼

範例會建立已設定重設選項和次要區域端點的 BlobServiceClient 物件。 如果主要區域端點上的要求失敗,此設定可讓應用程式自動切換至次要區域。

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

BlobClientOptions 中已設定 GeoRedundantSecondaryUri 屬性時,GET 或 HEAD 要求的重試將切換至使用次要端點。 後續的重試將輪替使用主要和次要端點。 然而,若次要 URI 的回應狀態為 404,則要求的後續重試將不再使用次要 URI,因為此錯誤碼表示資源尚未複寫至次要區域。

下一步

在系列的第一部分中,您已了解如何使用 RA-GZRS 儲存體帳戶讓應用程式具有高可用性。

請進入系列的第二個部分,以了解如何模擬失敗狀況,並強制應用程式使用次要 RA-GZRS 端點。

資源

如需使用已取代 SDK 的相關程式碼範例,請參閱下列資源: