技术专题讨论第四期总结:漫谈分布式锁 | Spring For All

190 阅读4分钟
原文链接: www.spring4all.com

技术专题讨论历史

漫谈分布式锁

目前很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。基于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

好了,下一期的技术专题讨论,我们再见👋👋👋