织梦建站教程下载,wordpress文章点击数插件,公司门户app,凡客诚品app下载前言
通过前序两篇关于ZooKeeper的介绍和总结#xff0c;我们可以大致理解了它是什么#xff0c;它有哪些重要组成部分。
今天#xff0c;博主特别介绍一下ZooKeeper的一个核心应用场景#xff1a;分布式锁。 应用ZooKeeper
Q#xff1a;什么是分布式锁
首先了解一下我们可以大致理解了它是什么它有哪些重要组成部分。
今天博主特别介绍一下ZooKeeper的一个核心应用场景分布式锁。 应用ZooKeeper
Q什么是分布式锁
首先了解一下什么是锁。
1. 什么是锁
在我们日常开发中可能会经常使用多线程并发以提高系统性能加速代码的处理效率。那么问题也就来了当在有限的资源、网络环境下如果一味追求并发势必拖垮整个系统甚至宕机。 所以Java在推出之时就提供了多种锁机制以避免或降低上述问题的发生。 也就是一句话总结什么是锁 通过有序的处理手段实现线程安全和数据准确保障系统正常运转。 当然Java中的锁机制已经很多介绍了这里不再展开。
2. 什么是分布式锁
所谓分布式锁无非是在分布式环境下如何使用“锁”的机制。所以在这里我们重点讲一下分布式环境下ZooKeeper如何使用锁保障线程安全和数据准确避免并发带来的问题。 3. 基础概念
3.1 Znode-节点 Znode其实就是ZooKeeper文件节点因为是多层树状结构因此每层节点可以理解为一个Node节点。ZooKeeper提供了四类Node
Znode类型Znode简介PERSISTENT永久节点已持久化至存储即使客户端断开也存在EPHEMERAL临时节点客户端断开即删除PERSISTENT_SEQUENTIAL永久节点按序顺序编号EPHEMERAL_SEQUENTIAL临时节点按序顺序编号
3.2 Event-事件 ZooKeeper提供了四种监听事件当节点数据或结构变化时即通知客户端
节点创建节点删除节点数据修改子节点变更
Q如何实现分布式锁
通过以上对“分布式锁”的解剖我们应该知道了它是如何运转的其实核心是两个点
顺序排队加锁解锁
这不巧了ZooKeeper的树形数据结构正好完美实现了以上2点。
1. 先来先加锁 首先假如小张作为第一名通过ZKZooKeeper行业简称创建了第一个锁。这里所谓的“锁”其实一个全局唯一的文件即ZNode。创建ZNode完成后即可以通过锁定目标资源进行后序操作。如果此刻小王来了怎么办
2. 后来等解锁 小王作为按顺序第二名前来索取资源当然无法如愿以偿那得先看小张答不答应了。但小张此刻正手忙脚乱哪有闲功夫管什么小王小李…的事。所以ZK想到了一个好办法“你可以不主动那我主动好了”。通过给小王加“跟踪器”就可以随时随地知道小王的一举一动了。
如果小王拿完资源后ZK会通过事件通知小王那么小王当然可以顺理成章的索取资源了。当然前提是小王退出竞争行列如何退出 简单一句话“拿来什么带走什么”。ZNode乃身外之物真正做到了“无痕访问”了。
通过以上机制ZK提供了一整套加锁解锁的方法所以在分布式场景下它自然能够合理有效地解决了资源竞争问题。 结语
在并发环境下往往经常遇到资源竞争问题当你考虑如何解决竞争时ZooKeeper是一个合理的选择。当然集群部署是必要唯一的考虑是成本是否足够。
好了博主通过上中下三篇揭秘ZooKeeper从功能、内核、应用三个方向分别对它加以说明。希望各位盆友可以学到进而用到实际工作中。感谢捧场欢迎订阅与分享 历史回顾 微服务实战系列之ZooKeeper中微服务实战系列之ZooKeeper上微服务实战系列之MQ微服务实战系列之通信微服务实战系列之J2Cache微服务实战系列之Cache技巧篇微服务实战系列之MemCache微服务实战系列之EhCache微服务实战系列之Redis微服务实战系列之Cache微服务实战系列之Nginx技巧篇微服务实战系列之Nginx微服务实战系列之Feign微服务实战系列之Sentinel微服务实战系列之Token微服务实战系列之Nacos微服务实战系列之Gateway微服务实战系列之加密RSA微服务实战系列之签名Sign