参与者->参与者或服务>参与者调用的基础机制是什么,它们的可靠性如何?



我想了解更多关于在Azure Service Fabric中调用Actors的底层机制的技术细节,这在网上很难找到。参与者知道他们的单线程作用域,所以除非它的任何方法执行完全完成,否则不允许其他客户端调用它

更具体地说,我需要知道如果Actor的工作被一个客户端调用启动了一段时间,会发生什么。其他客户应该等多久才能完成工作?秒、分钟、小时?

  • 是否有超时机制,如果有,不知何故可配置
  • 如果参与者所在的节点崩溃,会发生什么,客户端是否会立即收到错误,或者ActorProxy会以某种方式处理这种情况并将调用重定向到健康节点上新创建的Actor实例

有相当多的SO答案,其中包含有关actor机制的详细信息,在文档中,我可以为您指出一些:

这个并不能完全回答你的问题,但我描述了锁定是如何工作的:在Azure Service Fabric参与者中启动线程?

Q:是否有任何超时机制,如果有,它是否可以配置?

是的,有一个超时,我在这里回答了:为actor';{actorName}';在{time}之后超时

配置文档位于此处

Q:如果actor所在的节点崩溃,客户端会立即收到错误吗?或者ActorProxy会以某种方式处理这种情况并将调用重定向到健康节点上新创建的actor实例,会发生什么?

通常,当一个复制副本宕机时,总会有一个可用的复制副本,当SF将辅助复制副本提升为主复制副本时,新的请求将开始移动到新的复制副本。

关于通信,默认情况下,SF Actors以与可靠服务相同的方式使用.Net Remoting进行通信,这里对行为进行了很好的描述。总之,它会重试瞬时故障,如果客户端无法连接到服务(Actor),它将重试,直到达到连接超时。

来自文档:

服务代理处理为其创建的服务分区的所有故障转移异常。如果存在故障转移异常(非瞬态异常),它会重新解析端点,并使用正确的端点重试调用。故障转移异常的重试次数是不确定的。如果出现暂时异常,代理将重试调用。

Actor文档,有更多信息,总之有两点需要记住:

  • 消息传递是最大的努力
  • 参与者可能会从同一客户端接收到重复的消息

这意味着,如果在传递消息时发生短暂故障,即使消息已经传递,它也会重试,从而导致重复消息。

最新更新