分布式锁

177 阅读1分钟

1 zookeeper

  • zookeeper是什么

    • 维护分布式环境下各个系统的状态机
    • 服务注册,服务发现
    • 分布式锁
    • 少量关键数据分布式存储
  • zk系统模型

/
├── /api
│   ├── member-api
│   ├── order-api
│   └── product-api
├── /db
│   ├── mysql
│   └── redis
└── /services
    ├── member-srv
    ├── order-srv
    └── product-srv
  • zk节点类型

    • 持久化节点
    • 临时节点
    • 持久化顺序节点
    • 临时顺序节点
  • zk分布式锁

    • ZAB一致性协议 - 保证节点状态信息同步
    • 临时顺序节点 - 保证每个请求获取锁的线程都能创建节点,且节点编号递增
    • 线程与zk连接断开时可以自动删除该线程创建的临时节点,后续线程便可以创建一个最小编号的节点而获取锁
    • 获取锁的并发量受限于zk可以承受的节点创建并发量

2 分布式锁 - etcd

  • etcd可以做什么

    • 分布式kv
    • 服务发现/注册
    • 分布式锁
    • 发布订阅
  • 分布式锁原理

    • 创建全局唯一待加锁的prefix_lock_key
    • 客户端创建lease
    • leaseId + prefix_lock_key构成全局唯一session
    • opGet获取所有revision

image.png

3 分布式锁 - redis

  • 分布式实现方案
  • red lock
  • 解锁
if redis.call('get',KEYS[1]) == ARGV[1] then 
   return redis.call('del',KEYS[1]) 
else
   return 0 
end

4 分布式锁 - mysql