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

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. Redis进阶实践之五Redis的高级特性
  2. MySQL的大分页查询该如何优化?
  3. nginx 转发_除了转发和负载均衡,nginx又一次让他玩出新高度
  4. Qt文档阅读笔记-Q_CLASSINFO官方解析与实例
  5. 渐变颜色Qt学习:QPainter之渐变填充
  6. AutoLayout的三种设置方式之——NSLayoutConstraint代码篇
  7. 关于C++ 中大小端和位域
  8. # 华为考试心路历程#一名小白的HCNP数通取证记录
  9. oracle--merge
  10. 【语音识别】基于matlab GUI声纹识别【含Matlab源码 1022期】
  11. 一个免费功能强大的谷歌翻译api
  12. 吉首 - 最亲密的x个人
  13. 常见容错机制:failover、failback、failfast、failsafe
  14. 小程序商品数据对象累加加入购物车缓存导致的数组嵌套在上一层数组中的问题
  15. STM32F4-usb_slave u盘
  16. 人工智能与复杂网络_为什么我与智能手机的关系变得复杂
  17. 1.mac解除端口占用
  18. 区块链系统:点对点交易原理
  19. Bowe BSB 1005/B
  20. 用Python绘制奥运五环

热门文章

  1. oracle数据库配置失败,ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法...
  2. hive源码之get_json_object
  3. 使用JShaman进行JS代码加密时,保留字的作用
  4. php为什么没有npm,在phpstorm的terminal中输入npm显示不是内部或外部命令
  5. 设置光晕html,王者出征版本画面设置 界面动画及局外角色光晕设置方法介绍
  6. matlab数字图像处理----形态学图像处理
  7. OmniLayer / omn​​icore API 中文版
  8. 学习自定义View(二)仿58同城加载
  9. 绩差股成妖 妖王一日暴涨900%
  10. iqtree+ggtree绘制进化树教程