初学ZooKeeper

Kiyotaka Wang Lv3

初学ZooKeeper

什么是ZooKeeper?

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

ZooKeeper应用场景

很多分布式协调服务都可以用 ZooKeeper 来做,其中典型应用场景如下:

  • 配置管理(configuration management):如果我们做普通的 Java 应用,一般配置项就是一个本地的配置文件,如果是微服务系统,各个独立服务都要使用集中化的配置管理,这个时候就需要 ZooKeeper。
  • DNS 服务
  • 组成员管理(group membership):比如上面讲到的 HBase 其实就是用来做集群的组成员管理。
  • 各种分布式锁

ZooKeeper 适用于存储和协同相关的关键数据,不适合用于大数据量存储。如果要存 KV 或者大量的业务数据,还是要用数据库或者其他 NoSql 来做。

为什么 ZooKeeper 不适合大数据量存储呢?主要有以下两个原因:

  1. 设计方面:ZooKeeper 需要把所有的数据(它的 data tree)加载到内存中。这就决定了ZooKeeper 存储的数据量受内存的限制。这一点 ZooKeeper 和 Redis 比较像。一般的数据库系统例如 MySQL(使用 InnoDB 存储引擎的话)可以存储大于内存的数据,这是因为 InnoDB 是基于 B-Tree 的存储引擎。B-tree 存储引擎和 LSM 存储引擎都可以存储大于内存的数据量。
  2. 工程方面:ZooKeeper 的设计目标是为协同服务提供数据存储,数据的高可用性和性能是最重要的系统指标,处理大数量不是 ZooKeeper 的首要目标。因此,ZooKeeper 不会对大数量存储做太多工程上的优化。

参考

ZooKeeper 入门看这篇就够了 - 武培轩的文章 - 知乎 https://zhuanlan.zhihu.com/p/98852358

  • 标题: 初学ZooKeeper
  • 作者: Kiyotaka Wang
  • 创建于 : 2023-07-17 15:39:50
  • 更新于 : 2023-07-17 15:47:48
  • 链接: https://hmwang2002.github.io/2023/07/17/chu-xue-zookeeper/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。