raft 协议传说

故事设定
  • N个人组成了一个团队,承包了一栋大楼,对外出租;会不断有人来租房子,每租一间房子,需要多数人同意,才能向租客确认出租。同时每个人都会记录当前还剩多少房子未出租;
  • 大家都愿意将房子租出去,所以只要有租房的需求,大家都会同意。
  • 每个人都有可能临时处理自己的事情而暂时离开团队。
  • 需要一个接待员,去接待租客,并征求大家的意见。每个人都可以成为接待员,成为接待员的前提是在接待员位置空缺时,谁想当接待员都可以向大家争取意见,获取大部分人同意的人,将会成为接待员。
  • 为了筛选真正需要租赁的客户,所有人都有回复顾客的询问和真正需要进行租赁的时候,将顾客指引到接待员那进行真正的租赁;原则是:租赁业务的发起必须由接待员发起。
  • 只有在接待员岗位空缺的时候,每个人都允许发起多轮投票,但是每一轮投票,大家只能投一票,多数者获胜。选出获胜者之后,会将投票的轮次加一!在投票的时候,大家都会评估被选人是否对公司业务足够了解(轮次越高,可能掌握的数据就越全面),也可以理解成酒店管理集团的升级版本,每次选举之后,都标识酒店进入新的时代!优先选择账本记录最全的候选者,如果有候选人发现自己的投票轮次低于其他候选者,则会自动退出选举,同时高版本的成员不会给低版本的成员进行投票!
  • 最后选出来的接待员,作为整个团队的接待员
店铺开业(分布式一致性)
  • 所有成员需要推选出一个接待员,来传达租客的租赁需求。在沉默了一段时间之后,有一个比较积极的小伙A,说自己可以担任接待员,为大家服务。经过投票,小A顺利的成为接待员。公司正式开始开业;
  • 按照之前的约定,接待员必须在每个租客,进行租房的时候,先进行登记,然后向大家询问,是否可以将房子租出去,如果大多数人不在场,比如中午吃饭的时间,就会对外暂停营业,所有业务都暂时停止。正常营业时间为了节省时间,小A会在咨询完多数人之后(之后找时间慢慢的通知其他人,在咨询的时候,大家其实也是先进行登记,因为不确定这个事情一定能成),就告诉租客可以出租了。同时再向大家确认房屋已经出租。大家一接到这种通知之后,会自觉的在自己的小本本上将之前登记的记录变更成真正的账本来记录当前还剩多少房子,已经租出去了多少房子;
  • 就这样,一段时间内,公司运行的非常平稳,大家的帐记录的也都一样。
接待员的更替(leader 节点不可用)
  • 由于租赁业务非常繁忙,大家都会时不时的盯着接待员是否在岗位上,如果发现接待员不在岗位上,会立即发起投票,选举自己为接待员;
  • 有时候,有些人会因为自己看花眼,发现接待员不在岗位上而发起投票,但这种意外情况很快就会被制止,因为大部分人还是知道接待员在岗位上的;
  • 在营业时间内,选举时常发生;有时候一个人发现了接待员不在岗位上了,有时候多个人发现接待员不在岗位上了,在接待员离开的这段时间内,大家可能因为票数相同发起了多轮投票。最终票数多着获胜。如果在选举过程中接待员回来了,也不能再次继任接待员,也得参与投票。
  • 新的接待员上任之后,会继续对接租赁业务,登记和通知大家业务进展;有时候,上一个接待员由于某些原因离开的时候,未将某些登记记录告诉大家,所以新的接待员也不知道。那条未登记的记录大家都不知道,所以老的接待员回来之后就会被新的接待员通知将之前没有登记的记录删除掉(从现在新接待员最新的记录开始找,找到两者一样的数据,然后把之后的全部同步成最新的),只记录现在有效的记录。所以之前进行登记的租户可能需要重新进行登记;
公司不间断的进行运营,大家也都相安无事。
  • 故事启示:为什么不把账本放到一个地方,大家一起写,比如mysql呢?原因是,如果一个分布式服务需要严重依赖外部服务来保证数据的一致性的话,并不是优秀的解决方案,所以一般靠节点之间的日志进行记录,完成数据的一致性!将外部存储作为一个备份,来进行维护!
解析常见的面试题
  • raft协议组成部分
    • 接待员(leader), 被选举人(candidate),其他成员(followers),每个人的小本本(同步日志),酒店的升级版本号(term),账单上的每条记录(index)
  • raft选举触发时机
    • 只要有人没看到接待员在岗,就会容忍一段时间,然后发起选举!不管是团队刚成立还是运营中接待员离岗!(初始化服务或中途leader节点宕机导致followers接不到心跳消息)
  • raft保证数据的一致性
    • 每个人都有自己的小本本,只要接待员要处理业务,就会征求大家的意见,然后大家登记,等到接待员征求了大部分人之后,会向大家同步结论,大家统一记账,接待员向客户回复租赁成功!(leader节点同步大多数followers,followers同意之后,同步日志,向client回复成功)
  • raft选举成功之后,如果节点内容不一致,有什么同步手段
    • leader会同步index和快照,完成整体数据同步!index是一个个同步,检查!snapshot是整体同步!一般都是在一个可以接受的区间内,如果超过的话,就整体同步!比如一个人离开时间太长了,在进来的话,就会整体抄别人的作业而不是一天天对账
  • raft中的term概念是什么,有什么用
    • 酒店的版本,用于区分和定位是在那一个轮次以及去掉过期的投票选择
  • raft协议选举投票的前提是什么
    • 酒店成员自己的版本比被选举人的版本低,标识没有过期!以及index比被选举人的低。这样的话,不会完成那些高版本,少数据的情况发生,最终导致数据的丢失问题
  • 如果集群节点中被物理阻断了,会怎么样,之后再将物理阻断去掉会怎么样
    • 会自己在所属的空间没小范围投票,但是由于得不到多数人的认可,所以选举不成功,轮次不变!等到物理分区结束之后,找其他大分区的leader
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容