zookeeper分布式锁
方案1:
算法思路:利用名称唯一性,加锁操作时,只需要所有客户端一起创建/test/Lock节点,只有一个创建成功,成功者获得锁。解锁时,只需删除/test/Lock节点,其余客户端再次进入竞争创建节点,直到所有客户端都获得锁。
特点:这种方案的正确性和可靠性是ZooKeeper机制保证的,实现简单。缺点是会产生“惊群”效应,假如许多客户端在等待一把锁,当锁释放时候所有客户端都被唤醒,仅仅有一个客户端得到锁。
方案2:
算法思路:临时顺序节点实现共享锁
客户端调用create()方法创建名为“locknode/guid-lock-”的节点,需要注意的是,这里节点的创建类型需要设置为EPHEMERAL_SEQUENTIAL。
客户端调用getChildren(“locknode”)方法来获取所有已经创建的子节点,同时在这个节点上注册上子节点变更通知的Watcher。
客户端获取到所有子节点path之后,如果发现自己在步骤1中创建的节点是所有节点中序号最小的,那么就认为这个客户端获得了锁。
如果在步骤3中发现自己并非是所有子节点中最小的,说明自己还没有获取到锁,就开始等待,直到下次子节点变更通知的时候,再进行子节点的获取,判断是否获取锁。
特点:适合小集群分布式。集群大会耗时严重。
方案3:
算法思路:临时顺序节点实现共享锁的改进实现
对于加锁操作,可以让所有客户端都去/lock目录下创建临时顺序节点,如果创建的客户端发现自身创建节点序列号是/lock/目录下最小的节点,则获得锁。否则,监视比自己创建节点的序列号小的节点(比自己创建的节点小的最大节点),进入等待。
对于解锁操作,只需要将自身创建的节点删除即可。
特点:利用临时顺序节点来实现分布式锁机制其实就是一种按照创建顺序排队的实现。这种方案效率高,避免了“惊群”效应,多个客户端共同等待锁,当锁释放时只有一个客户端会被唤醒。
开源包menagerie :对方案3的一个封装,直接拿来用,貌似11年以后没更新过------》不建议使用。最新github:https://github.com/sfines/menagerie。
重头戏来了,我们curator包已经封装好了,直接使用即可。-------------》建议使用。具体curator实现原理+测试,后续再分析。
相关文章
- HMS Core Discovery第17期直播预告|音随我动,秒变音色造型师
- 机器学习服务文本翻译能力升级,中文直译模型让译文表达更地道!
- 如何快速开发一个健康助手,实时守护用户健康
- 应用缺少POI数据,如何开发地点深度信息?
- App切换到后台后如何保持持续定位?
- 如何给玩偶建模并让它跳个舞?
- 图片上的文字模糊难辨,怎么才能一键变清晰?
- 运动健康服务场景事件订阅,让应用推送“更懂用户”
- 突破次元壁垒,让身边的玩偶手办在屏幕上动起来!
- 程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
- HMS Core分析服务智能运营6.5.1版本上线
- 华为分析&联运活动,助您提升游戏总体付费
- 手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
- 七夕活动浪漫上线,别让网络拖慢和小姐姐的开黑时间
- AI智能剪辑,仅需2秒一键提取精彩片段
- 携手HMS Core分析服务,以数据助力游戏高效增长
- AI目标分割能力,无需绿幕即可实现快速视频抠图
- HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
- HMS Core Discovery第16期回顾|与虎墩一起,玩转AI新“声”态
- 如何让照片中的人物笑起来?HMS Core视频编辑服务一键微笑功能,让人物笑容更自然