zookeeper分布式锁原理分析

zookeeper由来

zookeeper 是外国人研究出来一款分布式服务协调组件,这就说来话长了,当时Google 研发出来一款叫Google Chubby 的组件,为了解决,分布式服务之间一致性问题,以及分布式锁 但是这货开发出来之后,代码不开源,别人也用不了,然后这时候 雅虎大哥就出来了,心想 你不开源,我就自己干,然后一气之下研究出来一款叫做zookeeper分布式协调组件,它基于 Google -Chubby 的思想 研发出来,后来雅虎把它捐赠给了appache 软件基金会 免费让大家使用,造福全世界。

zookeeper能干什么

zookeeper 功能很强大,可以用来实现服务注册中心 以及配置中心 分布式锁 后期会详细介绍一下zookeeper的中心思想和zookeeper原理

为什么引入分布式锁

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。

在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行。在单机环境中,Java中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的Java Api只能解决单一进程下线程之间的数据安全问题,而分布式锁解决的是进程和进程之间的数据安全问题。

项目里面如何利用zookeeper分布式锁

假如三台客户端分别是clientA,clientB,clientC 。同时执行task任务,要保证一个其中只有一个一台机器才能执行任务,如果三台同时都执行的话,会产生数据不一致性问题,这时候就需要分布式锁,解决进程和进程之间的数据一致性问题,zk锁也是刚好解决了这个问题,利用zk上面服务注册临时有序节点,和利用zk watcher机制,来保证同一时刻只有客户端才能执行任务。

 

zookeeper分布式锁原理分析_第1张图片

首先clientA,clientB,clientC 在zk上面三个临时有序节点,分别是clientA 0000001,clientB 0000002,clientC 0000003 节点编号最小的获得锁并执行,执行完之后临时节点就会自动销毁调,这时候通过wathcer 监听机制,就会唤醒clientB节点,重新获得锁,然后执行任务,以此类推。

zookeeper curator 客户端分布式锁源码分析

啥也不逼逼了,直接干源码

zookeeper分布式锁原理分析_第2张图片

zookeeper分布式锁原理分析_第3张图片

zookeeper分布式锁原理分析_第4张图片

 

zookeeper分布式锁原理分析_第5张图片

 

zookeeper分布式锁原理分析_第6张图片

zookeeper分布式锁原理分析_第7张图片

zookeeper分布式锁原理分析_第8张图片

那么是如何唤醒阻塞线程的那

zookeeper分布式锁原理分析_第9张图片

你可能感兴趣的:(zookeeper)