zookeeper如何保证数据一致性和数据消费顺序

分布式概念基础

分布式CAP理论就好比分布式领域的牛顿定律,是分布式存储的理论基石。C:一致性,A:可用性,P:分区容错性。分布式系统往往需要部署在不同的服务器,也就存在网络断开的危险,这种网络断开即是网络分区。当网络分区发生时候,两个分布式节点无法正常通信,如果要保证数据一致性,则需要牺牲可用性来同步数据。若保证可用性,则需要牺牲一致性来确保分布式系统可用。所以,当网络分区发生时,一致性和可用性无法全部满足。如zookeeper基于CP,redis基于AP,eureka基于AP原则构建。

如何确保数据一致性?

zookeeper支持ZAB协议,主要作用:1.选举leader 2.同步节点直接的状态达到一致 3.广播消息

各个节点均保存一个事务队列,leader节点是收到请求保存下来,从节点事务队列是leader节点同步过来,所以leader节点事务队列最全,最新。各个节点均有可能成为leader节点,ZAB协议用一个整数表示任期,表示在系统运行过程中经历了多少次选举。用T代表事务,L代表事务队列,E代表任期

1.选举leader

    a.各个从节点广播自己的最大的事务ID

    b.获取其他节点发送的最大事务ID,选取最大事务ID所在的从节点,投票给该从节点

    c.统计所有投票,投票数占一半以上的节点被选举为leader

2.同步数据

   a.各个从节点向leader发送自己的任期E

   b.leader比较任期,选择最大任期E,加1作为当前任期E,并将新的任期E广播给从节点

   c.从节点接收并修改为leader节点同步的任期E,并返回给leader自己的最大的事务队列L

   d.leader接收从节点同步的事务队列L,选择任期最大的事务队列L,如果多个队列任期数据相同,则选择事务编号最大的队列,将该队列作为leader队列,并广播给各个从节点

   e.从节点以leader同步过来的事务队列,替换当前的事务队列,提交执行队列中的事务,至此各个节点数据达到一致,zookeeper正常运行

3.广播

   a.leader节点接收到请求,将事务加入事务队列,并且将事务广播给各个从节点。
   b.从节点接收事务并加入都事务队列,然后给leader发送准备提交请求。
   c.leader接收到半数以上的准备提交请求后,提交事务同时向从节点 发送提交事务请求
   d.从节点提交事务

 

如何确保数据消费顺序?

zookeeper各个节点均可接受请求,若当前节点非leader节点,把事务消息转发给leader节点,并保存事务ID,leader节点收到请求,把请求放在事务队列里面,并通过广播特性将事务同步给从节点,从节点比较事务ID和本身节点事务ID是否一致,若不一致,从节点退出,重新和leader同步。若一致,则响应给leader节点做准备提交commit请求,leader节点收到半数以上ack,则同步从节点提交commit请求。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值