分布式锁实现原理

  1. 分布式锁

假设3个线程访问一个文件资源,对这个文件更新或读取操作,可以通过synchronized或lock进行线程同步,解决多线程情况下并发问题。

但是在分布式架构,都会是多模块独立部署不同机器,多进程情况下,怎么弄?
比如3个系统,订单,发货,结算都要去操作同一个文件

分布式锁
1.通过数据库的方式解决

create table lock(
id
methodname 唯一约束

插入一条lock记录或得锁,删除这条lock这条记录,释放锁
1.1 弊端,删除失败,其他的进程都获取不到这个锁了
1.2 不是可重入锁,需要改造

  1. 通过zookeeper
    2.1 以树形结构存储数据
    locks下面插入节点,零时有序节点
    2.2 优势 有一个watch会监控节点,一个节点失效,会被删除,会启用用下一个节点

  2. 基于redis
    3.1 命令setnx,只会在key不存在的情况下为可以设置值,并且返回0或1,存在返回1,谁先设置这个值,谁先获取这个锁

猜你喜欢

转载自www.cnblogs.com/james0/p/9280457.html