分布式锁简记

分布式锁:跨进程跨物理节点需要一把公共的锁,单机锁并不能应对这种场景。通过分布式锁把分布式场景下并发混乱的操作退化成串行有序的操作

  • 主动轮询型分布式锁,redis,mysql(不推荐使用易单点故障破坏对称性)
    • 通常以setnx命令(弃用)现推荐set xx xx nx保障互斥性,ex保障安全性,nx保障对称性,引入lua保障原子性,主从保障可靠性
    • 多机部署redlock更可靠(获取超过一半节点的锁才加锁成功),但npc(网络延迟、GC暂停、时钟漂移)下仍不可靠。
    • redisson在获取锁之后,会维护一个看门狗线程保障健壮性,当锁即将过期还没有释放时,不断的延长锁key的生存时间
  • 监听回调型分布式锁
    • etcd:租约保证健壮性,超时可续约。根据revision全局唯一递增键大小获取锁,实现公平锁。watch机制返回最接近的最小锁监听事件,可以感知到锁被释放
    • zookeeper:临时节点用心跳机制保障健壮性,最小顺序节点保障公平锁,监听上一个事件通知客户端锁被释放
    • 追求性能使用redis分布式锁,此基础上增加可靠性使用redlock。追求高可靠高安全性不追求性能使用etcd或者zookeeper。

你可能感兴趣的:(go语言分布式开发,分布式)