Zeebe可以作为代理集群运行,形成对等网络。
在这个网络中,所有代理都有相同的责任,没有单一的失败点。
Gossip 成员关系协议
Zeebe实现了Gossip 协议,以了解哪些代理当前是集群的一部分。
使用一组众所周知的引导brokers程序来引导集群,其他brokers程序可以连接到该brokers程序。 要实现此目的,每个brokers必须至少有一个引导brokers作为其配置中的初始联系点:
---
cluster:
initialContactPoints: [node1.mycluster.loc:26502]
当brokers首次连接到集群时,它会从初始接触点获取拓扑,然后开始与其他brokers进行通讯。 brokers在重新启动时保持本地群集拓扑。
Raft共识和复制协议
为了确保容错,Zeebe使用Raft协议跨机器复制数据。
数据分为分区(分片)。 每个分区都有许多副本。 在副本集中,领导者由Raft协议确定,该协议接收请求并执行所有处理。 所有其他brokers都是被动的追随者。 当领导者变得不可用时,跟随者会透明地选择新的领导者。
集群中的每个borker可能同时是不同分区的领导者和追随者。在理想情况下,这会导致客户流量均匀分布在所有代理中。
Commit
在处理分区上的新记录之前,必须将其复制到仲裁(通常是大多数)关注者。 此过程称为commit。 即使在单个代理完全丢失数据的情况下,提交也可确保记录持久。 提交的确切语义由Raft协议定义。