【博学谷学习记录】超强总结,用心分享|架构师-前置知识-zookeeper基础原理总结

一、前言

本文旨在记录zk重点基础知识点

二、zk简介及基础

2.1 zookeeper是啥?

分布式协调服务

2.2 zookeeper的本质是啥?

本质是文件存储系统+监听(通知)机制

2.3 CAP定理是啥?

cap定理:
C—>consistency 一致性 。白话:写入值到集群后,任何读操作都必须返回同一个值
A—>availability一可用性 。白话:任何节点收到请求后,无论成功失败,都必须做出回应
P—>partiton tolerance分区容错性。 白话:不同节点可能会数据不一致(因为同步失败的关系),当不一致时,系统依然能稳定运行

2.4 zk是cap?ca?cp?

zk是cp模型

2.5 zk的数据节点类型有哪几种?

简单说:持久节点、顺序节点、临时节点
全部类型:
持久
持久顺序
临时
临时顺序
容器
持久 TTL
持久顺序 TTL

2.6 节点属性zxid是什么意思?

事务id:64位数字(前32位是epoch,后32位是事务次数)
值越大,数据同步次数越多,说明值越接近master
eg:0xee41

2.7 为什么原始api用的少?

因为:1、zk的原始api监听只生效一次,所以监听需要反复注册
2、不支持session超时重连

常用curator或zkclient

三、zk应用场景(分布式锁、配置中心、master选举、发布订阅)

3.1 为何用分布式锁?

synchronized是本地锁,只能锁住本地jvm进程中多个线程,对于多个jvm是锁不住的。

1、为了提高效率:防止不同节点做相同的事,浪费资源
2、为了安全:同一时间,只能一个线程去做

3.2 分布式锁常用什么?

分布式锁常用redis和zk,redis:支持并发高,zk:一致性更好

3.3 zk实现分布式锁采用基本思路时,羊群效应是什么意思?

基本思路:
1、某客户端创建临时节点lock
2、其他所有客户端监听该节点
3、锁释放后,事件通知

但会导致一个问题:羊群效应(所有监听的客户端一拥而上抢锁-大量请求,加重了网络负载,影响zk性能)

3.4 升级思路实现zk分布式锁

临时节点改用临时顺序节点
升级思路:
1、所有服务去zk中注册临时顺序节点;
2、判断自己节点是否是最小的那个,最小获取锁;
3、未获取锁的客户端 添加对前一个节点删除事件的监听
4、释放锁/持有锁的客户宕机后,节点被删除;
5、下一个客户端收到通知,重复。

四、选举策略

4.1 zk集群怎么保证数据的一致性?

通过ZAB协议保证,ZAB协议是以Paxos算法为理论基础

ZAB协议有3个角色:
leader:处理事务请求,数据同步
follower:处理非事务请求,具有投票权
observer:处理非事务请求,不具备投票权

4.2 zk啥时候会进入崩溃恢复模式?

zk启动时和leader挂了后
选出新leader,并与过半follower完成数据同步,然后进入消息广播模式

感兴趣自己去看源码 lookForLeader方法逻辑展示了如何选取leader

4.2 选举投票流程?

1、自增选举轮次:首先逻辑时钟都会+1;
2、初始化选票(先清空,再生成选票信息【包括三部分(epoch,zxid,myid)】,初始投给自己);
然后(第3~第6)互相对比选票信息,先比较epoch值,如相同,则比较zxid,最后比较myid,取值大的当选leader;
3、发送初始化选票;
4、接收外部投票;
5、判断选举轮次;
6、选票PK;
7、统计选票-有过半服务器认可了自己的投票则终止投票
8、更新服务器状态-投票终止后,有过半选票则更新为LEADING,否则更新状态为FOLLOWING

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值