首页 > 其他分享 >zk内部原理

zk内部原理

时间:2022-12-20 16:00:43浏览次数:42  
标签:事务 请求 zk 处理器 服务器 群首 原理 客户端 内部

请求。事务和标志符

请求

  • 客户端的只读请求 exixt getData getChildren zk服务器本地处理后返回客户端
  • 客户端会改变服务器状态的请求 create delete setData 转发给群首执行(事务)

假如⼀个客户端提交了⼀个对/z节点的setData请求,setData将会改变该znode节点数据信息,并会增加该节点的版本号,因此,对于这个请求的事务包括了两个重要字段:节点中新
的数据字段值和该节点新的版本号。当处理该事务时,服务端将会⽤事务中的数据信息来替换/z节点中原来的数据信息,并会⽤事务中的版本号更新该节点,⽽不是增加版本号的值。

当群⾸产⽣了⼀个事务,就会为该事务分配⼀个标识符,我们称之为ZooKeeper会话ID(zxid),通过Zxid对事务进⾏标识,就可以按照群⾸所指定的顺序在各个服务器中按序执⾏。服务器之间在进⾏新的群⾸选举时也会交换zxid信息,这样就可以知道哪个⽆故障服务器接收了更多的事务,并可以同步他们之间的状态信息。

群首选举

设置群⾸的⽬的是为了对客户端所发起的ZooKeeper状态变更请求进⾏排序,包括:create、setData和delete操作。群⾸将每⼀个请求转换为⼀个事务,如前⼀节中所介绍,将这些事务发送给追随者,确保集群按照群⾸确定的顺序接受并处理这些事务。

  • 每个服务器启动后进入looking状态
    1.如果已经存在群首,告知其他服务器
    2.不存在,服务器之间通讯,交换信息选举,选举出来群首服务器进入leading,其他进入following

  • 一个服务器进入looking状态,给所有服务器发送投票信息(sid 服务器标识符,zxid 最近执行的事务zxid信息)

  • 当服务器接收到一个投票信息

    1. 如果zxid比自己大或者zxid相同,sid比自己大就修改自己的投票信息
    2. 否则保留自己的投票信息

zab:状态更新的广播协议

follwer收到写请求后将请求转发给群首,群首执行后以事务的方式广播更新,当事务提交时,服务器就将变更反馈到数据树上-zk保存状态信息的数据结构

观察者

不同于追随者的是,观察者不参与我们之前介绍过的选举过程。他们仅仅学习经由INFORM消息提交的提议。由于群⾸将状态变化发送给追随者和观察者,这两种服务器也都被称为学习者。

服务器构成

独立服务器

1.PrepRequestProcessor接受客户端的请求并执⾏这个请求,处理结果则
是⽣成⼀个事务。我们知道事务是执⾏⼀个操作的结果,该操作会反映到
ZooKeeper的数据树上
2.下⼀个请求处理器为SyncRequestProcessor。SyncRequestProcessor负责
将事务持久化到磁盘上
3.为FinalRequestProcessor。如果Request对象包含事务数据,该处理器将会接受对ZooKeeper数据树的修改,否则,该处理器会从数据树中读取数据并返回给客户端。

群首服务器

1.PrepRequestProcessor
2.ProposalRequestProcessor 该处理器会准备⼀个提议,并将该提议发送给
跟随者。ProposalRequestProcessor将会把所有请求都转CommitRequestProcessor,⽽且,对于写操作请求,还会将请求转发给SyncRequestProcessor处理器。
3.SyncRequestProcessor,持久化事务到磁盘
4. 3执行完,执⾏完之后会触发AckRequestProcessor处理器,将执行结果返回给自己
5.CommitRequestProcessor 将收到⾜够多的确认消息的提议进⾏提交
6. FinalRequestProcessor

追随者和观察者服务器


1.FollowerRequestProcessor 服务器接收到客户端请求后转CommitRequestProcessor以及群首
2.CommitRequestProcessor 会直接转发读取请求到FinalRequestProcessor处理器,⽽且对于写请求,CommitRequestProcessor在转发给FinalRequestProcessor处理器之前会等待提交事务。
3. 当群⾸接收到⼀个新的写请求操作时,直接地或通过其他追随者服务
器来⽣成⼀个提议,之后转发到追随者服务器。当收到⼀个提议,追随者
服务器会发送这个提议到SyncRequestProcessor处理器,SendRequestProcessor会向群⾸发送确认消息。当群⾸服务器接收到⾜够确认消息来提交这个提议时,群⾸就会发送提交事务消息给追随者(同时也会发送INFORM消息给观察者服务器)。当接收到提交事务消息时,追随者就通过CommitRequestProcessor处理器进⾏处理。

标签:事务,请求,zk,处理器,服务器,群首,原理,客户端,内部
From: https://www.cnblogs.com/braveman1021/p/16994377.html

相关文章

  • 第06问:内部临时表何时使用磁盘?
     问题:在 ​​实验05 ​​中,我们看到了内部临时表会使用到不少内存。那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的? 实验:我们仍......
  • kubectl命令详解+证书申请原理
    需要配合老师写的文档一起学习。文档名称叫常见问题排查及提问问题格式lts.docx,可使用everything工具快速查找到该文件。1.1kubectl命令详解参考文档:https://kubernete......
  • k8s原理之-Pod控制器--ReplicaSet、Deployment
    一、Pod控制器及其功用Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资......
  • k8s原理之-Flannel网络二进制部署和测试
    一、K8S的ip地址NodeIP:节点设备的IP,如物理机,虚拟机等容器宿主的实际IP。PodIP:Pod的IP地址,是根据docker0网络IP段进行分配的。ClusterIP:Service的IP,是一个虚拟I......
  • k8s原理之-Pod资源调度
    目录Pod资源调度1、常用的预选策略2、优选函数3、节点亲和调度3.1、节点硬亲和性3.2、节点软亲和性4、Pod资源亲和调度4.1、Pod硬亲和度4.2、Pod软亲和度......
  • k8s集群原理
    目录一、看图说K8S二、K8S的概念和术语三、K8S集群组件1、Master组件2、Node组件3、核心附件四、K8S的网络模型五、Kubernetes的核心对象详解1、Pod资源......
  • k8s原理之-Pod状态和生命周期管理
     一、什么是Pod?Pod是kubernetes中你可以创建和部署的最小也是最简的单位。一个Pod代表着集群中运行的一个进程。Pod中封装着应用的容器(有的情况下是好几个容器),存储......
  • 即时通讯音视频开发之音频基础及编码原理
    即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术=音视频处理技术+网络传输技术的横向技术应用集合体,而公共互联网不是为了实时......
  • 分布式计算框架Gearman原理详解
     什么是Gearman?Gearman提供了一个通用的应用程序框架,用于将工作转移到更适合于工作的其他机器或流程。它允许你并行工作,负载平衡处理,并在语言间调用函数。它可用于从高可用......
  • Tomcat 的 ErrorPage 实现原理分析
     使用Tomcat,一定见到过404,500的时候,见到过Tomcat提供的错误页面,例如请求的资源找不到的时候,响应状态码为404,这个时候的错误页面是这样的:这些错误页面是 如何生成及定位展......