Aeron 可以提供什么类型的消息传递保证?

What type of message delivery guarantees Aeron can provide?

作为消息传递框架,Aeron 提供什么消息传递保证(至少一次,最多一次,恰好一次)?

从这些方面考虑 Aeron 并不能真正帮助您理解,因为 Aeron 在可靠性选项方面非常灵活 - 特别是当还考虑存档和集群时。最好的回答是“最多一次”,但这隐藏了很多细节。

正如 README.md 中所述,Aeron 是第 4 层协议。因此,可靠性选项类似于您使用 TCP 获得的选项。只要远程端还活着并且在心跳,丢失的消息就会重新传递。但是,可以放宽此一般要求。对于多节点分布(多播和 MDC),流量控制设置会影响可靠性。例如,使用 max 策略意味着如果其中一个接收者报告它是最新的,则流量控制 window 可以向前移动,而其他较慢的接收者可能最终会丢失无法裸露的数据。即使使用 min 策略,长时间没有响应的较慢的接收器也可能会退出流量控制组并被抛在后面。还有一些选项可以禁用接收方的 nakking,因此任何损失都将被填补。

在这些情况下允许恢复是 Archive 的用武之地,因为它允许存储消息以启用“延迟加入”行为。因此,如果一旦存档确认存储了一条消息,那么您可以认为这实际上是“恰好一次”。

集群通过使用仲裁协议将此提升到一个新的水平,以防止在节点故障的情况下丢失消息。

没有消费应用程序的合作,任何消息传递系统都无法提供有保证的传递。这种合作由与 Aeron Cluster 一起运行的集群服务提供。

Aeron Archive 提供消息的持久存储,Aeron Cluster 使用 Raft 协议对此进行扩展,以提供少数集群的容错能力。包含最终应用程序需要集群服务实现的合作。这种合作可以扩展到外部应用程序,但需要专门的技能和理解才能确保保证。