我是靠谱客的博主 魔幻可乐,最近开发中收集的这篇文章主要介绍Zookeeper核心思想CAP Paxos ZAB。通俗易懂,做个笔记方便自己日后看...前言首先我们来了解一下CAP原则Paxos是怎么解决这个问题的呢Zookeeper模型是怎样的呢那么这篇文章的意义是什么?写在最后,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

哎呀上一篇博客《Zookeeper实现分布式可重入锁,思路+代码,全程React》上了推荐,有点开心... 趁热打铁把最后一篇笔记补上。周老师牛逼!马老师牛逼!废话不多说...

说明:本文最核心的内容有一半在这里,Zookeeper全解析——Paxos作为灵魂。

 

首先我们来了解一下CAP原则

C就是Consisstency_一致性

A代表Available_可用性

P代表Partition tolerance_分区容错性(稍微解释一下:系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择——来源 百度百科)

CAP连在一起构成了一个不可能三角,也就是说这三者最多同时只能满足两个,无法全都实现

Zookeeper满足的是CP,即一致性与分区容错性,一旦系统发生分区的情况,则首先保证数据的一致性。

为什么?: 试想现在有一个三台机器组成的集群,其中一台与另外两台失去了连接,也就是说现在出现了网络分区的情况,如果现在另外两台机器有新的数据变化,那么在这个时候这台机器中的数据与另外两台中的数据是不一致的。如果这时仍然对外提供服务,那么将不能保证数据的一致性,这对一些场景来说可能是致命的。注意这里还没有开始介绍zookeeper。

 

Paxos是怎么解决这个问题的呢

Zookeeper模型是怎样的呢

好了这是一片转载文章,这里贴上原文地址,通俗易懂,雅俗共赏,看完这篇文章再回来吧

Zookeeper全解析——Paxos作为灵魂

 

那么这篇文章的意义是什么?

好了如果你看完了上面那篇文章,你应该已经发现了,介绍如何选出leader的那一部分链接失效了(禁止套娃!)

所以现在来介绍leader到底是怎么选出来的。

假设现在集群中有四台机器,他们的myid分别为1 2 3 4,对应node1 node2 node3 node4

 

集群启动时,当过半的具有选举权的节点(对应上文中的议员)启动成功后,他们会进行选主。(为什么过半?去看看原文吧)

由于此时他们的zxid都是0(因为集群还没有对外提供服务)。所以myid最大的将会成为leader(总统)

这里可能成为总统的是node3、node4,现在我们假设当前集群中的leader是node4

为了把问题说清楚,现在假设node3这位议员与其他议员的链接出现了问题,而此时小岛上发生了一件事,总统将这件事成功提交到了其他议员,这件事通过了!但node3不知道! 也就是说其他议员的zxid已经+1了(每当有议案得到通过zxid+1),我们假设node3的zxid是0,其他人则是1

 

突然议员们发现联系不上总统了,议员们会开始票选新的总统

为了把问题说清楚,现在假设最糟糕的情况:node3这个倒霉蛋又恰好是第一个发现leader联系不上的人,此时他发起了投票:投票内容是 我node3发现总统挂了,我现在给自己投一票,我的zxid是0,myid是3。同时node3在本地记录:node3一票

这张票顺利到达了node1和node2...

现在node1和node2都拒绝了node3的投票,并且都给自己投了票!

当node2和node3收到node1的票时,node2会拒绝node1的票,node3则会接收node1的票。

所以最终发生了什么:node2一定会收到node3和node1的票,再加上他自己给自己投的票,于是node2得到了过半的票数。他就会将自己的状态改为leader

node1最终只能得到自己和node3投的票,于是node1两票

node3最终得到的只有自己的票,所以node3一票。

node3和node1都没能得到大多数人的票,所以都不会成为leader。

同时,由于票是广播的,node1和node3也一定会最终给node2投票,并且他们都将知道node2获得了过半的票数。

事情解决的,新的leader出现了...

在选举leader的过程中,zkServer将不可用(政府停摆,不再提供服务)。但通过上面的介绍,我们可以得出一个结论,选举过程是非常快的:原因在于任何节点的投票都将造成本集群中的事务id最大、myid最大的节点进行投票。过半通过后即选出新的leader。

为什么要这样呢?因为这保证了只要集群存活,集群中的事务id为最新的节点数一定是过半的,这就保证了数据的最终一致性。

而选举过程中集群不可用,这就破坏了可用性。

这就是为什么说zookeeper满足了CAP原则中的CP而舍弃了A,Zookeeper在满足最终一致性与分区容错性的基础上尽量保证着可用性。

 

写在最后

好了,zookeeper系列就更新到这。下次准备更点java多线程的知识。Over!

最后

以上就是魔幻可乐为你收集整理的Zookeeper核心思想CAP Paxos ZAB。通俗易懂,做个笔记方便自己日后看...前言首先我们来了解一下CAP原则Paxos是怎么解决这个问题的呢Zookeeper模型是怎样的呢那么这篇文章的意义是什么?写在最后的全部内容,希望文章能够帮你解决Zookeeper核心思想CAP Paxos ZAB。通俗易懂,做个笔记方便自己日后看...前言首先我们来了解一下CAP原则Paxos是怎么解决这个问题的呢Zookeeper模型是怎样的呢那么这篇文章的意义是什么?写在最后所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部