共用方式為


在 Azure 上部署和調整 Orleans 應用程式

在本快速入門中,您會在 Azure 容器應用程式上部署和調整 Orleans URL 縮短應用程式。 此應用程式可讓使用者提交應用程式的完整 URL,這會傳回可以與其他人共用的縮短版本,讓他們能夠重新導向至原始網站。 Orleans 和 Azure 提供裝載高流量應用程式 (例如 URL 縮短程式) 所需的可擴縮性功能。 Orleans 也相容於其他支援 .NET 的裝載服務。

在本快速入門結束時,您會擁有可在 Azure 中執行的可調整應用程式,提供 URL 縮短程式功能。 在過程中,您學習到:

  • 提取和 Azure Developer CLI 範本
  • 將 Orleans 應用程式部署至 Azure
  • 將應用程式調整為多重執行個體

必要條件

取得和部署範例應用程式

範例應用程式以 Azure Developer CLI 範本的形式提供。 透過本快速入門;您會提取範本應用程式、將範本和範例程式碼部署至 Azure、變更範本以實作您慣用的持續性粒紋、部署必要的資源,然後部署最終應用程式。

  1. 在空的目錄中開啟終端。

  2. 使用 azd auth login 向 Azure Developer CLI 進行驗證。 依照工具指定的步驟,使用您慣用的 Azure 認證向 CLI 進行驗證。

    azd auth login
    
  3. 使用 AZD 範本 orleans-url-shortenerazd init 命令取得範例應用程式。

    azd init --template orleans-url-shortener
    
  4. 初始化期間,請設定唯一的環境名稱。

    提示

    環境名稱也將是目標資源群組名稱。 在這個快速入門中,請考慮使用 msdocs-orleans-url-shortener

  5. 使用 azd up 來部署 Azure Cosmos DB for NoSQL 帳戶。 Bicep 範本也會部署範例 Web 應用程式。

    azd up
    
  6. 在佈建程序期間,選取您的訂用帳戶和所需的位置。 等候佈建和部署程序完成。 此程序可能需要大約五分鐘的時間

  7. Azure 資源佈建完成後,輸出將包含正在執行的 Web 應用程式的 URL。

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. 請使用主控台中的 URL,以在瀏覽器中導覽至您的 Web 應用程式。

    執行中 URL 縮短器 Web 應用程式的螢幕擷取畫面。

  9. 在瀏覽器網址列中,輸入 URL 路徑 (例如 /shorten?url=https://www.microsoft.com) 以測試 shorten 端點。 頁面應會重新載入,並提供結尾為縮短路徑的新 URL。 將新的 URL 複製到剪貼簿。

    {
      "original": "https://www.microsoft.com",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  10. 將縮短的 URL 貼到網址列中,然後按 Enter。 頁面應該重新載入並重新導向至您所指定的URL。

部署額外的服務

原始部署只會部署裝載 URL 縮短程式應用程式所需的最少服務。 若要使用 Azure 資料服務獲得粒紋持續性,您必須先設定範本來部署慣用的服務。

  1. 使用終端,執行 azd env set 來設定 DEPLOY_AZURE_TABLE_STORAGE 環境變數,以啟用 Azure Cosmos DB for NoSQL 的部署。

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. 使用終端,執行 azd env set 來設定 DEPLOY_AZURE_COSMOS_DB_NOSQL 環境變數,以啟用 Azure Cosmos DB for NoSQL 的部署。

    azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
    
  1. 執行 azd provision 以使用新的組態重新部署應用程式結構。 等候佈建程序完成。 此程序需要大約兩分鐘的時間

    azd provision
    

    提示

    或者,您可以再次執行 azd up,這兩者都會佈建結構並重新部署您的應用程式。

安裝 NuGet 套件

使用粒紋之前,您必須安裝對應的 Microsoft.Orleans.Clustering.*Microsoft.Orleans.Persistence.* NuGet 套件。 這些服務會使用角色型存取控制進行無密碼驗證,因此您也必須匯入 Azure.Identity NuGet 套件。

  1. 將目前的工作目錄變更為 ./src/web/

    cd ./src/web
    
  2. 使用 dotnet add package 從 NuGet 匯入 Azure.Identity 套件。

    dotnet add package Azure.Identity --version 1.*
    
  3. 匯入 Microsoft.Orleans.Clustering.AzureStorageMicrosoft.Orleans.Persistence.AzureStorage 套件。

    NuGet 套件
    叢集 Microsoft.Orleans.Clustering.AzureStorage
    持續性 Microsoft.Orleans.Persistence.AzureStorage
    dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
    
  1. 使用 dotnet add package 從 NuGet 匯入 Azure.Identity 套件。

    dotnet add package Azure.Identity --version 1.*
    
  2. 匯入 Microsoft.Orleans.Clustering.CosmosMicrosoft.Orleans.Persistence.Cosmos 套件。

    NuGet 套件
    叢集 Microsoft.Orleans.Clustering.Cosmos
    持續性 Microsoft.Orleans.Persistence.Cosmos
    dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
    

設定和重新部署範例應用程式

範例應用程式目前已設定為建立 localhost 叢集,並將粒紋保存在記憶體中。 在 Azure 中裝載時,Orleans 可以使用 Azure 中的資料服務,設定為使用更加可調整且更集中的狀態。

  1. 新增下列 using 指示詞:

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. 尋找並移除 src/web/Program.cs 檔案中目前 builder 組態程式碼。

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. builder 組態取代為此處的範例,其會實作下列重要概念:

    • 已新增條件式環境檢查,以確保應用程式在本機開發和 Azure 提供主機服務的情況下都能正常執行。
    • UseAzureStorageClustering 方法會將 Orleans 叢集設定為使用 Azure 表格儲存體,並使用 DefaultAzureCredential 類別進行驗證。
    • 使用 Configure 方法來指派 Orleans 叢集的識別碼。
      • ClusterID 是叢集的唯一識別碼,可讓用戶端和 silo 相互通訊。
      • 各個部署的 ClusterID 可有所不同。
      • ServiceID 是 Orleans 內部使用應用程式的唯一識別碼,而且應該在部署之間保持一致。
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = new Uri(builder.Configuration["AZURE_TABLE_STORAGE_ENDPOINT"]!);
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseAzureStorageClustering(options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .AddAzureTableGrainStorage(name: "urls", options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. builder 組態取代為此處的範例,其會實作下列重要概念:

    • 已新增條件式環境檢查,以確保應用程式在本機開發和 Azure 提供主機服務的情況下都能正常執行。
    • 方法 UseCosmosClustering 會將 Orleans 叢集設定為使用 Azure Cosmos DB for NoSQL,並使用 DefaultAzureCredential 類別進行驗證。
    • 使用 Configure 方法來指派 Orleans 叢集的識別碼。
      • ClusterID 是叢集的唯一識別碼,可讓用戶端和 silo 相互通訊。
      • 各個部署的 ClusterID 可有所不同。
      • ServiceID 是 Orleans 內部使用應用程式的唯一識別碼,而且應該在部署之間保持一致。
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = builder.Configuration["AZURE_COSMOS_DB_NOSQL_ENDPOINT"]!;
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseCosmosClustering(options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .AddCosmosGrainStorage(name: "urls", options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. 執行 azd deploy 以將應用程式程式碼重新部署為 Docker 容器。 等候部署程序完成。 此程序需要大約一分鐘的時間

    azd deploy
    

    提示

    或者,您可以再次執行 azd up,這兩者都會佈建結構並重新部署您的應用程式。

確認應用程式的行為

再次使用已部署的應用程式來驗證更新後的程式碼是否正常運作,並檢查其儲存資料的位置。

  1. 在瀏覽器網址列中,輸入 URL 路徑 (例如 /shorten?url=https://learn.microsoft.com/dotnet/orleans) 以再次測試 shorten 端點。 頁面應會重新載入,並提供結尾為縮短路徑的新 URL。 將新的 URL 複製到剪貼簿。

    {
      "original": "https://learn.microsoft.com/dotnet/orleans",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  2. 將縮短的 URL 貼到網址列中,然後按 Enter。 頁面應該重新載入並重新導向至您所指定的URL。

您可以視需要確認叢集和狀態資料是否順利儲存在您建立的儲存體帳戶中。

  1. 在 Azure 入口網站中,瀏覽至本快速入門中部署的資源群組。

    重要

    本快速入門稍早指定的環境名稱也是目標資源群組名稱。

  1. 瀏覽至 Azure 儲存體帳戶的概觀頁面。

  2. 在導覽中,選取 [儲存體瀏覽器]

  3. 展開 [資料表] 瀏覽項目,探索 Orleans 建立的兩個資料表:

    • OrleansGrainState:此資料表儲存應用程式用於處理 URL 重新導向的永續性狀態精細度資料。

    • OrleansSiloInstances:此資料表追蹤 Orleans 叢集的基本定址接收器資料。

  4. 選取 OrleansGrainState 資料表。 資料表會保留應用程式在測試期間所保存的每個 URL 重新導向資料列項目。

    顯示 Azure Table Storage 中 Orleans 資料的螢幕擷取畫面。

  1. 瀏覽至 Azure Cosmos DB for NoSQL 帳戶的概觀頁面。

  2. 在導覽中,選取 [資料總管]

  3. 觀察您稍早在本指南中建立的下列容器:

    • OrleansStorage:此資料表儲存應用程式用於處理 URL 重新導向的永續性狀態精細度資料。

    • OrleansCluster:此資料表追蹤 Orleans 叢集的基本定址接收器資料。

縮放應用程式

Orleans 設計用於分散式應用程式。 即便像 URL 縮短器這種簡單的應用程式,也可受益於 Orleans 的可擴縮性。 您可以使用下列步驟,跨多個執行個體調整及測試您的應用程式:

  1. 瀏覽回本快速入門中部署的資源群組。

  2. 瀏覽至 Azure 容器應用程式應用程式的概觀頁面。

  3. 在導覽中,選取 [調整]

  4. 選取 [編輯與部署],然後切換至 [縮放] 索引標籤。

  5. 使用滑杆控制項,將最小和最大複本值設定為 4。 此值可確保應用程式會在多個執行個體上執行。

  6. 選取 [建立] 以部署新的修訂版。

    顯示如何縮放 Azure Container Apps 應用程式的螢幕擷取畫面。

  7. 部署完成後,請重複上一節中的測試步驟。 應用程式會繼續在多個執行個體上順利運作,而且現在可以處理較高的要求數目。

後續步驟