Service Fabric 对无状态服务的远程调用未返回、卡住

Posted

技术标签:

【中文标题】Service Fabric 对无状态服务的远程调用未返回、卡住【英文标题】:Service Fabric remote calls to stateless service not returning, stuck 【发布时间】:2021-03-04 11:22:39 【问题描述】:

在我们的应用程序中,我们有一个有状态的参与者,它调用另一个无状态服务。无状态服务进行一些处理并将响应返回给参与者。该服务有时可能需要 1-2 小时才能完成处理。

我们偶尔会看到服务已成功完成处理但未将响应返回给参与者的场景。我的意思是控制不会返回给actor,并且整个actor处理会卡住并且不会继续进行。 我们在服务端或参与者端找不到任何异常。

寻找进一步调查问题的指针。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我建议将您的架构更改为事件驱动模型。例如,通过使用此pub/sub library。 这样,服务可以响应来自参与者的事件并开始处理。完成后,它会触发另一个事件,该事件可由actor接收和处理。

这样,参与者只能在事件发送/接收期间存在,从而允许您的集群托管更多工作负载。它还可以防止您的演员不得不等待几个小时才能返回呼叫,从而阻止其他进程使用它。

要解决您当前的问题,我建议您执行以下步骤:

使服务操作在后台运行,返回一个关联令牌(例如随机 guid) 将服务更改为有状态服务。存储处理进度,以便查询。 使用演员提醒定期检查是否有结果,使用令牌。

【讨论】:

@LeokD - 感谢您的意见。将在图书馆进行更多探索。但是,我们是否可以立即做出改变来缓解当前设计中的问题? 我在答案中添加了一些想法

以上是关于Service Fabric 对无状态服务的远程调用未返回、卡住的主要内容,如果未能解决你的问题,请参考以下文章

Service Fabric 具有不同 ContractDescriptions 的多个 ServiceEndpoint

Service Fabric 群集卡在状态 = 正在部署

从远程位置访问 Service Fabric RPC 接口

如何在 Service Fabric 部署期间保留有状态服务的状态?

Service Fabric 中无状态服务的服务解析器

单个节点上的 Service Fabric 无状态服务部署