参考:
https://blog.csdn.net/liuchang19950703/article/details/111626305
简介
1,以下图片,绿色部分都是需要程序员实现的,一般是监控系统
2,ZK是一个分布式协调服务,但是在底层只提供了2个功能:
1,管理(存储,读取)用户程序提交的数据;
2,为用户程序提供数据节点监听服务;
1,配置中心
zk 可以通过“发布/订阅模型”实现对集群配置文件的管理与维护。“发布/订阅模型”分为推模式(Push)与拉模式(Pull)。zk 的“发布/订阅模型”采用的是推拉相结合的模式。
2,命名服务
通过利用zk 中
节点路径不可重复
的特点来实现命名服务的。当然,也可以配带上顺序节点的有序性来体现唯一标识的顺序性。
3,服务注册中心
主要是实现消费者与提供者的解耦合,防止提供者的单点问题,实现对提供者的负载均衡。
基本步骤:
1,比如消费者想要调用service1,就先从ZK中把注册表(即Service1服务节点下所有主机列表)读到,然后内部根据负载均衡策略选一个主机调用服务
2,此时ZK提供的功能就是把服务提供者注册到ZK里面,然后消费者通过读取的注册表,负载均衡调用服务,即提供者写,调用者读。Dubbo就是这样实现的。
添加服务的状态节点:
为主机定义临时节点
服务降级:
如果一个服务提供者全挂了怎么办?服务降级,降级点很多,例如消费者本身可以这么处理,提供者不行,用本地代码返回一些信息,增强用户体验。
4,集群管理
能够随时获取到当前集群中各个主机的运行时状态、当前集群中主机的存活状况等信息。通过 zk 可以实现对集群的随时监控。
解释:
监控系统启动的时候先在ZK中注册/clusterManager根节点,并注册子节点列表变更Watcher监听
被监控集群的主机一启动,就在/clusterManager根节点下创建相应的临时子节点
(临时节点好处就是被监听的服务器如果挂了,会话就没了,临时节点就没了)
步骤:
Step1:监控系统在启动时会在 zk 中创建一个根节点,例如/clusterManager Step2:当集群主机应用启动后,就会自动在 zk 的监控系统根节点下创建一个对应的临时子节点,并将自己的运行状态定时写入到该临时节点,或根节点的数据内容中,例如主机当前正在处理的连接请求有多少,当前主机的权重等。写入到这两个节点的效果是不同的: 写到临时节点:临时节点消失后,从监控系统中根本就查找不到任何该临时节点对应主机的信息。 写入到根节点:可以获取到所有曾经存在过的节点信息。 Step3:监控系统在根节点/clusterManager 上注册一个 watcher 监听。一旦集群中增减主机,就会引发子节点数量变更的 watcher 事件。然后 zk 会将事件推送给监控系统 Step4:监控系统在接收到 zk 发送的事件后,调用相应的 watcher 对象回调,将变化情况显示到监控平台。 Step5:若集群主机状态信息是写入到根节点数据内容的,那么监控系统需要在根节点上再注册一个数据内容变更的 watcher 监听,以实时获取到集群主机的状态数据。 Step6:若集群主机状态信息是写入到对应临时节点的,那么监控系统需要在每个主机临时节点上注册数据内容变更的 watcher 监听,以实时获取到集群主机的状态数据。