分布式协调技术
随着发展我们在一台机器上运行的程序任务越来越重,资源请求越来越大,根据不同的情况主要有如下的解决方案一个是负载技术,一个是分布式技术
负载技术:主要解决资源使用压力
分布式技术:主要是把应用任务横向切分,跑在不同的机器上通过rpc协作为外部提供整体服务。
在以上的技术中主要面临的问题有:1,数据同步,2,分布式进程协作
zookeeper是其中一种可以为上述问题提供有效的解决方案的技术框架,所以我们下面先认识它。
ZooKeeper架构
核心组件
Server:zk集群服务端,数目一般选择为奇数(3,5,7)
Leader:通过选举算法确定,zk中的选举是精华,本人能力有限,怕说不清楚,所有不做讨论,作用发起投票,下达决议,更新系统
Follower:接受客户连接,读写请求,发给leader,参与投票,返回客户端结果
Observer:同步leader
Client:使用者,发起连接,读写请求。
ZooKeeper数据结构
层次化的目录结构
每个节点在ZK中叫做znode
znode可以包含数据和子节点(临时类型的节点不能有子节点)
znode中的数据可以有多个版本,可以通过版本查询数据
znode包含临时(ephemeral)和持久(persistent)两种类型每种类型都支持顺序节点
znode的类型在创建时确定后就不能修改
节点属性
cZxid: 是节点的创建时间所对应的Zxid格式时间戳。
mZxid:是节点的修改时间所对应的Zxid格式时间戳。
version:节点数据版本号
cversion:子节点版本号
aversion:节点所拥有的ACL版本号
ZooKeeper服务中操作
Watch触发器
ZooKeeper可以为所有的读操作设置watch,这些读操作包括:exists()、getChildren()及getData()。watch事件是一次性的触发器,当watch的对象状态发生改变时,将会触发此对象上watch所对应的事件。watch事件将被异步地发送给客户端,并且ZooKeeper为watch机制提供了有序的一致性保证。理论上,客户端接收watch事件的时间要快于其看到watch对象状态变化的时间。
哪些框架使用到了ZooKeeper
HDFS HA
HBase
Kafka
Spark
dubbo
……
ZooKeeper应用举例
至此你了解了zk,那么我们能做什么?
1,选举
2,分布式锁
3,分布式队列
4,分布式事务
5,分布式隔离
6,数据同步
…..
选举,分布式锁可以应用在具有单点故障的问题中利用选举确定唯一的active,利用分布式锁防止“脑裂”
分布式队列可应用在分布式共享资源消费中
分布式事务,可以应用在rpc协作中
由于刚开始写博客,技术有限很多想法不能表述,上面的实现如果你感兴趣可以和我讨论!!!