zookeeper 分布式锁的实现及原理
保证线程安全
ZooKeeper初始化示意图
1 public static void main(String[] args) { 2 CuratorFramework curatorFramework = CuratorFrameworkFactory.builder() 3 // 客户端连接任意zk 节点都行,也可以指定集群 4 .connectString(CommonConstants.CONNECT_URL) 5 .sessionTimeoutMs(5000) 6 // 重试策略 7 .retryPolicy(new ExponentialBackoffRetry(1000, 3)) 8 .connectionTimeoutMs(4000).build(); 9 // 表示启动 10 curatorFramework.start(); 11 /** 12 * locks表示命名空间 13 * 14 * 锁的获取逻辑是放在zookeeper上 15 * 当前锁是跨进程可见 16 */ 17 InterProcessMutex lock = new InterProcessMutex(curatorFramework, "/locks"); 18 for (int i = 0; i < 10; i++) { 19 new Thread(()->{ 20 System.out.println(Thread.currentThread().getName() + "->" + "尝试抢占锁"); 21 try { 22 // 抢占锁,没有抢占到,则阻塞 23 lock.acquire(); 24 System.out.println(Thread.currentThread().getName() + "->" + "获取锁成功"); 25 } catch (Exception e) { 26 e.printStackTrace(); 27 } 28 // 释放锁 29 try { 30 Thread.sleep(4000); 31 lock.release(); 32 System.out.println(Thread.currentThread().getName() + "->" + "释放锁成功"); 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 },"t-"+i).start(); 37 } 38 39 }
zookeeper leader 选举
kafka -> master/slave | kafka+zookeeper
-
-
dubbo + zookeeper 配置中心,元数据管理
-
实现分布式锁(Curator)
-
leader 选举(定时任务的互斥执行)
-
leader latch
-
-
zookeeper实际应用以及原理分析
Zookeeper的基本原理
数据模型
-
弱一致性模型
-
2 PC协议(原子性)
-
过半提交
ZABZAB(zookeeper atomic Broadcast)
-
-
数据同步
-
崩溃恢复 (looking)
-
原子广播
-
消息广播
-
Zxid(64)
-
observer(不参与投票和ack,只和leader保持数据 同步)
崩溃恢复
-
选举出新leader(选举谁作为leader)
-
Zxid(*)
-
已经被处理的消息不能丢失
-
被丢弃的消息不能再次出现
如何实现?(leader)
-
zxid最大(和leader选举有关系?)
-
Epoch ->term(raft).zxid()
Zxid(事务id)
-
64位
-
高32位是epoch、低32位代表递增是不编号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗