微服务相关知识整理

2 minute

分布式锁实现方式

  1. 基于数据库实现分布式锁
    1. 悲观锁:select … for update
    2. 乐观锁:版本号递增(CAS)
  2. 基于 Redis 实现分布式锁
    1. 初始化锁的时候,使用 setnx k v,并使用 expire 命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的 value 值为一个随机生成的 UUID,通过此在释放锁的时候进行判断;
    2. 获取锁的时候设置一个获取的超时时间,若超过这个时间则放弃获取锁;
    3. 释放锁的时候,通过 UUID 判断是不是该锁,若是该锁,则执行 delete 进行锁释放。
  3. 基于 Zookeeper 实现分布式锁
    1. 创建一个目录 mylock;
    2. 线程 A 想获取锁就在 mylock 目录下创建临时顺序节点;
    3. 获取 mylock 目录下所有的子节点,然后获取比自己小的兄弟节点,如果不存在,则说明当前线程顺序号最小,获得锁;
    4. 线程 B 获取所有节点,判断自己不是最小节点,设置监听比自己次小的节点;
    5. 线程 A 处理完,删除自己的节点,线程 B 监听到变更事件,判断自己是不是最小的节点,如果是则获得锁。

雪花算法