羊群是一种很散乱的组织,平时在一起也是盲目地左冲右撞,但一旦有一只头羊动起来,其他的羊也会不假思索地一哄而上,全然不顾前面可能有狼或者不远处有更好的草。因此,“羊群效应”就是比喻人都有一种从众心理,从众心理很容易导致盲从,而盲从往往会陷入骗局或遭到失败。

Zookeeper分布式锁场景中的羊群效应指的是所有的客户端都尝试对一个临时节点去加锁,当一个锁被占有的时候,其他的客户端都会监听这个临时节点。一旦锁被释放,Zookeeper反向通知添加监听的客户端,然后大量的客户端都尝试去对同一个临时节点创建锁,最后也只有一个客户端能获得锁,但是大量的请求造成了很大的网络开销,加重了网络的负载,影响Zookeeper的性能。

解决方案可以参考curator框架创建Zookeeper分布式锁的机制。原理图如下:

步骤为:

  1. 所有客户端都尝试去创建临时有序节点以获取锁
  2. 序号最小的临时有序节点获得锁
  3. 未获取到锁的客户端给自己的上一个临时有序节点添加监听
  4. 获得锁的客户端进行自己的操作,操作完成之后删除自己的临时有序节点
  5. 当监听到自己的上一个临时有序节点释放了锁,尝试自己去加锁
  6. 操作完成之后释放锁
  7. 之后剩下的客户端重复加锁和解锁的操作

其中最核心的思路就是获取锁时创建一个临时顺序节点,顺序最小的那个才能获取到锁,之后尝试加锁的客户端就监听自己的上一个顺序节点,当上一个顺序节点释放锁之后,自己尝试加锁,其余的客户端都对上一个临时顺序节点监听,不会一窝蜂的去尝试给同一个节点加锁导致羊群效应。

Zookeeper分布式锁中的羊群效应及解决方案相关推荐

  1. Zookeeper分布式锁遇到惊群效应如何解决

    一.什么是惊群效应 举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来.这样,每扔一块 ...

  2. 分布式架构-ZK分布式锁中死锁和羊群效应解决方案

    分布式架构-ZK分布式锁中死锁和羊群效应解决方案 一.效果演示 有两个接口,GetTest2和GetTest3,分别都加上了@BxcZkLock注解,其中value 代表是否包含事物,如果是,则会在方 ...

  3. 分布式锁(一) Zookeeper分布式锁

    什么是Zookeeper? Zookeeper(业界简称zk)是一种提供配置管理.分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功能而 ...

  4. Zookeeper分布式锁

    原文作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ 原文连接:https://www.cnblogs.com/luxiaoxun/p/4889764.html ...

  5. Zookeeper 分布式锁

    Zookeeper 分布式锁 在分布式场景中,采用传统的锁并不能解决跨进程并发的问题,所以需要引入一个分布式锁,来解决多个节点之间的访问控制 一.Zookeeper如何解决分布式锁 基于Zookeep ...

  6. zookeeper 分布式锁原理

    zookeeper 分布式锁原理: 1 大家也许都很熟悉了多个线程或者多个进程间的共享锁的实现方式了,但是在分布式场景中我们会面临多个Server之间的锁的问题,实现的复杂度比较高.利用基于googl ...

  7. 分布式锁原理——redis分布式锁,zookeeper分布式锁

    首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在j ...

  8. 关于分布式锁原理的一些学习与思考:redis分布式锁,zookeeper分布式锁

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:牛人 20000 字的 Spring Cloud 总结,太硬核了~ 作者:队长给我球. 出处:https://w ...

  9. Zookeeper分布式锁的使用

    由于公司引入了dubbo+zookeeper框架,里面不可避免的引入的zookeeper分布式锁,所以自己大致了解了一下.由于是自己研究,有不正确的地方还请大佬批评指正. 首先先介绍一下自己对zook ...

最新文章

  1. java生成缩略图类源码
  2. java 不包含 字母和数字_Java String - 查看字符串是否仅包含数字而不包含字母
  3. mxnet基础到提高(51)-Activation激活函数
  4. codeforces G - Almost Increasing Array 动态规划、动态开点线段树
  5. ROC和AUC介绍以及如何计算AUC
  6. Java 垃圾回收机制
  7. 数据库原理与应用 基于SQL Server 2005pdf
  8. [Zju 2112][逆序对统计] 线段树(四) {线段树扩展}
  9. Android源码中学习文档如何查看
  10. 接口测试之抓包工具fidder
  11. 单片机最小系统着实让人着迷
  12. guid主分区表损坏如何处理_恢复guid分区表【免费找回技巧与步骤】
  13. element ui vue el-input el-button 键盘回车事件
  14. CocoaPods Trunk 发布
  15. matlab小课堂2
  16. web前端期末大作业:基于HTML+CSS+JavaScript制作鲜花礼品在线购物网站设计(19页)
  17. HDU 5976 Detachment
  18. 无人机避障四种常见技术中,为何大疆首选双目视觉
  19. IOS-Svn-Cornerstone 终端 命令行
  20. 爬虫-----爬虫的爬,爬虫的虫

热门文章

  1. 本科学历职称计算机最低通过,本科学历以下的,对不起啦……
  2. 着眼业务全局,英特尔专注全能力覆盖
  3. 英特尔推出功能强大的FPGA加速卡
  4. SLAM面试问题总结(转)
  5. 生日快乐用计算机语言怎么表达,抖音很火的生日短句 生日快乐说说致自己
  6. 智能终端新物种诞生!可以穿戴的努比亚阿尔法来啦
  7. 什么是Ecovadis认证评级?
  8. codeforces962F Simple Cycles Edges
  9. 中高级工程师Java开发!java服务端面试题
  10. php表格大小怎么控制,如何使用mPDF和PHP防止PDF格式的表格大小调整?