zookeeper 应用

1.master选举

什么是master选举,假设我们有一个系统A,向外提供服务,并且这个服务必须24小时不间断提供,于是我们选择采用集群,master slave的架构方式,集群中有主机,有备机,由主机向外提供服务,备机负责监听主机的状态,一旦主机宕机,备机必须立刻接管主机继续向外提供服务,这种从备机中选出主机的过程就是master选举。

架构:

这里写图片描述

左边紫色代表zookeeper集群,右边代表三台工作服务器。
它们启动时会首先去Servers节点下创建一个临时节点,并把自己的基本信息写入节点,这个过程叫服务注册;
系统中的其他服务可以获取Servers节点下的字节点列表,来了解当前系统哪些服务器可用,这个过程叫服务发现;
然后这些服务器会尝试去创建Master节点,谁能创建成功,谁就是Master。
所有的备用服务器(slave)必须关注Master节点的删除事件。

程序实现流程:

这里写图片描述

系统核心类:

这里写图片描述

LeaderSelectorZkClient:调度类,启动和停止WorkServer
WorkServer:主工作类
RunningData:描述WorkServer

2.数据的发布和订阅

发布订阅模式是一种一对多的关系,多个订阅对象同时监听某一主题对象,这个主题对象在自身状态发生变化时,会通知所有订阅者对象,使它们能够更新自己的状态,发布方可以和订阅方独立封装,独立改变,当一个对象的改变需要同时改变其他对象,而且他不知道具体有多少个对象需要改变时,可以使用发布订阅模式。
发布订阅模式在分布式系统中的典型应用有配置管理和服务发现。
配置管理:如果集群中的机器拥有某些相同的配置,并且这些配置信息需要动态的改变,可以对配置作统一的管理,让这些机器各自订阅配置信息的改变。
服务发现:对集群中的服务上下线作统一管理,每个工作服务器都可以作为数据的发布方,向集群注册自己的基本信息,而让某些监控服务器作订阅方,订阅工作服务器的基本信息。

架构图:

这里写图片描述

左侧代表zookeeper集群,右侧代表服务器集群,前三个蓝色代表工作服务器,绿色代表管理服务器,最后一个代表控制服务器。
zookeeper中有三类节点
1.Config节点用于配置管理
2.Servers节点用于服务发现,每个Work Server启动时,都会在Server节点下注册一个临时节点
3.command节点
服务器集群:
1.Work Server
可以通过订阅config节点的改变来更新自己的配置
2.Manager Server
通过config节点,下发配置信息
当Monitor,通过监控Servers节点的子节点列表的改变来更新自己内存中工作服务器列表的信息
3.Control Server
通过Control Server由command节点作为中介,来向Manager Server发送控制指令(Control Server向command节点写入命令信息,Manager Server订阅command节点的数据改变事件来监听并执行命令。)

Manager Server 主体流程

这里写图片描述

Work Server 主体流程

这里写图片描述

系统核心类

这里写图片描述

SubscribeZkClient:用于启动WorkServer和ManagerServer
WorkServer:对应WorkServer
ServerConfig:用于记录WorkServer的配置信息
ManageServer:对应ManagerServer
ServerData:用于记录WorkServer的基本信息

3.负载均衡

负载均衡:可以把某种资源的访问,分摊给不同的计算设备,从而减轻单点访问压力。
架构图:

这里写图片描述

浅紫色代表zookeeper集群,右侧上方两个工作服务器,下面两个代表客户端,每台工作服务器启动都会去zookeeper Servers节点下注册一个临时节点,每台客户端启动都会去Servers节点获取可用工作服务器的列表,并通过负载均衡算法,得出一台工作服务器,并与之建立网络连接,客户端与服务端的网络连接采用netty。

客户端实现流程:

这里写图片描述

服务端实现流程:

这里写图片描述

Server端核心类

这里写图片描述

Server:服务端接口
ServerImpl:服务端实现类
RegistProvider:服务端启动注册过程
DefaultRegistProvider:注册过程实现类
ZookeeperRegistContext:zookeeper上下文
ServerHandler:处理与客户端之间的连接
BalanceUpdateProvide:当有客户端建立连接和断开连接都需要修改负载信息
DefaultBalanceUpdateProvide:实现类
ServerRunner:调度类

Client端核心类

这里写图片描述

Client、ClientImpl:客户端类
ClientHandle:处理与服务器之间的通讯
BalanceProvider:为客户端提供负载均衡的算法
AbstractBalanceProvider:抽象的实现
DefaultBalanceProvider:默认的实现
ServerData:服务端和客户端公用的类,服务端会把自己的基本信息个负载打包成ServerData放到zookeeper中,客户端需要去服务端拿到信息,取得他的地址和负载信息
ClientRunner:客户端调度类

4.分布式锁

常说的锁事单进程,多线程的锁,在多线程并发编程中,用于线程之间的数据同步,保护共享资源的访问,
而分布式锁指在分布式环境下,保护跨进程,跨主机,跨网络的共享资源,实现互斥访问,保证一致性。

架构图

这里写图片描述

locker是zookeeper中的一个数据节点,node_1,node_2,node_3,代表locker下的一些列顺序节点,client_1,client_2,client_3代表客户端,Server代表需要互斥访问的服务。
实现思路:在获取锁的时候,在locker节点下创建顺序节点,在释放锁的时候,把自己创建的节点删除。

核心流程图

这里写图片描述

<h3>5.分布式队列</h3>

这里写图片描述

左侧为zookeeper集群,右侧为消费者和生产者,生产者在queue节点下创建顺序节点,来存放数据,消费者通过读取这些节点来消费数据。

offer核心流程

这里写图片描述

poll核心流程

这里写图片描述

<h3>6.命名服务</h3>
有两个应用方向,一个是,可以利用zookeeper的树形分层结构,可以把系统中各种服务的名称,地址以及目录信息,存放在zookeeper中,需要的时候去zookeeper中读取,另一个是利用zookeeper顺序节点的特性,制作分布式的序列号生成器。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值