【发布时间】:2018-01-23 23:15:15
【问题描述】:
我正在尝试迁移到现有的服务结构解决方案。部分原因是侦听队列的工作人员数量。例如我有一些队列:
Task1_Queue, Task2_Queue ... TaskN_Queue
对于每个队列,都有一些处理它们的消息的逻辑,比如说工人。他们执行不同的任务,例如生成巨大的报告文件并上传到Azure Storage 或在数据库中进行小幅更新。
问题是如何设计服务以使工作人员具有良好的可扩展性。我的想法是:
选项 1 - 每个队列都有单独的无状态服务。没有简单的方法来自动扩展单个服务。
选项 2 - 将工作人员实现为单独的参与者,并使用单一无状态服务来侦听队列和调用参与者。优点 - 开箱即用的自动缩放,对于来自队列的每条消息,都会创建新的参与者。缺点 - 演员将是一次性的。
【问题讨论】:
-
任务运行之间是否需要保留数据?如果是这样,演员就变得不那么可行了。
-
不,基本上工作人员获取请求消息以某种方式处理它并返回执行
-
至于选项 1:您可以创建服务的多个实例以进行横向扩展。所以你可以有多个服务实例处理同一个队列
-
选项 1 的问题是无法创建新实例并根据负载动态删除它们
-
无状态服务一般不是1-1和一个集群节点吗?如果在您的场景中是这样,您可以专门为服务创建一个节点类型并将规模集配置为根据所需的指标(cpu 使用情况、内存使用情况等)自动重新平衡
标签: c# azure-service-fabric azureservicebus service-fabric-actor service-fabric-stateless