Nivelle 开拓视野冲破艰险看见世界 身临其境贴近彼此感受生活

Zookeeper学习(三)之应用

2017-04-12

ZK典型应用

数据发布/订阅

即所谓的配置中心,顾名思义就是发布者将数据发布到ZK的一个或一些列节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。

发布、订阅系统一般有两种模式,分别是推(Push)模式和拉(Pull)模式。在推模式中,服务端主动将数据更新更新发送给所有订阅的客户端;而拉模式则是由客户端主动发起请求来获取最新数据,通常客户端都采用定时进行轮询拉取的方式。

Zookeeper采用的是推拉结合的方式:客户端向服务端注册自己需要关注的节点,一旦该节点数据发生变更,那么服务端就会向相应的客户端发送Watcher事件通知,客户端接收到这个消息通知之后,需要主动到服务端获取最新的数据。

如果将配置信息存放到ZK上进行集中管理,那么通常情况下,应用在启动的时候都会主动到ZK服务器上进行一次配置信息的获取,同时,在指定节点上注册一个Watcher监听,这样一来,但凡配置信息发生变更,服务端都会实时通知到所有订阅的客户端,从而达到实时获取最新配置信息的目的。

这些全局配置信息通常具有以下特征:

  • 数据量小

  • 数据内容在运行时会发生动态变化

  • 集群中机器共享,配置一致

例子数据库切换:

1 .首先需要将初始化数据存储到ZK上,一般情况下,我们可以在zk上选取一个节点用于配置存储.例如 /app1/database_config

image

我们需要集中管理的配置信息写入到该数据节点中去:

DBCP dbcp.driverClassName=com.mysql.jdbc.Driver dbcp.dbJDBCUrl=jdbc:mysql://1.1.1:3306/taokeeper …

2 . 配置获取

集群中每天机器在启动初始化阶段,首先会从上面提到的zk配置节点上 读取数据库信息,同时,客户端还需要在该配置节点删注册一个数据变更的Watcher监听,一旦发生数据变更,所有订阅的客户端都能获取到数据变更通知

  1. 在系统运行中,可能出现需要切换数据库的情况,这时就需要进行配置变更.借助zk,我们只需要读对zk上配置节点的内容进行更新,zk就能帮助我么你讲数据变更通知发送到各个客户端,每个客户端收到变更通知后,就可以重新进行数据获取.

负载均衡

定义:用来对多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源进行分配负载,以达优化资源使用、最大吞吐率、最小化响应时间和避免过载的目的。

一种动态的DNS服务(Dynamic DNS)

可以看作是一个超大规模的分布式映射表,用于将域名和IP地址进行一一映射,进而方便人们通过域名来访问互联网站点。

域名配置:

首先需要在ZK上创建一个节点2来进行域名配置。

image

从上图中看到,每个应用都可以创建一个属于自己的数据节点作为域名配置的跟节点,例如/DDNS/app1,在这个节点上,每个应用都可以将自己的域名配置上去:

#单个IP:PORT
192.168.0.1:8080
#多个IP:PORT
192.168.0.1:8080,192。168.0.2:8080

域名解析:

传统的DNS解析中,我们不需要关心域名的解析过程,所有这些工作都交给了系统的域名和IP地址映射机制(本地HOST绑定)或是专门的域名解析服务器.但是在DDNS中,域名的解析过程都是由每个应用自己负责的。通常应用都会首先从域名节点获取一份IP地址和端口的配置,进行自行解析。同时,每个应用还会在域名节点注册一个数据变更Watcher监听,以便及时收到域名变更的通知。 域名变更:

在DDNS中,我们只需要对指定的域名节点进行更新操作,zk就会想订阅的客户端发送这个事件通知,应用在接收到这个事件通知后,就会再次进行域名配置的获取.

自动化的DNS服务:

当域名对应的IP地址发生变化的时候,还需要人为介入去修改域名节点上的Ip地址和端口.自动化DNS服务就是为了解决这个问题的:

image

整个系统是zk集群,负责数据的存储以及一系列分布式协调.在这个模型中,我们将目标IP地址和端口抽象为服务的提供者,那些需要使用域名解析的客户端则被抽象为服务的消费者.

  • 域名注册

域名注册主要针对服务提供者来说的.域名注册过程可以简单地概括为:每个服务提供者在启动过程中,都会把自己的域名信息注册到Register集群中去.

  1. 服务提供者通过SDK提供的API接口,将域名,ip地址和端口发送给Register集群.例如:A机器用于提供serviceA.xxx.com,于是它就向Register发送一个”域名-IP:port”的映射:”serviceA.xxx.com-192.168.0.1:8080”

  2. Register获取到域名,Ip地址和端口配置后,根据域名将信息写入对应的Zk域名节点中

  • 域名解析

域名解析是针对服务消费者来说的,正好和域名注册过程相反:服务消费者在使用域名的时候,会想Dispatcher发出域名解析请求.Dispatcher收到请求后,会从zk指定域名节点读取对应的IP:Port列表,通过一定的策略选取其中一个返回给前端应用.

  • 域名探测

域名探测是指DDNS系统需要对域名下所有注册的IP地址和端口进行可用性检测,俗称”健康度检测”.健康度检测一般有两种方法:

1.服务器端主动发起健康度心跳检测,这种方式一般需要在服务器端和客户端之间建立一个TCP长链接

2.客户端主动向服务器端发起健康度心跳检测.

DDNS使用的是服务提供者主动向Scanner进行状态汇报的模式,即每个服务提供者都会定时向Scanner汇报自己的状态.Scanner会负责记录每个服务提供者最近一次的状态汇报时间,一旦超过5秒没有收到状态汇报,那么久认为该IP地址和端口已经不可用,同时开始进行域名清理过程.

命名服务


评论