Zookeeper
理解
小岛(Island)——ZK Server Cluster
议员(Senator)——ZK Server
提议(Proposal)——ZNode Change(Create/Delete/SetData…)
提议编号(PID)——Zxid(ZooKeeper Transaction Id)
正式法令——所有ZNode及其数据
总统——ZK Server Leader
ZAB协议
原子广播协议: 原子,要么成功,要么失败;广播:过半机制;
队列:FIFO,顺序性; 队列能够保证消息的顺序性;
Zookeeper分布式锁
首先要明确分布式锁要解决的:几个问题; (准确快速和压力)
- 所有client只能有一个人能够获取到锁;
- 锁释放问题,(获取锁的client异常了该如何释放锁和执行完毕释放锁);
- 锁过期了该如何处理;
- 获取到锁后执行的业务代码是否要加上分布式事务(可能会少卖);
- 锁释放了该如何通知其他客户端;
5.1 主动轮询,心跳 — 弊端:延迟,压力;
5.2 watch 解决延迟问题 — 弊端:压力;
5.3 sequence + watch:watch前一个客户端, 如果锁释放,zk只给前一个客户端发事件回调;