技术专题讨论历史
- 《技术专题讨论第一期总结:微服务中网关(API Gateway)的技术选型》 www.spring4all.com/article/336
- 《技术专题讨论第二期总结:如何对 JPA 或者 MyBatis 进行技术选型》 www.spring4all.com/article/391
- 《技术专题讨论第三期总结:微服务消息中间件的技术选型》 www.spring4all.com/article/416
漫谈分布式锁
目前很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。基于CAP理论,很多系统在设计之初就要对这三者做出取舍。在很多的场景中,比如防重、定时任务以及对共享资源操作等等,都会使用到分布式锁来解决问题。
第四期的漫谈分布式锁持续了一个星期,这期的讨论非常的火爆,评论区的讨论,都可以写成几篇好文章啦,其中不乏有业界专家、大牛的回复,每个评论都分析的很全面,甚至有人冒着被老大发现的危险,贴出了实现Code,真的为你的胆子点赞哦!
下面就依次带大家来看看这些总结:
状元回答(又是来自网红大牛flychao88)
网红”飞超爸爸”再次凭借长而全的回答,登顶这一次的支持首位
他首先列举了两种场景,一种是支付请求前端没有做防重,第二种是订单确认重复提交,消息重复消费
接下去谈到了幂等,那么什么是幂等呢。所谓幂等,简单地说,就是对接口的多次调用所产生的结果和调用一次是一致的。比如查询接口操作,就是幂等的,而有些场景对数据的修改、状态的变更,就不符合幂等性啦
最后讲到了使用数据库锁、zookeeper防重策略以及redis防重策略。而在基于Redis实现分布式锁的流程上,通过Tedis的思想,开发了一套针对分布式锁的双写Redis框架,并介绍了框架的架构、类图、时序图等等。非常全面。只可惜目前没有开源,期待超哥后续可以开源,回馈广大开源爱好者
榜眼回答(来自etjr)
etjr使用简短的话语,分享了他对分布式锁的认识
首先介绍了分布式锁的实现,包含了四种
1、基于Redis的锁
2、基于zookeeper的锁
3、基于consul的锁
4、基于数据库的锁
最后也介绍了自己遇到的真实业务场景:使用定时任务来补偿派钱任务失败的补钱功能
探花回答(来自不知道是否被老大打了的luyunfeng)
luyunfeng谈到程序在单台应用的时候,程序上完全可以用synchronized同步锁来限制多线程对共享资源的访问,但在分布式环境下同步锁无法控制不同进程之间的线程,这种情况下就需要找一种单进程可串行处理的“锁”,
所以产生了分布式锁。并且介绍了三种实现方案
1、zookeeper分布式锁
2、memcached分布式锁
3、redis 分布式锁
接下去,分析了这三种分布式锁的优缺点,也推荐了使用Redis来实现分布式锁
最为精彩的是最后贴出了具体的代码实现,棒棒哒。👍
进士回答(来自whn10200)
结合whn10200的问答,详细分析了分布式锁的三种实现方案,基于数据库、基于zookeeper、基于redis
并且从理解的难易程度角度、从实现的复杂性角度、从性能角度以及从可靠性角度分析了三种实现方式的比较
更为棒的是在Redis实现的原理时,贴出了Redis作者与一位分布式专家针对RedLock实现的激烈讨论,非常刺激
总结
本次的总结,还有lexburner、務急不僅、duqicauc等大牛们的精彩回答,想要了解更多的内容,请移步漫谈分布式锁专题讨论贴,评论区的繁荣景象值得大家一阅:www.spring4all.com/question/15…
后续,社区会整理评论区各位大牛的回答,并整理成文章,组成一个分布式锁的系列分析给大家。
相关推荐:
社区最新发布的系列教程
社区 Spring Security 从入门到进阶系列教程:www.spring4all.com/article/428
社区 Spring Data JPA 从入门到进阶系列教程:www.spring4all.com/article/500
好了,下一期的技术专题讨论,我们再见👋👋👋