分布式架构中,多个模块之间为了完成相互之间的数据通信,我们会引入ZooKeeper中间件(具体为什么引入ZooKeeper,查看博文:ZooKeeper的起源)
引入集群方式来解决ZooKeeper的单点故障问题(高可用的同时,还能分担请求,满足高性能)
leader ②follower ③observer(角色介绍,参见:ZooKeeper集群角色介绍)
集群中,节点如何和其他节点保证数据一致性?
分布式事务(可以对照数据库事务理解)。
分布式事务的数据一致性协议有: 2PC协议、3PC 协议。
2PC协议
2PC(Two-phaseCommit),当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的 ACID(原子性、一致性、隔离性、持久性)特性,就需要引入一个"协调者"(TM)来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点被称AP。TM 负责调度 AP 的行为,并最终决定这些 AP 是否要把事务真正进行提交;因为整个事务是分为两个阶段提交,所以叫 2PC
我们拿实例来介绍
分布式开发中,有两个模块,分别是用户模块和订单模块,目前我们有一个需求,需要同时调用用户模块和订单模块,调用完成之后,需要同时对两个模块数据进行写操作。
如果在同一个模块中完成该操作,只需要通过Transcation(事务)就可以完成,要么同时成功,要么同时失败。但是在分布式架构中,没有Transcation这个机制,所以引入了一个"协调者"的机制,来解决分布式架构中的事务问题。
如图:
步骤:
①目前准备提交事务,协调者会给每一个参与事务者(用户模块、订单模块)发送一个请求;
②每个参与者收到这个请求后,会给协调者一个回应,是否能够执行这个事务
确定响应,然后协调者会发起commit提交,让参与者发起事务提交(这就是二阶提交,第二次提交)
注意:zookeeper集群,使用ZAB协议中的原子广播机制(参见:ZAB协议),不需要集群中所有节点都给出确定响应才能提交,只要当前集群中过半数节点给确定响应,事务就会提交。
④参与者会回复给协调者一个ACK响应,则说明事务成功
⑤如果一个参与者失败了,则同时失败,协调者会发起rollback提交,进行回滚
ZooKeeper就是通过2PC协议,来完成分布式架构中事务相关操作,来多模块之间的数据一致。
博主写作不易,来个关注呗
求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙
博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ