在一个以快速、可靠和迭代式开发周期定义成功的行业中,部署软件并最小化风险的能力是无价的。功能标志已成为现代开发人员工具包的重要组成部分,提供了一种灵活的方法来动态启用和禁用功能。
让我们来看看Microsoft .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