将分区移至新节点时是否会有停机时间?

时间:2018-07-06 15:24:11

标签: azure-service-fabric

Service Fabric提供了在节点被删除或添加到群集时重新平衡分区的功能。 Service Fabric群集资源管理器会将一个或多个分区移动到该节点,以便可以完成更多工作。

想象一下一个可靠的actor服务,它具有成千上万个正在运行的actor,它们分布在多个分区中。如果资源管理器决定移动一个或多个分区,这会导致停机吗?还是重新平衡分区与升级服务相同?

2 个答案:

答案 0 :(得分:1)

服务升级和服务平衡之间的主要区别在于,在升级期间,所有分区中的所有副本都在特定节点上关闭。根据{{​​3}}文档,平衡是在副本的基础上完成的,即,只有某些分区中的某些副本会被移动,因此不应有任何中断。

答案 1 :(得分:1)

它们的行为几乎相同,我可以指出的主要区别是升级可能只影响正在更新的服务,而重新平衡可能会同时影响多个服务。在升级过程中,群集可能还会重新平衡服务以适应节点中的新服务实例。

添加或删除节点我将更多地与节点故障进行比较。在上述任何一种情况下,它们的重新平衡都是因为群集容量的变化,而不是由于服务指标\负载的变化。

节点故障和集群扩展(添加/删除节点)之间的主要区别在于,当基础结构通知告知节点正在关闭时,重新平衡将考虑过程中的服务状态。更新,维护或缩减规模),SF将要求基础架构等待,以便它可以为已宣布的“故障”做准备,然后开始重新平衡服务。

即使重新平衡关心缩减的服务状态,也不应认为它比节点故障更可靠,因为基础结构将在关闭节点之前wait for a while(可以等待的限制取决于您为集群定义的可靠性层),直到SF检查服务是否满足运行状况,例如关闭服务并创建新服务,检查它们是否可以正常运行且没有错误,如果此过程花费的时间太长,则这些服务可能一旦达到超时并且基础架构继续进行更改,将被杀死。此外,服务的新实例可能会在新节点上失败,从而迫使服务再次移动。

在设计服务时,将重新平衡视为节点故障较为安全,因为最后并没有太大区别。您的服务将四处移动,如果不持久化,则存储在内存中的数据将丢失,服务地址将发生更改,等等。服务应已复制数据,客户端应始终使用重试逻辑并刷新服务位置以减少停机时间。