AKKA 是否尝试在内存中执行与 Azure 服务总线队列在磁盘上执行的操作相同的操作?

Is AKKA trying to do in memory the same as Azure Service Bus Queue does on disk?

像 AKKA.net 这样的 actor 模型给 table 带来了很多好处,比如可伸缩性、反应性、内存缓存等......当我试图将 AKKA 与 Azure Service Bus Queues,我在 Azure 服务总线中看到了几乎相同的主要优势,除了内存中缓存的优势。

在生产环境中,AKKA 需要多个具有更多内存的 VM,处理能力可以在内存中处理数百万个 actor。对于 Azure 服务总线队列,不需要功能强大的主机。即使我们使用演员模型,也不需要进行监督或创建演员系统来管理数百万演员。 Azure 服务总线的可伸缩性是自动的。

总而言之 运行,我认为 Azure 服务总线队列具有成本效益。随着负载的增加,无需 IT 管理员对其进行管理。不需要多核的强大系统。

是 AKKA actor 模型 suitable 用于具有多核系统的本地数据中心,而不是 suitable 用于在考虑成本时可以使用 Azure 服务的应用程序效果?

我会说 Akka.net 的邮箱组件所做的工作与 Azure 服务总线队列(或 MSMQ 的工作)在原则上可能相似。如果服务总线队列(或 MSMQ)将持久化(或者在 MSMQ 的情况下,持久化队列 - 而不是内存队列),则存储的消息和开箱即用的 Akka 邮箱将不会。

但这就是相似之处结束的地方......服务总线没有参与者、处理器、分发的概念——它只是一个消息传递解决方案。

如果您希望实现可能以持久性(和事务性 "actors")为目标的参与者,那么我建议您不要使用 Akka.net,而是使用 MassTransit 或 nServiceBus。两者都是非常有能力的产品,虽然它们的性能不等于 Akka.net(MT 和 nSB 序列化并持久化到磁盘,Akka.net 没有)它们非常有能力和坚固,并且会在 [= =24=] 崩溃,因为整个工作项目将在一个事务中,这将导致消息 reinserted/reprocessed 作为默认行为。

我长期以来一直将 Azure Table 存储视为一个很好的事件存储,但如果你希望像我一样保留命令记录,我会使用服务总线(MassTransit、nServiceBus)就像您的需求在本质上比 "near-realtime" 和 "multiprocessor" 更 "transactional"。

个人看法,