在此快速入門指南中,您將在 Azure 容器應用上部署和擴展一個 URL 縮短器應用程式。 此應用程式允許使用者提交完整的網址,應用程式將返回一個短網址,使用者可以與他人分享,以便將他們引導至原始網站。 Orleans 和 Azure 提供必要的擴展性功能,以支援像 URL 縮址這類高流量應用程式的託管。 Orleans 也與任何支援 .NET 的其他主機服務相容。
在本快速入門結束時,您會有可在 Azure 中執行的可調整應用程式,以提供 URL 縮短程式功能。 在這個過程中,你會學到:
- 拉取和 Azure 開發者 CLI 範本
- 將 Orleans 應用程式部署至 Azure
- 將應用程式擴展到多個實例
先決條件
- Azure 帳戶需有有效的訂閱。 免費建立帳戶。
- Azure 開發人員命令列介面
- .NET 8
- 碼頭工人
獲取並部署範例應用程式
此範例應用程式可以作為 Azure Developer CLI 模板使用。 透過本快速入門:您將拉取範本應用程式,將範本和範例代碼部署到 Azure,變更範本以實作您慣用的持久性粒,部署必要資源,然後部署最終應用程式。
在空目錄中打開終端機。
使用
azd auth login
進行Azure Developer CLI的身份驗證。 請依照工具指定的步驟,使用您偏好的 Azure 憑證來驗證 CLI 的身分。azd auth login
使用 AZD 範本
orleans-url-shortener
和azd init
指令獲取範例應用程式。azd init --template orleans-url-shortener
初始化期間,配置一個獨特的環境名稱。
提示
環境名稱也將用作目標資源群組名稱。 在本快速入門中,請考慮使用
msdocs-orleans-url-shortener
。使用
azd up
部署 Azure Cosmos DB for NoSQL 帳戶。 Bicep 模板還會部署一個範例網頁應用程式。azd up
在配置過程中,選擇您的訂閱和所需位置。 等候布建和部署程式完成。 該過程可能需要大約五分鐘。
當您的 Azure 資源配置完成後,將在輸出中包含一個指向正在運行的網頁應用程式的 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.
使用控制台中的網址,通過瀏覽器導航到您的網路應用程式。
在瀏覽器的地址欄中,通過添加URL路徑(例如
shorten
) 來測試/shorten?url=https://www.microsoft.com
端點。 頁面應重新加載,並提供一個新的 URL,其中結尾的路徑已縮短。 複製新的網址到您的剪貼簿。{ "original": "https://www.microsoft.com", "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>" }
將縮短的 URL 貼到網址列中,然後按 Enter。 頁面應該重載並重新導向至您指定的URL。
部署額外服務
原始部署僅部署了託管URL縮短器應用程式所需的最小服務。 若要使用 Azure 數據服務來持久化資料,您必須先設定範本以部署您偏好的服務。
使用終端機,運行
azd env set
來配置DEPLOY_AZURE_TABLE_STORAGE
環境變數,以啟用 Azure Cosmos DB for NoSQL 的部署。azd env set DEPLOY_AZURE_TABLE_STORAGE true
使用終端機,運行
azd env set
來配置DEPLOY_AZURE_COSMOS_DB_NOSQL
環境變數,以啟用 Azure Cosmos DB for NoSQL 的部署。azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
執行
azd provision
以使用新的組態重新部署應用程式架構。 請等待佈署過程完成。 此過程大約需要兩分鐘。azd provision
提示
原則上,可再次執行
azd up
,這將既設置您的架構,也重新部署您的應用程式。
安裝 NuGet 套件
在使用 grain 之前,必須安裝對應的 Microsoft.Orleans.Clustering.*
和 Microsoft.Orleans.Persistence.*
NuGet 套件。 這些服務會使用角色型訪問控制進行無密碼驗證,因此您也必須匯入 Azure.Identity
NuGet 套件。
將您的當前工作目錄更改為./src/web/。
cd ./src/web
從 NuGet 匯入
Azure.Identity
套件:dotnet add package Azure.Identity --version 1.*
匯入
Microsoft.Orleans.Clustering.AzureStorage
和Microsoft.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.*
從 NuGet 匯入
Azure.Identity
套件:dotnet add package Azure.Identity --version 1.*
匯入
Microsoft.Orleans.Clustering.Cosmos
和Microsoft.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 中的數據服務,以更具擴展性和集中化的狀態。
新增下列
using
指示詞:using Azure.Identity; using Orleans.Configuration;
請找到並移除
builder
當前的配置代碼,在src/web/Program.cs檔案中。builder.Host.UseOrleans(static siloBuilder => { siloBuilder .UseLocalhostClustering() .AddMemoryGrainStorage("urls"); });
將
builder
配置替換為此處的範例,此範例會實作下列重要概念:- 為了確保應用程式在本地開發和 Azure 託管環境中能正常運行,已新增條件環境檢查。
- 方法會將
UseAzureStorageClustering
Orleans 叢集設定為使用 Azure Table 儲存,並使用 DefaultAzureCredential 類別進行驗證。 - 使用
Configure
方法來分配Orleans叢集的標識碼。 -
ClusterID
是叢集的唯一識別碼,可讓客戶端和數據庫彼此進行通訊。 -
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"; }); }); }
將
builder
配置替換為此處的範例,此範例會實作下列重要概念:- 為了確保應用程式在本地開發和 Azure 託管環境中能正常運行,已新增條件環境檢查。
-
UseCosmosClustering
方法配置 Orleans 叢集,以使用適用於 NoSQL 的 Azure Cosmos DB,並使用 DefaultAzureCredential 類別進行驗證。 - 使用
Configure
方法來分配Orleans叢集的標識碼。 -
ClusterID
是叢集的唯一識別碼,可讓客戶端和數據庫彼此進行通訊。 -
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"; }); }); }
執行
azd deploy
以將您的應用程式代碼重新部署為 Docker 容器。 等待部署過程完成。 該過程可能需要約一分鐘。azd deploy
提示
原則上,可再次執行
azd up
,這將既設置您的架構,也重新部署您的應用程式。
確認應用程式的行為
驗證您的更新代碼是否有效,可再次使用已部署的應用程式,並檢查其資料儲存位置。
在瀏覽器的地址欄中,通過添加URL路徑,例如
shorten
,再次測試/shorten?url=https://learn.microsoft.com/dotnet/orleans
端點。 頁面應重新加載,並提供一個新的 URL,其中結尾的路徑已縮短。 複製新的網址到您的剪貼簿。{ "original": "https://learn.microsoft.com/dotnet/orleans", "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>" }
將縮短的 URL 貼到網址列中,然後按 Enter。 頁面應該重載並重新導向至您指定的URL。
您可以選擇驗證您創建的儲存帳戶中,叢集和狀態數據是否如預期地被儲存。
在 Azure 入口網站中,流覽至本快速入門中部署的資源群組。
這很重要
本快速入門稍早指定的環境名稱也是目標資源組名。
流覽至 Azure 記憶體帳戶的概觀頁面。
在導覽中,選取 儲存瀏覽器。
展開 表格 導覽項目,以查看由 Orleans 建立的兩個表格。
- OrleansGrainState:此數據表會儲存應用程式用來處理 URL 重新導向的持續性狀態粒紋數據。
- OrleansSiloInstances:此表格追蹤 Orleans 叢集的基本儲存體數據。
請選擇 OrleansGrainState 表格。 表格中為每個在測試期間由應用程式持續保存的 URL 重定向保留了一個列項目。
請前往 Azure Cosmos DB 的 NoSQL 帳戶概覽頁面。
在導航中,選擇Data Explorer。
請觀察本指南中您先前創建的以下容器:
OrleansStorage:此數據表會儲存應用程式用來處理 URL 重新導向的持續性狀態粒紋數據。
OrleansCluster:這個表格會追蹤Orleans叢集的關鍵儲存數據。
確保應用程式的可擴展性
Orleans 專為分散式應用程式所設計。 即使是像URL縮短器一樣簡單的應用程式,也可以受益於的 Orleans延展性。 您可以使用下列步驟,跨多個實例調整及測試應用程式:
返回至本快速入門指南中部署的資源群組。
導航至 Azure 容器應用程式的概覽頁面。
在導覽中,選取 比例。
選擇編輯並部署,然後切換到調整大小標籤。
使用滑桿控制件將最小和最大複本值設定為 4。 這個值確保該應用程式正在多個實例上執行。
選擇建立以部署新修訂。
部署完成後,請重複執行前一部分的測試步驟。 應用程式在多個實例中持續正常運作,現在可以處理更多的請求。