gpt4 book ai didi

azure - 使用 Azure ServiceFabric 进行蓝/绿部署

转载 作者:行者123 更新时间:2023-12-03 21:16:45 24 4
gpt4 key购买 nike

我目前正在 Azure ServiceFabric 上使用 ReliableActors 框架构建应用程序。随着我们的规模扩大,我正在考虑进行蓝/绿部署。我可以看到如何使用无状态系统来做到这一点。有没有办法使用有状态的 Actor 来做到这一点?

最佳答案

Service Fabric 完全是关于滚动升级,而不是像 VIP 交换那样的部署交换。无状态和有状态服务都以相同的方式升级,但有状态还有一些额外的细微差别,我将在后面提到。

通过滚动升级,我的意思是对应用程序进行升级,一次一个升级域,这样就不会出现停机和突然切换的情况。 Service Fabric 中的滚动升级可以在安全的“托管”模式下完成,在这种模式下,平台将在移动到下一个升级域之前执行运行状况检查,并在运行状况检查失败时自动回滚。

好的,这一切听起来都不错。但是,当升级总是滚动升级时,您如何进行蓝/绿部署?

这就是应用程序类型和版本的用武之地。Service Fabric 具有可以从中创建应用程序实例的版本化应用程序类型的概念,而不是拥有两个“环境”可以容纳两个正在运行的应用程序。这是一个如何工作的示例:

假设我想制作一个名为 Foo 的应用程序。我的 Foo 应用程序被定义为一种应用程序类型,称之为 FooType。这类似于在 C# 中定义一个类。就像 C# 中的类一样,我可以创建我的类型的实例。每个实例都有一个唯一的名称,类似于类的每个对象实例都有一个唯一的变量名称。但与 C# 中的类不同,我的 FooType 有一个版本号。然后我可以在我的集群中“注册”应用程序类型和版本:

FooType 1.0

注册后,我可以创建该应用程序的实例:
"fabric:/FooApp" of FooType 1.0

现在,假设我开发了应用程序的 2.0 版。所以我在集群中注册了我的 FooType 2.0 版:
FooType 1.0
FooType 2.0

现在我已经注册了两个版本的 FooType,而且我还有一个 1.0 的实例正在运行:
"fabric:/FooApp" of FooType 1.0

这就是它变得有趣的地方。我可以做一些有趣的事情:

我可以采用“fabric:/FooApp”——FooType 1.0 的一个实例——并将其升级到 FooType 2.0。这将是正在运行的应用程序的滚动升级。

或者..我可以不理会“fabric:/FooApp”,然后创建我的 2.0 版应用程序的新实例:
"fabric:/FooApp" of FooType 1.0
"fabric:/FooAppv2Test" of FooType 2.0

现在我有两个应用程序,在同一个集群中并排运行。一个是1.0的实例,另一个是2.0的实例。通过对端口和应用程序端点进行一些配置,我可以确保用户在我测试 2.0 实例时仍然使用 1.0 实例。

太好了,所以我所有的测试都通过了 2.0 实例,所以现在我可以安全地使用 1.0 实例并将其升级到 FooType 的 2.0。同样,这是该实例 (fabric:/FooApp) 的滚动升级,它不会将用户迁移到新实例 (fabric:/FooAppv2Test)。稍后我会去删除 fabric:/FooAppv2Test 因为那只是为了测试。

蓝/绿的好处之一是,如果新部署失败,则可以切换回另一个部署。好吧,您仍然注册了 FooType 的 1.0 和 2.0。因此,如果您的应用程序在从 1.0 升级到 2.0 后开始出现问题,您只需将其“升级”回 1.0!事实上,您可以根据需要在其应用程序类型的多个不同版本之间“升级”应用程序实例!而且您不需要像在交换环境中那样运行所有应用程序版本的实例,您只需注册不同的版本和可以在版本之间“升级”的单个应用程序实例。

我提到了有状态服务的警告。有状态服务要记住的重要事情是应用程序状态 - 您的用户数据 - 包含在应用程序实例 (fabric:/FooApp) 中,因此为了让您的用户看到他们的数据,您需要将他们保留在该实例中。这就是我们进行滚动升级而不是部署交换的原因。

这只是基本的想法。根据您的目标和应用程序的工作方式,您还可以通过其他方式来处理应用程序类型、版本和实例,但那是另一种方式了。

关于azure - 使用 Azure ServiceFabric 进行蓝/绿部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com