就是将全部的业务都部署在一个中心主机(节点)上,全部的功能都由这个主机集中处理。算法
特色数据库
部署结构简单、不须要考虑多个主机之间的分布式协做问题。服务器
分布式系统:指将硬件或者软件组件部署在不一样的网络计算机上,彼此之间仅仅经过消息传递进行通讯和协调的系统。markdown
特色网络
每一次分布式系统的请求与响应三态:成功,失败,超时。架构
超时状况:并发
因此须要有幂等。分布式
分布式事务是指事务的参与者,支持事务的服务器,资源服务器以及事务管理器分别位于分布式系统的**不一样节点之上。**一般一个分布式事务中会涉及对多个数据源或业务系统的操做。分布式事务也能够被定义为一种嵌套型的事务,同时也就具备了ACID事务的特性。oop
Consistency(一致性):数据一致更新,全部数据变更都是同步的(强一致性)。性能
Availability(可用性):好的响应性能
Partition tolerance(分区容错性) :可靠性
分区容错性:分布式系统在遇到任何网络分区故障的时候,任然须要保证对外提供知足一致性和可用性的服务,除非是整个网络环境都发生了故障。
网络分区:是指在分布式系统中,不一样的节点分布在不一样的子网络(机房或异地网络等)中,因为一些特殊的缘由致使这些子网络之间出现网络不连通的情况,但各个子网络的内部网络是正常的,从而致使整个网络的环境被切成了若干个孤立的区域。
须要根据实际业务进行取舍。
BASE思想主要强调基本的可用性,若是你须要High 可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲。
一致性协议:为了使基于分布式系统架构下的全部节点进行事务处理过程当中可以保持原子性和一致性而设计的一种算法。一般有二阶段提交协议、三阶段提交协议、Paxos、Zookeeper的ZAB协议、Raft、Pbft等。
2PC、3PC引入了两个概念。
**协调者:**负责统一调度分布式节点的执行逻辑
参与者:被调度的分布式节点
二阶段主要采起:先尝试,后提交。
由于2PC有不少问题,因此在2PC基础上,改进为3PC:canCommit、preCommit、doCommit三个阶段。
改进点:
三阶段优势:
三阶段缺点:
因此2PC、3PC各有优缺点,可根据实际业务场景进行选择。既然2PC、3PC都会产生数据不一致。下面咱们来看一看分布式领域经常使用的一致性算法。
Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的基于消息传递且具备高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。
Paxos以及下面的RAFT都假设不存在拜占庭将军问题,只考虑节点宕机、网络分区、消息不可靠等问题。属于CFT(Crash Fault Tolerance)算法。
系统中有三种角色proposers,acceptors,和 learners。能够一个节点多个角色。
多数派:指 n / 2 +1 。n为总节点数量。
Paxos算法分为两个阶段。具体以下:
阶段一:
Proposer选择一个提案编号N,而后向半数以上的Acceptor发送编号为N的Prepare请求。
若是一个Acceptor收到一个编号为N的Prepare请求,且N大于该Acceptor已经响应过的全部Prepare请求的编号,那么它就会将它已经接受过的编号最大的提案(若是有的话)做为响应反馈给Proposer,同时该Acceptor承诺再也不接受任何编号小于N的提案。
例如:一个acceptor已经响应过的全部prepare请求对应的提案编号分别为一、二、。。。。5和7,那么该acceptor在接收到一个编号为8的prepare请求后,就会将编号为7的提案做为响应反馈给Proposer。
阶段二
注意:Proposer能够随时丢弃提案,而且提出新的提案;Acceptor也能够随时响应,接受编号更大的提案。
思考:若是两个Proposer还处于第一阶段时,互相提出编号更大的提案?会发生什么?
这时候会出现“活锁”状态,陷入了无限死循环中(破坏了算法活性)。
那须要怎么防止呢?
能够选出一个主Proposer,只有主Proposer能够提出提案。
至于怎么选择,不属于Paxos的范畴,能够参考RAFT使用竞选,谁快谁当选;也能够参考PBFT的依次成为leader等。
RAFT算法分为两个阶段:Leader选举,日志复制。也有三种角色,分别为:
每一个节点的身份均可以是以上三种中的其一。
Leader选举阶段:
日志复制(是一个2PC提交)
若是leader没有挂掉,或者发生网络分区,就会一直是这个leader进行事务发起。
我这里只是对于算法正常流程的描述,强烈推荐动画版RAFT(看不懂算我输,不过记得回来点个赞,哈哈哈)
本文从集中式到分布式理论CAP、BASE以及2PC、3PC流程,描述了分布式事务经常使用的思想;再详细说明了Paxos以及Raft算法流程等。Paxos以及Raft算法属于CFT算法范畴,都能容忍最多n/2(向下取整)的节点出现宕机、网络分区等的强一致性算法。Paxos属于比较晦涩的算法,工程实现比较复杂,但其思想颇有借鉴意义。有兴趣的能够去看看Paxos的推导过程,我的认为颇有意思,可以想明白每一步,对于理解其余算法,也大有帮助;也能够去看看Zookeerper的ZAB算法,后面有机会专门写一篇。但这些算法不能真正意义上用于区块链共识,毕竟leader说什么,其余节点就会执行,没有节点之间的共识过程。那什么算法能够用于区块链共识呢?
参考书籍:
《从Paxos到Zookeeper++分布式一致性原理与实践++》
参考连接:
本文使用 mdnice 排版