写点什么

【5 分钟背八股】ZooKeeper 和 Reids 做分布式锁的区别?

作者:java易二三
  • 2023-08-16
    湖南
  • 本文字数:450 字

    阅读完需:约 1 分钟

Reids:

  1. Redis 只保证最终一致性,副本间的数据复制是异步进行(Set 是写,Get 是读,Reids 集群一般是读写分离架构,存在主从同步延迟情况),主从切换之后可能有部分数据没有复制过去可能会 「丢失锁」 情况,故强一致性要求的业务不推荐使用 Reids,推荐使用 zk。

  2. Redis 集群各方法的响应时间均为最低。随着并发量和业务数量的提升其响应时间会有明显上升(公网集群影响因素偏大),但是极限 qps 可以达到最大且基本无异常

ZooKeeper:

  1. 使用 ZooKeeper 集群,锁原理是使用 ZooKeeper 的临时顺序节点,临时顺序节点的生命周期在 Client 与集群的 Session 结束时结束。因此如果某个 Client 节点存在网络问题,与 ZooKeeper 集群断开连接,Session 超时同样会导致锁被错误的释放(导致被其他线程错误地持有),因此 ZooKeeper 也无法保证完全一致。

  2. ZK 具有较好的稳定性;响应时间抖动很小,没有出现异常。但是随着并发量和业务数量的提升其响应时间和 qps 会明显下降。

总结:

  1. Zookeeper 每次进行锁操作前都要创建若干节点,完成后要释放节点,会浪费很多时间;

  2. 而 Redis 只是简单的数据操作,没有这个问题。

用户头像

java易二三

关注

还未添加个人签名 2021-11-23 加入

还未添加个人简介

评论

发布
暂无评论
【5分钟背八股】ZooKeeper和Reids做分布式锁的区别?_redis_java易二三_InfoQ写作社区