每日新知——Zookeeper

495 阅读3分钟

什么是 ZooKeeper

ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案。设计目的是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的系统,并以一系列简单易用的原子操作提供给用户使用。

ZooKeeper 提供功能

  • 分布式服务注册与订阅:在分布式环境中,为了保证高可用性,通常同一个应用或同一个服务的提供方都会部署多份,达到对等服务。而消费者就需要在这些对等的服务器中选择一个来执行相关的业务逻辑,比较典型的服务注册与订阅,如 Dubbo。
  • 分布式配置中心:发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到 ZooKeeper 节点上,供订阅者获取数据,实现配置信息的集中式管理和动态更新。
  • 命名服务:在分布式系统中,通过命名服务客户端应用能够根据指定名字来获取资源、服务地址和提供者等信息。
  • 分布式锁:这个主要得益于 ZooKeeper 为我们保证了数据的强一致性。

ZooKeeper 搭建模式(三种)

  • 单机模式:zoo.cfg 中只配置一个 server.id 就是单机模式了,此模式一般用在测试环境,如果当前主机宕机,那么所有依赖于当前 ZooKeeper 服务工作的其他服务器都不能进行正常工作;
  • 伪分布式模式:在一台机器启动不同端口的 ZooKeeper,配置到 zoo.cfg 中,和单机模式相同,此模式一般用在测试环境;
  • 分布式模式:多台机器各自配置 zoo.cfg 文件,将各自互相加入服务器列表,上面搭建的集群就是这种完全分布式。

ZooKeeper 特性

  • 顺序一致性(Sequential Consistency):来自相同客户端提交的事务,ZooKeeper 将严格按照其提交顺序依次执行;
  • 原子性(Atomicity):于 ZooKeeper 集群中提交事务,事务将“全部完成”或“全部未完成”,不存在“部分完成”;
  • 单一系统镜像(Single System Image):客户端连接到 ZooKeeper 集群的任意节点,其获得的数据视图都是相同的;
  • 可靠性(Reliability):事务一旦完成,其产生的状态变化将永久保留,直到其他事务进行覆盖;
  • 实时性(Timeliness):事务一旦完成,客户端将于限定的时间段内,获得最新的数据。

ZooKeeper 实现分布式锁

  • 客户端先给 ZooKeeper 节点发送写请求;
  • ZooKeeper 节点将写请求转发给 Leader 节点,Leader 广播给集群要求投票,等待确认;
  • Leader 收到确认,统计投票,票数过半则提交事务;
  • 事务提交成功后,ZooKeeper 节点告知客户端。

end

如有问题,请留言或者发送邮件,感谢您的阅读