zookeeper入门-概述

一、分布式协调技术

在介绍zookeeper之前,先简单的介绍一下分布式协调技术,什么是分布式协调技术呢,简单的说就是解决分布式中多进程之间的同步控制,让它们有序的访问某个临界资源,防止造成脏数据现象。如果多个进程在同一台计服务器之中,那么可以用调度算法和锁解决,但是在多台服务器的时候也就是分布式环境下是需要考虑网络问题的,比如说网络延迟等。在分布式环境下我们该怎么解决呢?这个就需要用到分布式协调技术了。分布式环境下的锁就是分布式锁,分布式锁是分布式协调技术的核心。分布式锁该怎么实现呢?

二、面临的问题

在单一服务器下我们可以通过调度实现访问的先后顺序,但是在分布式环境下是不是也可以按照单一服务器的方式调度呢?答案是不行的,因为:网络是不可靠的。
比如,在同一台机器上,你对一个服务的调用如果成功,那就是成功,如果调用失败,比如抛出异常那就是调用失败。但是在分布式环境中,由于网络的不可靠,你对一个服务的调用失败了并不表示一定是失败的,可能是执行成功了,但是响应返回的时候失败了。还有,A和B都去调用C服务,在时间上 A还先调用一些,B后调用,那么最后的结果是不是一定A的请求就先于B到达呢? 这些在同一台机器上的种种假设,我们都要重新思考,我们还要思考这些问题给我们的设计和编码带来了哪些影响。还有,在分布式环境中为了提升可靠性,我们往 往会部署多套服务,但是如何在多套服务中达到一致性,这在同一台机器上多个进程之间的同步相对来说比较容易办到,但在分布式环境中确实一个大难题。

三、分布式应用

这里写图片描述
分布式应用的优点
可靠性 - 单个或几个系统的故障不会使整个系统出现故障。

可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。

透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。

分布式应用的挑战
竞争条件 - 两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。

死锁 - 两个或多个操作等待彼此无限期完成。

不一致 - 数据的部分失败。

四、zookeeper概述

什么是zookeeper呢?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件。提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

五、基于Zookeeper实现分布式锁

基于zookeeper临时有序节点可以实现的分布式锁。

大致思想即为:每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。 判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。 当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。

来看下Zookeeper怎么解决锁的问题。

1、锁无法释放?使用Zookeeper可以有效的解决锁无法释放的问题,因为在创建锁的时候,客户端会在ZK中创建一个临时节点,一旦客户端获取到锁之后突然挂掉(Session连接断开),那么这个临时节点就会自动删除掉。其他客户端就可以再次获得锁。

2、非阻塞锁?使用Zookeeper可以实现阻塞的锁,客户端可以通过在ZK中创建顺序节点,并且在节点上绑定监听器,一旦节点有变化,Zookeeper会通知客户端,客户端可以检查自己创建的节点是不是当前所有节点中序号最小的,如果是,那么自己就获取到锁,便可以执行业务逻辑了。

3、不可重入?使用Zookeeper也可以有效的解决不可重入的问题,客户端在创建节点的时候,把当前客户端的主机信息和线程信息直接写入到节点中,下次想要获取锁的时候和当前最小的节点中的数据比对一下就可以了。如果和自己的信息一样,那么自己直接获取到锁,如果不一样就再创建一个临时的顺序节点,参与排队。

4、单点问题?使用Zookeeper可以有效的解决单点问题,ZK是集群部署的,只要集群中有半数以上的机器存活,就可以对外提供服务。

主要参考:
1、https://www.cnblogs.com/wuxl360/p/5817471.html
2、https://www.cnblogs.com/austinspark-jessylu/p/8043726.html
3、https://www.w3cschool.cn/zookeeper/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值