ZOOKEEPER

1、什么是Zookeeper?

Zookeeper是一个高效的分布式协调服务,暴露了一些公用服务,比如命名/配置管理/同步控制/群组服务等。

  • 需要注意的是Zookeeper不适合存储大量数据,通常就存储一些配置信息。动态的监听服务器的变更并且反馈给服务器

Zookeeper是一个高可用的分布式管理与协调框架,基于ZAB算法(原子消息广播协议)的实现。保证了分布式环境中数据的一致性,也正是基于这样的特性使得Zookeeper成为了解决分布式一致性问题的利器。Zookeeper最少需要3个节点,官方推荐为奇数个,偶数个会影响到paxos选举的结果。

  • 顺序一致性:从一个客户端发起的事务请求,最终将会严格的按照其发起的顺序应用到Zookeeper中。
  • 原子性:所有事务请求的处理结果在整个集群中所有的机器上应用情况是一致的,也就是说要么整个集群都应用了一个事务,要么都没有应用。绝对不会出现部分应用该事务,另一部分没有应用的情况出现。
  • 可靠性:一旦服务器成功的应用了一个事务,并且完成对客户端的相应,那么该事务所引起的服务器端状态会被一致保留下来。除非有另外一个事务对其作出更改。
  • 实时性:通常所说的实时性就是指一旦事务被成功的应用,那么客户端就能立刻从服务器上获取变更后的数据,Zookeeper仅仅只能保证在一段时间内,客户端最终一定可以从服务器端获取最新的数据状态。

2、Zookeeper的设计目标

  • 简单的数据结构。Zookeeper就是按照属性结构来进行互相协调。
  • 可以构建集群。一般Zookeeper集群通常由一组机器构成,一般3-5台机器就可以组成一个Zookeeper集群了,只要半数以上的机器可以正常工作,那么集群就可以继续提供服务。当然如果半数以上机器不能正常工作那么就无法提供服务了。
  • 顺序访问。对于每个客户端的每一个请求,都会给其分配一个全局唯一的递增编号,这个编号决定了先后顺序,应用程序可以使用Zookeeper的特性来实现更高层次的同步。
  • 高性能。Zookeeper的数据全量存储在内存中,并且直接服务于所有的非事务请求,尤其是在读操作为主的场景下非常突出。在jmeter压力测试(100%读请求的场景下),QPS可以达到12-13万。

3、Zookeeper的组成

ZK server根据其身份特性分为三种:leader,Follower,Observer,其中Follower和Observer又统称为Leaner(学习者)

  • Leader:负责服务器的Writer类型请求。
  • Follower:负责客户端的reader类型请求,参与leader选举。
  • Observer:特殊的“Follower”,可以接受客户端的reader请求,但是不会参与选举。

4、Zookeeper应用场景

从设计模式的角度来看,Zookeeper是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都很关心的数据,然后接受观察者的注册,一旦数据发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现了集群的Master/Slave管理模式。

  • 配置管理

配置的管理在分布式应用环境中很常见,比如平常的应用系统中经常会遇到如机器的配置列表、运行时的开关配置、数据库配置信息等。这些全局配置信息通常具备3个特性。

  1. 数据量比较小
  2. 数据内容在运行动态时会发生变化
  3. 集群中各个节点共享信息,配置一致
  • 集群管理

由Zookeeper来管理集群,不仅可以维护当前集群机器中的服务状态,并且可以为你选出一个“总管”来帮你管理集群,实现集群的容错功能。

  1. 希望知道当前集群中究竟有多少机器工作。
  2. 对集群中每天集群的运行状态进行数据收集。
  3. 对集群中每台集群进行上下线的操作。
  • 发布与订阅
  • 数据库切换
  • 分布式日志的收集
  • 分布式锁、队列管理等
原文地址:https://www.cnblogs.com/xiaowenshu/p/10421747.html