Zookeeper学习:Zookeeper应用场景之分布式锁

本文详细介绍了如何借助Zookeeper实现分布式锁,包括排它锁和共享锁。排它锁通过创建临时节点并监听子节点变化来实现,而共享锁则通过创建临时顺序节点并判断读写顺序来确保并发控制。文章还讨论了羊群效应问题,并提出了一种改进的分布式锁实现方式,以减少不必要的Watcher通知和性能开销。
摘要由CSDN通过智能技术生成

1. 分布式锁的介绍

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁了。

在平时的实际项目开发中,我们往往很少会去在意分布式锁,而是依赖于关系型数据库固有的排他性来实现不同进程之间的互斥。这确实是一种非常简便且被广泛使用的分布式锁实现方式。然而有一个不争的事实是,目前绝大多数大型分布式系统的性能瓶颈都集中在数据库操作上。因此,如果上层业务再给数据库添加一些额外的锁,例如行锁、表锁甚至是繁重的事务处理,那么就会让数据库更加不堪重负。

2. 排它锁

排它锁(Exclusive Locks,简称X锁),又称为写锁或独占锁,是一种基本的锁类型。如果事务T1对数据对象 O1加上了排它锁,那么在整个加锁期间,只允许事务T1对O1进行读取和更新操作,其他任何事务都不能再对这个数据对象进行任何类型的操作——直到T1释放了排它锁

从上面的基本概念中,我们可以看到,排他锁的核心是如何保证当前有且仅有一个事务获得锁,并且锁被释放后,所有正在等待获取锁的事务都能够被通知到。

2.1 借助ZooKeeper实现排它锁

  • 定义锁
    在通常的Java开发编程中,有两种常见的方式可以用来定义锁,分别是synchronized 机制和 JDK5 提供的 ReentrantLock。然而,在ZooKeepe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值