【分布式专题】-分布式锁

1.啥是分布式锁?

在传统的单体应用架构中,遇到并发安全性问题时我们可以通过同步锁Synchronized,同步代码块,ReentrantLock等方式都可以解决,但随着业务的发展,单体应用架构不能满足庞大的用户请求量,于是分布式系统应用而生,在分布式系统中,由于每个系统都运行在不同的服务器上,有着不同的Jvm,所以JDK提供的这些并发锁都失效了,我们需要一把新的"全局的锁",让所有的分布式系统共享这把锁,这把锁同一时间内只能被一个系统拥有,拥有锁的系统获得一些相应的权限,其它系统需要等待拥有锁的系统释放锁,然后去竞争这把锁,只有拥有这把锁的系统才具有相应权限.以此来解决业务上一些不安全的问题,比如超卖等.

2.常见的几种分布式锁

分布式锁的实现方式多种多样,比较常见的是基于关系型数据库的实现,基于缓存的实现和基于zookeeper的实现.

本篇主要讲基于Mysql的实现,基于Redis的实现和基于Zookeeper的实现,其他品种的实现暂不讨论.

3.三种实现方式的使用场景

先做一些对比,各位都是明白人,具体该什么场景下用做完对比心里自然有数:

从理解的难易程度角度(从低到高)

数据库 > 缓存 > Zookeeper

从实现的复杂性角度(从低到高)

Zookeeper > 缓存 > 数据库 (主要是因为apache在curator中已经帮我们封装好了一套分布式锁)

从性能角度(从低到高)

数据库>Zookeeper >缓存

从可靠性角度(从低到高)

数据库> 缓存>Zookeeper

从上面各种维度的对比中,很明显,最差的就是基于Mysql的实现,所以大部分场景下是不会去用Mysql实现分布式锁的,至于要不要学,就看你个人了...

4.三种分布式锁实现方式的实现

标题有点绕口,说了那么多,就一起来分别实现下这三种锁,由于牵扯的内容有点多,而且在前面我分别讲过这三种锁的实现,这里再写一遍就显得有点赘余了,而且篇幅会太长,所以直接以超链接形式给出,可以灵活选择自己想学的那一种实现:

①基于Mysql的实现:https://blog.csdn.net/lovexiaotaozi/article/details/83819916

②基于Redis的实现:https://blog.csdn.net/lovexiaotaozi/article/details/83505131

③基于Zookeeper的实现:https://blog.csdn.net/lovexiaotaozi/article/details/83382128

 

如CAP理论所述,在分布式系统中鱼与熊掌是不可兼得的,所以没有最优的实现方式,只有最适合的实现方式,所以请根据自己业务的实际需求灵活选择用哪一种方式去实现.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值