一种方法是创建一个无状态服务,负责将消息推送到 EventHub。每次 Actor 接收到来自设备的消息(顺便问一下,他们如何与 Actor 通信?),Actor 调用无状态服务。反过来,无状态服务将负责为每个服务创建、维护和处置一个 EventHubClient。Reliable Service 在处理传入消息时不会像 Reliable Actor 那样引入相同的“开销”。如果对于您的应用程序而言,消息以与生成消息的顺序完全相同的顺序到达 EventHub 很重要,那么您必须使用有状态服务和可靠队列来执行此操作。(请注意,另一方面,这并不能保证 Actor 能够以与生成消息相同的顺序完成处理传入消息)
instance count
然后,您可以通过试验( https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-availability-services ) 来微调解决方案,以确保您有足够的实例处理传入消息的吞吐量。有多少实例大致取决于每个节点的节点数和核心数,尽管其他因素也可能会影响。
设备与您Actors
的Actors
通信,然后与 通信Service
(如果您想将消息排队,可能是无状态或有状态的,见下文),每个服务管理一个EventHubClient
可以将消息推送到EventHub
.
如果您的集群无法支持此服务的足够高的实例计数(稍微简化:更多实例 = 更高吞吐量),那么您可能需要将其创建为有状态服务并将消息放入可靠队列中服务然后让RunAsync
服务按顺序处理队列。这可能会承受性能峰值的压力。
Service Fabric Azure-Samples WordCount展示了如何使用不同的分区来使来自 Actor 的消息针对不同的实例(或真正的分区)。
一般的提示是不要尝试将 Actor 用于所有事情(但对于正确的事情,它们很棒并且可以大大降低复杂性),Reliable Services 模型支持更多的场景和要求,并且可以真正补充您的 Actor(而不是尝试让 Actor 做一些他们并非真正为之设计的事情)。