zookeeper-1

简述

在分布式系统应用中,由于跨越不同主机,各系统性能不一,发生 子系统状态改变、网络通信 等问题,由各系统分别处理显得冗余臃肿,且难以应付。 如:在典型主从架构中,主节点故障,从节点故障,网络通信故障,都需要分别作出选举判断处理,各子系统设计应该专注自身系统能,而整体管理交由管理员。

在单机系统中,各子系统以进程的方式运行在同一个操作系统中,操作系统充当了管理员的角色,调度进程,提供通信机制。 zookeeper则为分布式系统提供了解决方案,监控协调各子系统工作, 开放调用接口,供子系统使用。

基本概念

节点

zookeeper中用节点存储数据,节点以类似文件系统的树形方式组织,形成一个节点树。客户端(各个子系统)可通过zookeeper提供的api来创建、删除、修改节点。 节点有四种类型:

监视

对于节点数据及子节点的变化,有两种处理方式: 一是客户端轮询,这样会造成服务端压力。 二是观察者模式,客户端向服务器注册感兴趣的事件,这里称作设置监视点(Watcher), 当事件变化时异步通知。 客户端通过对节点znode设置监视点来接收通知,每个监视点只能触发一次次,客户端必须在每次通知后重新设置。

版本

每个节点带有一个版本号信息,随着数据变化版本号自增,当多个客户端对同一个节点修改时,只有版本号一致才可修改成功,很容易利用其实现乐观锁。

会话

客户端与服务器通过tcp连接形成一个会话,zookeeper会不断发送ping请求来维持会话。客户端可以设置会话过期时间,会话过期时,临时节点被删除。当会话无法通信时,zookeeper会透明的将会话转移到另外一个服务器,并且保持之前会话的状态。


zookeeper也有单机模式和集群模式,集群模式采用了主从机制,其中有三种角色:

领导者(leader)

由众多跟随者投票选举产生,所有的写请求都交给领导者。 如果领导者挂掉,将会从跟随者种重新选举。

跟随者(follower)

负责投票选举,从领导者处复制同步数据,客户端可从此读数据

观察者(observer)

不参与投票,仅同步领导者的数据,提供给客户端读取,分担压力。

0

Powered by Jekyll and Theme by solid