【Zookeeper系列】写请求在Leader内事务处理流程

在开始阅读之前,咱们先思考一个问题,Zookeeper是强一致性的吗?还是最终一致性?

先直接给答案哈,Zookeeper是保证顺序最终一致性!但为什么不是强一致性的呢?接下来,带着疑问往下看~

前置知识

在了解Zookeeper保证最终一致性之前,先看下涉及到的关键内容。比如ZK内为了保证事务消息,运用到2PC的思想,实际处理写请求的过程中,会经过Proposal流程Commit流程

2PC(Two-Phase Commit)

2PC即二阶段提交,与二阶段提交相似的,还有三阶段提交。二阶段提交和三阶段提交可以认为是一种一致性协议,保障在分布式系统中数据的一致性,主要用于分布式事务的场景中。

二阶段提交,顾名思义就是分为两个阶段提交请求嘛,其流程可以认为是准备阶段提交阶段

以下是简单的概括,其流程和原理实际上挺复杂的,但为了不跑偏文章的主题,就简单的概括一下2PC是什么。

  • 准备阶段:事务的发起者本地执行事务,但不提交事务;然后给各个相关的服务发起分布式事务的提交请求,然后等待其他服务的响应;至于其他接收到提交请求非服务器,会给事务发起者响应ACK,可以简单认为是是否可以执行

  • 提交阶段:当事务发起者收到所有的响应,如果所有的响应都是YES(可以执行),就提交本地事务并让其他服务执行事务请求;如果有部分响应不是YES,则回滚本地请求

Zookeeper处理事务流程

  • Proposal阶段:Leader会将写请求封装为一个Proposal提案,每个Proposal提案有一个全局Id,即zxid;然后会发送到所有的Follower,当Follower接收到后,会给Leader响应ACK

  • Commit阶段:当Leader接收到超过一半的Follower响应的ACK,就会认为Proposal发送成功,执行本地事务,并发送Commit消息给所有Follower;当Follower接收到Commit消息后,会将Follower内本地消息提交。

写请求事务处理

经过上面的前置知识了解,Zookeeper处理消息的事务流程,主要是Proposal和Commit阶段。

接下来,以文字结合图片的形式,大致了解写请求的过程。

  1. 客户端发送写请求,Leader接收到写请求后,生成Proposal提案且生成全局的zxid,并将Proposal提案写入磁盘事务日志文件。但实际上,为了提高性能,会先将Proposal写入os cache中,再在某时机将os cache中的内容写入磁盘事务文件
    【1】写请求发送到Leader的过程.png
  2. 写入Proposal提案后,Leader会广播到每个Follower都独有的FIFO队列,这样的话,就能保证数据的顺序执行;当Follower接收到Proposal后,同样会类似Leader那样为了提高写数据的性能,先写到Follower的os cache中,然后在某时机写入磁盘事务日志文件;当Follower写入Proposal后,会给Leader响应ACK
    【2】写请求发送到Leader的过程.png
  3. 当Leader接收到的ACK超过集群的一半,就会认为Proposal提交成功。Leader本地就会执行事务,将数据封装为Znode写到内存中,并发送commit命令给所有Follower,当其它Follower接收到commit命令后,同样会将数据封装为Znode写到内存中。

【3】写请求发送到Leader的过程.png

目前为止,就可以认为写请求处理完毕,客户端可以从Leader读取刚刚的写请求,但如果客户端从Follower读取的话,一定能读取到吗?

这就要回到文章开始的一个思考题,其答案是Zookeeper不能保证强一致性,只能保证顺序的最终一致性。咱们回过头想下写请求的事务处理过程。

当写请求生成的Proposal被广播到每一个Follower,只是先写到os cache或磁盘事务日志文件中,这时候并没有生成Znode写到内存,对于客户端来说是读取不到的;如果Leader发出commit请求的时候,由于网络原因或者Follower短暂的失去与Leader的连接,其实都有可能出现短暂的消息不一致,这是如果客户端请求访问还没生成Znode数据的话,肯定读取不到。所以这就解释了,为什么Zookeeper并不能保证强一致性。

但为什么说Zookeeper能保证顺序最终一致性呢?

这是因为Leader与Follower提交Proposal都是经过FIFO的队列,其保证了数据有序。除此之外,如果Leader提交commit后,Follower没有及时接收到commit,会有其他保障机制,保证最后集群内所有服务器都趋于数据一致。

以上就是写请求落在Leader上的大致经过,如果写请求落在Follower是怎样呢?其实流程上是没什么区别的,只不过是Follower将写请求转发给Leader,由Leader去处理写请求,然后就和上诉的流程一样,最后达到数据最终一致。

如果觉得文章不错的话,麻烦点个赞哈,你的鼓励就是我的动力!对于文章有哪里不清楚或者有误的地方,欢迎在评论区留言~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容