一 概述
在很多场景中,我们为了保证数据的最终一致性,我们会借助分布式事务或者分布式锁来实现。
二 分布式锁的使用意义
在单机应用中,当我们需要对某个共享变量进行多线程同步访问的时候,我们可以借助锁的机制来完成响应资源的并发访问。
但是当我们在分布式系统中,我们需要将一个应用部署到多台机器上进行负载均衡处理的时候,可能对系统中的某个变量在每台机器上都分配一个内存,当多台服务器上的应用都接收到操作同一变量的请求的时候,由于每个请求都是访问不同内存中的同一个变量,这时候的变量就不存在共享了,也就是不具备可见性。
为了保证一个方法或者属性在高并发的情况下的同一时间只能被同一个线程执行,在传统单机应用单机部署的情况下,我们可以使用并发处理的功能进行互斥控制。
但是原单机应用部署的系统被演化成分布式集群系统之后,由于分布式系统是分布在不同机器上的多线程,多进程操作,此时单机部署使用锁策略就会失效。
基于上述问题,我们需要借助一种跨机器的互斥机制来控制共享资源的访问,此时我们就可以借助分布式锁来实现。
三 分布式锁的必备条件
1. 在分布式系统环境中,一个上锁的方法同一时间只能别一个机器的一个线程执行,也就是需要在同一时间被一个进程某一个线程执行。
2. 高性能,高可用的获取锁与释放锁,其中包括具有可重入性,具备锁失效机制,同时需要防止死锁。
3. 具备非阻塞锁的特性,即没有获取锁的时候将直接返回获取锁失败。