Zookeeper学习
Zookeeper
概述
ZooKeeper 是一个分布式协调服务的开源框架。用来解决分布式集群中应用系统的一致性的问题,例如怎样避免同时操作同一数据造成脏读的问题。ZooKeeper 本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树种 的节点进行有效管理里。从而来维护和监控你存储的数据的状态变化。将通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。诸如:统一命名服务(dubbo)、分布式配置管理(solr的配置集中管理)、分布式消息队列(sub/pub)、分布式锁、分布式协调等功能。
架构
一个领导者(Leader),多个跟随者(Follower)组成的集群。
Leader:处理事务请求(写操作),对于 create,setData,delete 等有写操作的请求,则需要统一转发给 leader 处理,leader 需要决定编号、执行操作,这个过程称为一个事务;
Follwer:处理客户端非事务(读操作)请求,转发事务请求给 Leader 参与集群 leader 选举投票2n-1台可以做集群投票
Observer: 观察者角色,观察ZooKeeper集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给Leader服务器处理,不会参与任何形式的投票只提供服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力
特点
-
全局数据一致:每个 server 保存一份相同的数据副本,client 无论链接到哪个 server,展示的数据都是一致的
-
可靠性:如果消息被其中一台服务器接受,那么将被所有的服务器接受。更新后,它将从该时间一直保留,直到客户端覆盖更新
-
顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 server 上消息 a 在消息 b 前被发布,偏序是指如果以个消息 b 在消息 a 后被同一个发送者发布,a 必须将排在 b 前面
-
数据更新原子性:一次数据更新要么成功,要么失败,不存在中间状态
-
实时性:ZooKeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息
-
集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。
数据模型与命名空间
每个节点都是一个ZNode,每个接待你存储数据较小(通常是1m以内),ZNode会维护版本号,每次更改新都会增加