0

作为消息传递框架(至少一次、最多一次、恰好一次),Aeron 给了我什么样的消息传递保证?

4

2 回答 2

3

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

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

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

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

于 2021-08-09T04:31:49.007 回答
3

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

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

于 2021-08-09T12:27:32.530 回答