将分区移动到新节点时是否会停机?

Is there downtime when a partition is moved to a new node?

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

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

服务升级和服务重新平衡之间的主要区别在于,在升级过程中,来自所有分区的所有副本都会在特定节点上关闭。根据文档 here 平衡是在副本基础上完成的,即只有来自某些分区的一些副本会被移动,所以不应该有任何中断。

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

添加或删除节点我将更多地与节点故障进行比较。在任何这些情况下,它们都会因为集群容量变化而重新平衡,而不是因为服务 metric\load 变化。

节点故障和集群扩展(Add/remove 节点)之间的主要区别在于,当基础架构通知告知节点是正在关闭(为了更新或维护,或缩减规模)SF 将要求基础设施等待,以便它可以为这个宣布的 'failure' 做准备,然后开始重新平衡服务。

尽管重新平衡关心缩减的服务状态,但不应将其视为比节点故障更可靠,因为基础设施将 wait for a while 在关闭节点之前(它可以达到的极限)等待将取决于您为集群定义的可靠性层),直到 SF 检查服务是否满足健康条件,例如关闭服务并创建新服务,检查它们是否 运行 正常无错误,如果此过程需要太长了,一旦达到超时,这些服务可能会被终止并且基础设施继续进行更改,此外,服务的新实例可能会在新节点上失败,从而迫使服务再次移动。

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