部署grain的新版本
滚动升级
在此方法中,您可以直接在您的环境中部署较新的silo。这是最简单的方法,但是很难中断正在进行的部署并回滚。
推荐配置:
DefaultCompatibilityStrategy
设置成BackwardCompatible
DefaultVersionSelectorStrategy
设置成AllCompatibleVersions
var silo = new SiloHostBuilder()
[...]
.Configure<GrainVersioningOptions>(options =>
{
options.DefaultCompatibilityStrategy = nameof(BackwardCompatible);
options.DefaultVersionSelectorStrategy = nameof(AllCompatibleVersions);
})
[...]
当使用此配置时,“老”客户端将能够与两个版本的silo上的激活体进行通信。较新的客户端和silo只会在较新的silo上触发新的激活体。
使用staging环境
在此方法中,您将需要第二个环境(staging环境),在停止生产环境之前,您将在该环境中部署新的silo。生产环境的silo、staging环境的silo、以及客户端,将成为同一群集的一部分。重要的是,来自两个环境的silo可以相互通信。
推荐配置:
DefaultCompatibilityStrategy
设置成BackwardCompatible
DefaultVersionSelectorStrategy
设置成MinimumVersion
var silo = new SiloHostBuilder()
[...]
.Configure<GrainVersioningOptions>(options =>
{
options.DefaultCompatibilityStrategy = nameof(BackwardCompatible);
options.DefaultVersionSelectorStrategy = nameof(MinimumVersion);
})
[...]
建议的部署步骤:
- “V1” silo和客户端已部署,并在生产环境槽中运行。
- “V2” silo和客户端开始在Staging槽中启动。它们将加入与生产环境槽相同的集群。到目前为止,还没有创建“V2”激活。
- 一旦Staging槽中的部署完成,开发人员就可以重定向V2客户端上的一些流量(冒烟测试,目标beta用户等)。这将创建V2激活,但由于Grains是向后兼容的,并且所有silo都在同一个集群中,因此不会创建重复的激活体。
- 如果验证成功,将继续进行VIP swap。如果没有,您可以安全地关闭Staging集群:现有的V2激活体将被销毁,并且如果需要,将创建V1激活。
- V1激活体最终将“迁移”到V2 silo。您可以安全地关闭V1 silo。
警告
请记住,无状态工作者没有版本控制,并且流代理(streaming agent)也将在staging环境中启动。