加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Zookeeper技术:分布式架构详解、分布式技术详解、分布式事务

发布时间:2019-10-16 00:25:02 所属栏目:优化 来源:Ja高级互联网架构
导读:副标题#e# 一、分布式架构详解 1、分布式发展历程 1.1 单点集中式 特点:App、DB、FileServer都部署在一台机器上。并且访问请求量较少 1.2 应用服务和数据服务拆分 特点:App、DB、FileServer分别部署在独立服务器上。并且访问请求量较少 1.3 使用缓存改善

2、如CAP理论里面的示例,当向machine1的db1的表tbl_person、tbl_order插入数数据时,同时要把插入的数据同步到machine2、machine3,当machine3的网络有问题时,同步失败,但是过一会网络恢复了就同步成功了,这个同步失败的状态就称为软状态,因为最终还是同步成功了。

最终一致性:data replications经过一段时间达到一致性。

5. Paxos算法

5.1 介绍Paxos算法之前我们先来看一个小故事

拜占庭将军问题

拜占庭帝国就是5~15世纪的东罗马帝国,拜占庭即现在土耳其的伊斯坦布尔。我们可以想象,拜占庭军队有许多分支,驻扎在敌人城外,每一分支由各自的将军指挥。假设有11位将军,将军们只能靠通讯员进行通讯。在观察敌人以后,忠诚的将军们必须制订一个统一的行动计划——进攻或者撤退。然而,这些将军里有叛徒,他们不希望忠诚的将军们能达成一致,因而影响统一行动计划的制订与传播。

问题是:将军们必须有一个协议,使所有忠诚的将军们能够达成一致,而且少数几个叛徒不能使忠诚的将军们作出错误的计划——使有些将军进攻而另一些将军撤退。

假设有9位忠诚的将军,5位判断进攻,4位判断撤退,还有2个间谍恶意判断撤退,虽然结果是错误的撤退,但这种情况完全是允许的。因为这11位将军依然保持着状态一致性。

Zookeeper技术:分布式架构详解、分布式技术详解、分布式事务

总结:

1)11位将军进攻城池

2)同时进攻(议案、决议)、同时撤退(议案、决议)

3)不管撤退还是进攻,必须半数的将军统一意见才可以执行

4)将军里面有叛徒,会干扰决议生成

5.2 下面就来介绍一下Paxos算法

Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法,那就是Paxos,其它的算法都是残次品。

Paxos:多数派决议(最终解决一致性问题)

Paxos算法有三种角色:Proposer,Acceptor,Learner

Proposer:提交者(议案提交者)

提交议案(判断是否过半),提交批准议案(判断是否过半)

Acceptor:接收者(议案接收者)

接受议案或者驳回议案,给proposer回应(promise)

Learner:学习者(打酱油的)

如果议案产生,学习议案。

设定1:如果Acceptor没有接受议案,那么他必须接受第一个议案

设定2:每个议案必须有一个编号,并且编号只能增长,不能重复。越往后越大。

设定3:接受编号大的议案,如果小于之前接受议案编号,那么不接受

设定4:议案有2种(提交的议案,批准的议案)

Zookeeper技术:分布式架构详解、分布式技术详解、分布式事务

1)Prepare阶段(议案提交)

a)Proposer希望议案V。首先发出Prepare请求至大多数Acceptor。Prepare请求内容为序列号K

b)Acceptor收到Prepare请求为编号K后,检查自己手里是否有处理过Prepare请求。

c)如果Acceptor没有接受过任何Prepare请求,那么用OK来回复Proposer,代表Acceptor必须接受收到的第一个议案(设定1)

d)否则,如果Acceptor之前接受过任何Prepare请求(如:MaxN),那么比较议案编号,如果K

e)如果K>=MaxN,那么检查之前是否有批准的议案,如果没有则用OK来回复Proposer,并记录K

f)如果K>=MaxN,那么检查之前是否有批准的议案,如果有则回复批准的议案编号和议案内容(如:

2)Accept阶段(批准阶段)

a)Proposer收到过半Acceptor发来的回复,回复都是OK,且没有附带任何批准过的议案编号和议案内容。那么Proposer继续提交批准请求,不过此时会连议案编号K和议案内容V一起提交(

b)Proposer收到过半Acceptor发来的回复,回复都是OK,且附带批准过的议案编号和议案内容(

c)Proposer没有收到过半Acceptor发来的回复,则修改议案编号K为K+1,并将编号重新发送给Acceptors(重复Prepare阶段的过程)

d)Acceptor收到Proposer发来的Accept请求,如果编号K

e)Acceptor收到Proposer发来的Accept请求,如果编号K>=MaxN则批准该议案,并设置手里批准的议案为

f)经过一段时间Proposer对比手里收到的Accept回复,如果超过半数,则结束流程(代表议案被批准),同时通知Leaner可以学习议案。

g) 经过一段时间Proposer对比手里收到的Accept回复,如果未超过半数,则修改议案编号重新进入Prepare阶段。

5.3 Paxos示例

示例1:先后提议的场景

角色:

proposer:参谋1,参谋2

acceptor:将军1,将军2,将军3(决策者)

1)参谋1发起提议,派通信兵带信给3个将军,内容为(编号1);

2)3个将军收到参谋1的提议,由于之前还没有保存任何编号,因此把(编号1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(ok);

3)参谋1收到至少2个将军的回复,再次派通信兵带信给3个将军,内容为(编号1,进攻时间1);

4)3个将军收到参谋1的时间,把(编号1,进攻时间1)保存下来,避免遗忘;同时让通信兵带信回去,内容为(Accepted);

5)参谋1收到至少2个将军的(Accepted)内容,确认进攻时间已经被大家接收;

6)参谋2发起提议,派通信兵带信给3个将军,内容为(编号2);

7)3个将军收到参谋2的提议,由于(编号2)比(编号1)大,因此把(编号2)保存下来,避免遗忘;又由于之前已经接受参谋1的提议,因此让通信兵带信回去,内容为(编号1,进攻时间1);

8)参谋2收到至少2个将军的回复,由于回复中带来了已接受的参谋1的提议内容,参谋2因此不再提出新的进攻时间,接受参谋1提出的时间;

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读