一. Zookeeper:

Zookeeper 是一个高性能,分布式,开源分布式协调应用服务。他提供了简单的原始功能,如:同步,配置管理,集群管理,命名空间等。服务器基于Java语言开发,基于TCP协议进行通信,有Java客户端。

基本概念:

1. 集群角色:

  • Leader: 为服务提供读和写(集群的主节点)
  • Follower: 提供读服务,所有的写服务都要交给Leader角色,参与选举
  • Observer: 提供读服务,不参与选举,一般是为了增强ZK的读并发能力

2. 会话(Session)

  • ZK的服务端和ZK的服务器之间的连接(实质就是TCP连接)
  • 通过心跳检测客户端的存活
  • 接受来自服务器的watch事件通知
  • 可以设置超时时间

3. 数据节点(Znode)

  • 不是机器的意思
  • ZK树形结构中的节点,用于存储数据
  • 持久节点
  • 临时节点

 

二. 分布式:

A distributed sysytem consists of multiple computers that communicate through a network and interact with each other with a common goal.

  • 多台计算机构成
  • 计算机之间通过网络相互通信
  • 彼此进行交互
  • 完成共同的目标

三. 分布式系统协调问题:(类似交通管理)

  •  协调: 多个节点完成同一个动作(An act multiple nodes perform together)
  •  举例:
  1. 集群成员的管理(Group membership)
  2. 锁(locking)
  3. 选举(Leader Election)
  4. 同步(Synchroniztion)
  5. 订阅发布(Publisher/Subscriber)

四. ZK数据模型:

zookeeper做服务发现和注册 python zookeeper服务器功能_配置文件

  • 分层结构
  • 树形结构中的每个节点叫做Znode
  • 每个Znode都有数据,也可以有子节点
  •  节点路径,斜线分割,没有相对路径
  • 通过数据结构的stat来存贮数据的变化,ACL的变化和时间戳
  • 数据发生变化时,版本会递增
  • 可以对ZK中的数据进行读写操作

五. ZK典型应用场景介绍

  1. 数据的发布和订阅,数据配置中心到ZK(和ActiveMQ功能类似)
  2. 负载均衡(nginx),其本质利用ZK的配置管理功能, 步骤: 
  • 服务提供者把自己的域名及IP的端口映射注册到ZK中
  • 服务的消费者通过通过域名从ZK中获取相应的IP及端口
  • 当服务提供者宕机时,对应的IP域名映射就会少一个
  • Dubbo框架就是使用ZK作为注册中心,实现路由和负载

在分布式系统里,我们会把一个服务应用分别部署到n台服务器上,这些服务器的配置文件是 相同的,如果配置文件的配置选项发生变化,那 么我们就得一个个去改这些配置文件,如果我们需要改的服务器比较少,这些操作还不是太麻烦,如果我们分布式的服务器特别多,比如某些大型互联网公司的 hadoop集群有数千台服务器,那么更改配置选项就是一件麻烦而且危险的事情。这时候zookeeper就可以派上用场了,我们可以把 zookeeper当成一个高可用的配置存储器,把这样的事情交给zookeeper进行管理,我们将集群的配置文件拷贝到zookeeper的文件系统 的某个节点上,然后用zookeeper监控所有分布式系统里配置文件的状态,一旦发现有配置文件发生了变化,每台服务器都会收到zookeeper的通 知,让每台服务器同步zookeeper里的配置文件,zookeeper服务也会保证同步操作原子性,确保每个服务器的配置文件都能被正确的更新。

     3. 命名服务: 在分布式系统中,命名服务(Naming Service)类似于J2EE中的JNDI的效果: 在分布式环境下,命名服务更多地是资源定位,并不是真正的实体资源,其本质是用到ZK中的配置和查找

     4. 分布式协调和通知

  • 通过watch和通知实现
  • 分布式锁
  • 分布式事务

     5. 集群管理(Solar. Kafka. dubbo)

  • 当前集群中机器的数量
  • 集群中机器的运行状态
  • 集群中节点的上下线操作
  • 集群节点的统一配置

      6.分布式锁: 通过ZK实现排它锁和共享锁

      7. 分布式队列: FIFO(一般用MQ实现)

 

学习,总结,沉淀,提高。