前言
分布式锁在当下微服务架构的系统中有着举足轻重的作用,特别是金融支付系统这些和钱相关强一致的系统被广泛的使用,下面我将介绍先真实的支付系统中如何利用分布式锁来实现一些特殊的需求。
1. 分布式锁
1.1 什么是分布式锁
想必做web开发的或多或少都会听过、或者用过,这里我就简单介绍下分布式锁的场景和实现方式,如果需要详细的实现可以稍微搜一下非常的多。
所谓分布式锁在我看来就是能让同一资源在不同机器、应用中保持互斥:
如果理解java中的锁机制,其实就是将java锁做成跨服务器,从而协调各个实例。
分布式锁实现方式有很多,如redis、zookeeper,选择主要看场景:
了解cap原则的同学应该知道 分布式系统 只能做到AP(可用性牺牲强一致)或者CP(强一致牺牲可用),这也对应了 redis和zookeeper 这两种分布式锁应用的场景,但是目前看来redis分布式锁的应用会广泛一些,因为现在系统很多都是异步的根本无法保证强一致性,而是最终一致性,而redis锁的效率也高于zookeeper,所以一般互联网公司实际场景应用会趋向于redis
分布式锁实现原理:
其实分布式锁的实现原理非常简单,这里来一个比喻: 就好比大家去占坑,发现已经有人了就走了以redis分布式