在一個快速、可靠且迭代開發週期決定成功的行業中,部署軟件並最小化風險的能力是無價的。功能標誌已成為現代開發人員工具包中不可或缺的一部分,提供了一種靈活的方法來動態啟用和禁用功能。
讓我們來看看微軟.NET團隊如何與Azure結合,有效地管理新功能發布,而不需要在出現回歸情況時回滾(重新部署)。
傳統功能管理中面臨的挑戰
手動管理功能始終是開發人員的痛點。在複雜環境中,硬編碼或依賴本地配置文件變得難以管理。這種方法通常會引入挑戰,例如:
- 可擴展性問題:很難在開發、階段和生產等多個環境之間保持一致性,這通常會導致配置漂移。
- 部署依賴性:更改功能狀態需要重新部署,這將增加停機時間和運營風險。
- 有限控制:基本設置缺乏高級定位或管理遞增式的功能。
Azure的解決方案:統一方法
Azure 功能管理通過提供與 .NET 8 及更高版本無縫集成的集中式系統,簡化了這些挑戰。這個強大的框架確保開發人員可以專注於創新,同時控制功能生命週期。
它有何特色?
- 動態配置:在不接觸代碼庫的情況下隨時修改功能狀態,無需重新部署。
- 精細定位:根據地理位置對功能定位特定用戶分段,甚至應用自定義規則。
- 無縫擴展:針對分佈式系統和微服務設計,非常適合雲原生應用程序。
實施功能標誌的逐步指南
1. 設置 Azure 應用配置
首先在 Azure 中創建一個集中式配置資源:
- 前往 Azure 閘道並選擇應用配置資源。
- 創建一個應用配置資源,並填寫對話框中提到的詳細信息。
- 資源創建完成後,點擊操作以展開並導航至功能管理器選項卡。如下方截圖所示,創建一個名為
NewSearchExperience
的功能標誌。
2. 配置您的 .NET 8 應用程序
將應用程序與 Azure 的功能管理工具集成是直接的:
安裝所需的套件:
C#
dotnet add package Microsoft.FeatureManagement.AspNetCore
dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
更新您的 program.cs 檔案:
C#
using Microsoft.FeatureManagement;
var builder = WebApplication.CreateBuilder(args);
// Add Azure App Configuration builder.Configuration.AddAzureAppConfiguration(options => options.Connect("<Your_Connection_String>") .UseFeatureFlags());
// Register Feature Management services builder.Services.AddFeatureManagement();
var app = builder.Build();
// Use middleware to integrate with Azure App Configuration app.UseAzureAppConfiguration();
app.MapGet("/", async context => {
var featureManager = context.RequestServices.GetRequiredService<IFeatureManager>();
if (await featureManager.IsEnabledAsync("NewSearchExperience"))
{
await context.Response.WriteAsync("The new search experience is enabled.");
}
else
{
await context.Response.WriteAsync("The new search experience is disabled.");
}
});
app.Run();
3. 實時測試切換
- 啟動應用程序,根據切換狀態驗證響應。
- 在 Azure 門戶中修改
NewSearchExperience
功能標誌,以在應用程序無需重新啟動的情況下觀察實時變化。
實際用例:個性化推薦
想像一下為您的電子商務網站添加個性化推薦功能。下面是您可以實現它的方式:
- 在 Azure 中創建一個切換,並將功能命名為
PersonalizedRecommendations
。 - 修改 Razor 頁面或視圖:
HTML
@inject IFeatureManager FeatureManager
@if (await FeatureManager.IsEnabledAsync("PersonalizedRecommendations"))
{
<div>Check out these recommendations just for you!</div>
......
}
else
{
<div>Browse our best-selling products.</div>
}
- 切換功能開啟或關閉,以動態更新用戶體驗。
功能管理最佳實踐
1. 解耦業務邏輯
使用服務來處理功能檢查,確保關注點分離並提高重用性。
C#
public interface IFeatureToggleService {
Task<bool> IsFeatureEnabledAsync(string featureName);
}
public class FeatureToggleService : IFeatureToggleService
{
7
private readonly IFeatureManager _featureManager;
8
public FeatureToggleService(IFeatureManager featureManager)
9
{
10
_featureManager = featureManager;
11
}
12
public async Task<bool> IsFeatureEnabledAsync(string featureName)
13
{
14
return await _featureManager.IsEnabledAsync(featureName);
15
}
16
}
2. 利用增量部署
將功能釋出給用戶子集,以減少風險並從實時用戶那裡獲取早期反饋。
3. 監控和分析
使用 Azure Monitor 跟踪功能使用情況和性能,以做出數據驅動的決策。
結論
通過在 .NET 8 中使用功能標誌,開發人員能夠精確自信地交付軟件。通過採用功能標誌,團隊可以:
- 降低部署風險。
- 逐步推出功能。
- 立即回應問題,無需程式碼更改。
立即開始整合功能旗幟,透過 Azure 入口網站輕鬆控制啟用或停用任何功能,無需重新部署。
Source:
https://dzone.com/articles/feature-flags-in-net-8-and-azure