• Zookeeper中的角色


    在zookeeper集群中,节点也有不同的角色,承担着不同角色。

    zookeeper有三种角色:

    • 老大:Leader   (领导者)   : 客户端提供读服务和写服务。
    • 老二:Follower(跟随者)  : 为客户端提供读服务,参与Leader选举过程
    • 老三:Observer(观察者)  : 为客户端提供读服务,不参与Leader选举过程

        其中:Follower 和 Observer 归类为 Learner(学习者)

    集群管理图如下:

    Leader


    Leader在集群中只有一个节点,可以说是老大No.1,是zookeeper集群的中心,负责协调集群中的其他节点。从性能的角度考虑,leader可以选择不接受客户端的连接

    所有的跟随者Follower与观察者Observer节点的写请求都会转交给领导者Leader执行。Leader接受到一个写请求后,首先会发送给所有的Follower,统计Follower写入成功的数量。当有超过半数的Follower写入成功后,Leader就会认为这个写请求提交成功,通知所有的Follower commit这个写操作,保证事后哪怕是集群崩溃恢复或者重启,这个写操作也不会丢失。

    Leader的作用

    • 在ZAB崩溃恢复之后,消息广播之前,进行集群中的数据同步;
    • 维持与Learner的心跳,接收Learner请求消息,并据不同的消息类型,进行不同的处理;
    • Learner处理的消息类型包括:PING消息、REQUEST消息、ACK消息、REVALIDATE消息等。

    其中:

    • PING消息:指Learner的心跳信息;
    • REQUEST消息:是Follower发送的提议信息,包括写请求及同步请求;
    • ACK消息:是Follower的对提议的回复,超过半数的Follower通过,则commit该提议;
    • REVALIDATE消息:是用来延长SESSION有效时间。

    Leader的工作流程简图如下所示,实际上流程要比下图复杂得多,启动了三个线程来实现功能:

    Follower


    Follow在集群中有多个,主要的作用有:

    • 与老大Leader保持心跳连接
    • 当Leader挂了的时候,经过投票后成为新的leader。leader的重新选举是由老二Follower们内部投票决定的。
    • 向Leader发送请求(PING请求、REQUEST消息、ACK请求、REVALIDATE消息)
    • 处理leader发来的消息与请求
    • 接收Client的请求,如果为写请求,发送给Leader进行投票;
    • 返回Client请求结果。

    Follower的工作流程简图:

    其中:

    • UPTODATE消息:表示同步完成;
    • REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;
    • SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的数据更新。

     

    Observer


    Observer角色除了不参与Leader选举和Proposal投票外,与Follower的作用相同

    可以说Observer是zookeeper集群中最边缘的存在。Observer的主要作用是提高zookeeper集群的读性能。通过leader的介绍我们知道zookeeper的一个写操作是要经过半数以上的Follower确认才能够写成功的。那么当zookeeper集群中的节点越多时,zookeeper的写性能就 越差。为了在提高zookeeper读性能(也就是支持更多的客户端连接)的同时又不影响zookeeper的写性能,zookeeper集群多了一个儿子Observer,只负责:

    • 与leader同步数据
    • 不参与leader选举,没有投票权。也不参与写操作的提议过程。
    • 数据没有事务化到硬盘。即Observer只会把数据加载到内存。

    参考资料


  • 相关阅读:
    代码控制数据流量开关
    用wifi来调试应用程序
    详细解读LruCache类
    修改博客园默认的代码字体大小
    通过Gson解析Json数据
    Docker、Kubernetes的 CICD实现思路
    React中路由传参及接收参数的方式
    微信小程序开发工具调试没问题,真机调试Provisional headers are shown
    物联网卡三码
    【微信开发】-- 企业转账到用户
  • 原文地址:https://www.cnblogs.com/tgzhu/p/14750323.html
Copyright © 2020-2023  润新知