扩展 Aeron Cluster
如何扩展一个基于 Aeron 的撮合引擎,取决于你的交易所处于哪个成熟阶段。这里有两种模型,而随着你的成长,正确的选择也会随之改变。先从简单做起,到了非拆不可的时候再拆分。
本页讨论的是扩展拓扑,而非线缆层面的运行机制。关于 Aeron 内部原理——集群、归档(archive)、日志复制——请参阅 The Aeron Files。
早期阶段:单集群、多交易对
Section titled “早期阶段:单集群、多交易对”一家年轻的交易所把所有东西都跑在一处。一个撮合引擎、一个 Aeron Cluster,所有交易对都装在里面。
这能为你带来两个实实在在的好处。
优点:
- 强一致性以及跨交易对逻辑(例如,跨交易对的保证金计算)
- 运维简单——只有一个集群需要管理
而代价会在之后、在负载压力下才显现出来。
缺点:
- 扩展瓶颈——所有交易对共享同一份吞吐量预算
- 故障爆炸半径——某个交易对逻辑里的一个 bug 可能拖垮所有交易对
吞吐量天花板才是致命问题。每个交易对都在争抢同一份单集群吞吐量预算,于是你最繁忙的交易对和最冷清的交易对共担同一命运。一本火热的 BTC/USDT 订单簿会吃掉 ETH/USDT 所需要的余量,而你无法在不把容量同时分给所有交易对的前提下,单独给某一个交易对更多容量。
成熟阶段:单机多集群
Section titled “成熟阶段:单机多集群”一家成熟的交易所会把每个交易对拆分到各自独立的 Aeron Cluster 中。
如今每个交易对都能按自己的节奏扩展。
优点:
- 按交易对实现横向扩展
- 故障隔离——某个交易对出问题不会波及其他交易对
- 每个交易对可独立调优与版本管理
对尾延迟的收益是实打实的:一个吵闹的交易对再也无法影响另一个交易对的 p99,因为它们不再共享同一份吞吐量预算。你还可以独立调优每个集群——高交易量的交易对和清淡的交易对可以采用不同的配置,而不必让所有交易对迁就同一套折中方案。
但隔离是有代价的。
缺点:
- 跨交易对协调的痛点(需要外部机制来处理跨交易对保证金等)
- 运维复杂——有 N 个集群需要管理
一句话概括这一权衡
Section titled “一句话概括这一权衡”所以决策规则很简单。当一致性和简单性比容量更重要时,就跑单集群。当你撞上吞吐量天花板或需要故障隔离时,就拆成每个交易对一个集群——并且在动手之前,先为外部协调层预留好成本。