Service Fabric 中的 Stateless Worker 服务在同一进程中重新启动

Posted

技术标签:

【中文标题】Service Fabric 中的 Stateless Worker 服务在同一进程中重新启动【英文标题】:Stateless Worker service in Service Fabric restarted in the same process 【发布时间】:2021-11-03 05:29:59 【问题描述】:

我有一个无状态服务,它从 Azure 队列中提取消息并对其进行处理。该服务还启动一些负责清理操作的线程。我们最近遇到了一个问题,这些线程在理想情况下应该在服务关闭时被终止继续保持活动状态(肯定是我们的服务关闭过程中的一个错误)。

进一步查看日志,似乎 RunAsync 方法取消令牌收到了取消请求,随后在 同一进程 中注册了 @987654323 中的无状态服务的新实例@ 已创建。

在关闭当前实例后,Service Fabric 是否可以重复使用相同的进程来启动无状态服务的新实例。

服务结构文档https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-hosting-model 似乎确实建议可以在同一进程上托管不同的服务,但我找不到其中提到的上述行为。

【问题讨论】:

【参考方案1】:

在共享进程模型中,每个节点上的每个ServicePackage 实例都有一个进程。添加或替换服务将重用现有流程。

这样做是为了节省运行服务的节点上的一些(进程级)开销,因此托管更具成本效益。此外,它还支持服务的端口共享。

您可以通过在应用程序清单中配置“独占进程”模式来更改此(默认)行为,这样每个副本/实例都将在单独的进程中运行。

<Service Name="VotingWeb" ServicePackageActivationMode="ExclusiveProcess">

正如您所提到的,您可以监视CancellationToken 以中止单独的工作线程,以便它们可以在服务停止时停止。

更多信息about the app model here 和 configuring process activation mode。

【讨论】:

以上是关于Service Fabric 中的 Stateless Worker 服务在同一进程中重新启动的主要内容,如果未能解决你的问题,请参考以下文章

Service Fabric 中的 actorevent 都有哪些限制?

Azure Service Fabric 中的 NodeType 和 ScaleSet 有啥区别

Service Fabric 中的 Web API 损坏

Azure Service Fabric 中的可扩展工作线程

Azure DevOps 中的 Service Fabric 生成的输出不正确

Service Fabric 中的 Stateless Worker 服务在同一进程中重新启动