Certification-based 复制使用组通信和事务排序技术来实现同步复制。
事务在单个节点或副本中乐观被执行, 然后在提交时, 它们运行协调的证书过程以强制实现全局一致性。它在广播服务的帮助下实现全局协调, 在并发事务中建立全局唯一编号。
Certification-based复制要求
不是所有数据库都能实现Certification-based 复制,它需要数据库的某些特性
事务型数据库 它要求数据库是事务性的。具体地说, 数据库可以回滚未提交的更改。
原子性变化 它要求复制事件以原子的改变数据库。具体地说, 数据库操作系列必须全部发生, 否则不会发生任何事情。
全局顺序一致性 它要求全局顺序一致复制事件。具体地说, 它们以相同的顺序应用于所有实例。
Certification-based复制如何工作
certification-based 复制的主要思想是, 事务在到达提交点之前按常规执行, 假设没有冲突。这称为乐观执行。
certification-based复制
当客户端发出 commit 命令时, 但在实际提交之前, 由事务和更改行的主键对数据库所做的所有更改都将收集到 write-set 中。然后, 数据库将此 write-set 发送到所有其他节点。
然后, write-set 使用主键进行验证测试。这是在群集中的每个节点上完成的, 包括源自 write-set 的节点。它确定节点是否可以应用 write-set。
如果证书测试失败, 节点将丢弃 write-set, 而群集将回滚原始事务。如果测试成功, 则会提交事务, 并将 write-set 应用到群集的其余部分。
在GALERA 集群中certification-based 复制
在GALERA 集群中实现 certification-based 复制取决于事务的全局排序。
GALERA 集群在复制期间为每个事务分配一个全局序号序列号或 seqno,当事务到达提交点时,节点检查序列号与上一个成功事务的序号,检查在两序号之间未提交的事务和本事务是否有冲突,且检查在此期间的所有交易记录是否主键冲突,如果检测到冲突, 则验证测试失败。
所有复制副本接收事务的顺序相同。因此, 所有节点都对事务的结果做出相同的操作。启动事务的节点随后可以通知客户端应用程序是否已提交事务。