用于处理服务总线队列的有状态或无状态服务
Stateful or Stateless service for processing servicebus queues
我有一个启用会话的 Azure 服务总线队列。我需要某种形式的服务,可以从队列中读取并处理它们并保存结果(在内存中供以后检索)。我们在当前架构中使用 azure servicefabric。关于选择有状态服务还是无状态服务,我很少有疑问。
如果我使用有状态服务,那么根据文档,我的理解是,服务将 运行 在 1 个主节点(假设 1 个分区)和 2 个活动辅助节点上。这意味着,如果我有一个 10 节点的服务结构集群,那么这个有状态服务将主要只使用一个节点 (VM)。
因此,如果我向此有状态服务添加一个侦听器以从队列中读取消息,那么主节点上的该服务将从队列中读取消息,而所有其他剩余的 9 个节点将无法使用。这个对吗?
而如果我使用无状态服务,我可以在所有 10 个节点上创建实例,并且它们都可以侦听队列中的消息并并行处理它们。但是,我将放弃保存结果的选项。
请指教
So if I add a listener to this stateful service to read messages from Queues then that service on primary node will read messages from queues and all other remaining 9 nodes wont be able to utilized. Is this correct?
没错。在有状态服务场景中,只有主副本会执行它的侦听器,并完成工作。其他副本可以以只读模式使用,但它们不会将任何内容写入可靠的集合。
Whereas if I use Stateless service, I can create instances on all 10 nodes and all of them could listen to the message in Queues and process them in parallel.
没错。无状态服务可以并行执行它们的工作,并且不会保留任何状态。这也是为什么没有可用于此 Service Fabric 模型的可靠集合的原因。
However, I will loose the option to save the results.
不一定是真的。您仍然可以将数据保存在 centralized/shared 数据库中,就像过去使用无状态解决方案(例如云服务或 Azure WebApp)一样。
你应该问问自己,你在解决什么问题。如果你有数据分片,Statful 更有意义。如果您没有数据分片 and/or,则需要扩展处理能力,而不是向上扩展,无状态是一种更好的方法。
我有一个启用会话的 Azure 服务总线队列。我需要某种形式的服务,可以从队列中读取并处理它们并保存结果(在内存中供以后检索)。我们在当前架构中使用 azure servicefabric。关于选择有状态服务还是无状态服务,我很少有疑问。
如果我使用有状态服务,那么根据文档,我的理解是,服务将 运行 在 1 个主节点(假设 1 个分区)和 2 个活动辅助节点上。这意味着,如果我有一个 10 节点的服务结构集群,那么这个有状态服务将主要只使用一个节点 (VM)。
因此,如果我向此有状态服务添加一个侦听器以从队列中读取消息,那么主节点上的该服务将从队列中读取消息,而所有其他剩余的 9 个节点将无法使用。这个对吗?
而如果我使用无状态服务,我可以在所有 10 个节点上创建实例,并且它们都可以侦听队列中的消息并并行处理它们。但是,我将放弃保存结果的选项。
请指教
So if I add a listener to this stateful service to read messages from Queues then that service on primary node will read messages from queues and all other remaining 9 nodes wont be able to utilized. Is this correct?
没错。在有状态服务场景中,只有主副本会执行它的侦听器,并完成工作。其他副本可以以只读模式使用,但它们不会将任何内容写入可靠的集合。
Whereas if I use Stateless service, I can create instances on all 10 nodes and all of them could listen to the message in Queues and process them in parallel.
没错。无状态服务可以并行执行它们的工作,并且不会保留任何状态。这也是为什么没有可用于此 Service Fabric 模型的可靠集合的原因。
However, I will loose the option to save the results.
不一定是真的。您仍然可以将数据保存在 centralized/shared 数据库中,就像过去使用无状态解决方案(例如云服务或 Azure WebApp)一样。
你应该问问自己,你在解决什么问题。如果你有数据分片,Statful 更有意义。如果您没有数据分片 and/or,则需要扩展处理能力,而不是向上扩展,无状态是一种更好的方法。