FLP不可能原理/CAP原理/ACID原则

FLP不可能原理:在网络可靠,但允许节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性共识算法。

FLP不可能原理实际上告诉人们,不要浪费时间,去为异步分布式系统设计在任意场景下都能实现共识的算法。


后期补充

CAP原理:分布式计算系统不可能同时确保以下三个特性:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。

·一致性:任何操作应该都是原子的,发生在后面的事件能看到前面事件发生导致的结果,注意这里指的是强一致性;
·可用性:在有限时间内,任何非失败节点都能应答请求;

·分区容忍性:网络可能发生分区,即节点之间的通信不可保障。

下面三个应用场景。

1.弱化一致性

对结果一致性不敏感的应用,可以允许在新版本上线后过一段时间才最终更新成功,期间不保证一致性。例如网站静态页面内容、实时性较弱的查询类数据库等,简单分布式同步协议如Gossip,以及CouchDB、Cassandra数据库等,都是为此设计的。

2.弱化可用性

对结果一致性很敏感的应用,例如银行取款机,当系统故障时候会拒绝服务。MongoDB、Redis、MapReduce等是为此设计的。Paxos、Raft等共识算法,主要处理这种情况。

3.弱化分区容忍性

现实中,网络分区出现概率较小,但较难完全避免。两阶段的提交算法,某些关系型数据库及ZooKeeper主要考虑了这种设计。实践中,网络可以通过双通道等机制增强可靠性,达到高稳定的网络通信。

ACID原则

ACID原则指的是:Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性),用了四种特性的缩写。

ACID也是一种比较出名的描述一致性的原则,通常出现在分布式数据库领域。具体来说,ACID原则描述了分布式数据库需要满足的一致性需求,同时允许付出可用性的代价。

ACID特征如下:

·Atomicity:每次操作是原子的,要么成功,要么不执行;

·Consistency:数据库的状态是一致的,无中间状态;

·Isolation:各种操作彼此之间互相不影响;

·Durability:状态的改变是持久的,不会失效。

与ACID相对的一个原则是BASE(Basic Availability,Soft-state,Eventual Consistency)原则,牺牲掉对一致性的约束(但实现最终一致性),来换取一定的可用性。

分布式系统的核心问题

主要内容:

一致性问题 共识问题

 

一致性:分布式集群中多个服务节点,对给定的操作,根据给定的协议,对处理结果对外保持一致. 不在乎结果是否正确,而是保证对外呈现的状态一致.所有节点失败也是一种一致.

 

引起不一致的因素:

节点间网络通信的不可靠,消息延迟,消息乱序,内容错误.

节点处理时间无法保证: 结果可能错误,或者节点宕机.

 

满足一致性的要求:

1. 有限时间完成请求的处理2.不同节点完成的结果相同.3决策的结果必须是某个节点提出的提案.

 

强一致性需要 顺序保证. 时钟

 

共识:对某一操作,达成一直的过程.通常达成这个一过程需要集群中的节点进行广播投票.

但是由于分布式节点间的不稳定: 网络不可靠,节点宕机,假消息等.达成共识并不容易.

 

针对如上不稳定的情况,把故障分为:非拜占庭错误(出现消息不响应,但是消息不会被篡改)和拜占庭错误(存在伪造消息的情况).

 

共识算法:

CFT类 针对非拜占庭错误有: PAXOS 算法.Raft算法.

 容错较好,处理快,保证不超过一半节点故障.

BFT类 针对拜占庭错误有: PBFT 确定性算法,POW 工作量证明的概率算法.

 

 

FLP不可能原理: 异步系统,不存在 任意场景下都能实现共识的算法.

 

分布式同步:系统各个节点时钟误差存在上限,消息传递必须在规定时间内完成,否则认为失败.(传统的分布式中,统一时钟,超时失败等都是同步)

 

分布式异步:系统各个节点时钟存在较大差距,消息传递时间任意长(无法判断节点故障还是网络延迟)

 

 

CAP 一致性 :分布式计算系统不可能同时保证 强一致性,高可用性,高分区容忍性.

折中选择:

弱化一致性:对结果不敏感的应用可以允许最终一致. CouchDB

弱化可用性:对结果一致性敏感,银行,当系统故障时会拒绝服务.MongoDB , Redis,MapReduce 为此设计. PAXOS 等共识算法主要处理这种情况. 可能存在无法提供可用结果的情况,同时允许部分节点离线.

弱化分区容忍性: 网络分区出现概率较小, 两阶段提交算法,关系型数据库,ZK主要考虑这种情况设计的.实践中网络可用是双通道,弱化网络不稳定因素.

 

 

PAXOS 算法:

节点分为三种角色:

① 提案者:提出提案,系统提案都有自增ID,(往往是客户端担任)

② 接受者:对提出的提案进行投票(服务端)

③ 学习者:对投票传播学习,不参与投票

约束条件:

①保证决议结果是正确的,不会出现错误.只有被提案者提出的提案才会被投票接受.一次执行中被多数接受的提案成为最终决议

②保证决议在有限时间内完成,决议总会产生,并且学习者会接受决议

过程:




  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
什么是共识算法背景分布式系统集群设计中面临着一个不可回避的问题,一致性问题对于系统中的多个服务节点,给定一系列操作,如何试图使全局对局部处理结果达成某种程度的一致?这个一致性问题大致有如下的场景:节点之间通讯不可靠的,延迟和阻塞节点的处理可能是错误的,甚至节点自身随时可能宕机节点作恶举例说明,就比如有两家电影院同时售卖总量一定的电影票,在这样的场景下,要如何设计方式来保证两家电影院协调同步不出现超卖或者错卖的问题呢?共识算法,就是解决对某一提案(目标,投票等各种协作工作),大家达成一致意见的过程比如上述的买票问题,就可以有如下的设计:1.每次卖票打电话给其他电影院,确认当前票数2.协商售卖时间,比如一三五A卖,二四六B卖3.成立个第三方存票机构,它统一发票通过以上的设计,可以看出一个很重要的解决一致性算法的解决思路,即:将可能引发不一致的并行操作进行串行化,就是现在计算机系统里处理分布式一致性问题基础思路和唯一秘诀著名的共识设计理论FLP可能原理  共识算法的理论下限提出该定理的论文是由 Fischer, Lynch 和 Patterson 三位作者于 1985 年发表,该论文后来获得了 Dijkstra(就是发明最短路径算法的那位)奖。FLP 原理认为对于允许节点失效情况下,纯粹异步系统无法确保一致性在有限时间内完成。三人三房间投票例子三个人在不同房间,进行投票(投票结果是 0 或者 1)。三个人彼此可以通过电话进行沟通,但经常会有人时不时地睡着。比如某个时候,A 投票 0,B 投票 1,C 收到了两人的投票,然后 C 睡着了。A 和 B 则永远无法在有限时间内获知最终的结果。如果可以重新投票,则类似情形每次在取得结果前发生带入到计算机领域就是说,即便在网络通信可靠情况下,一个可扩展的分布式系统的共识问题的下限是无解。即可靠性的下限是0%CAP  分布式系统领域的重要原理CAP 原理最早由 Eric Brewer 在 2000 年,ACM 组织的一个研讨会上提出猜想,后来 Lynch 等人进行了证明• C(一致性):所有的节点上的数据时刻保持同步,即数据一致• A(可用性):每个请求都能在一定时间内接受到一个响应,即低延迟• P(分区容错):当系统发生分区时仍然可以运行的定理:任何分布式系统只可同时满足二点,没法三者兼顾。即数据一致,响应及时,可分区执行不可能同时满足。举个例子:一个分布式网路上,某一个节点有一组依赖数据A,当网络无延迟,无阻塞时,依赖于X的操作可正常进行。但网络无延迟阻塞在现实世界中是没法100%保证的,那么当网络异常时,必然会产生分布式系统的分区和孤岛,那当一个执行操作在A分区之外时,如果要保证P,即当系统发生分区时仍可运行,就需要在分布式系统中多个节点有X的备份数据,以应对分区情况。则这时候就需要在C,A之间做出选择。假如选择C,即要保证数据在分布式网络中的一致性,那么就需要在X每次改动时,需要将全网节点的X数据同步刷新成最新的状态,那么在等待数据刷新完成之前,分布式系统是不可响应X的依赖操作的,即A的功能缺失假如选择A,即要突出低延迟的实时响应。那么在响应的时候,可能全节点的X数据并没有同步到最新的状态,则会导致C的缺失。上面看上去有些绕,那么你只要记住这句话,CAP原理在分布式网络系统的应用讨论,其实就是讨论在允许网络发生故障的系统中,该选择一致性还是可靠性?如果系统重视一致性,那么可以基于ACID原则做系统设计即 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。ACID 原则描述了对分布式数据库的一致性需求,同时付出了可用性的代价。• Atomicity:每次操作是原子的,要么成功,要么不执行;• Consistency:数据库的状态是一致的,无中间状态;• Isolation:各种操作彼此互相不影响;• Durability:状态的改变是持久的,不会失效相应的有一个BASE原则,(Basic Availiability,Soft state,Eventually Consistency)则强调了可用性。经典的共识算法设计业内,针对节点异常的情况,会有两种分类1.故障的,不响应的节点,成为非拜占庭错误2.恶意响应的节点,称为非拜占庭错误Paxos 最早的共识算法  非拜占庭算法的代表Paxos有三种角色:• proposer:提出一个提案,等待大家批准为结案。客户端担任该角色;• acceptor:负责对提案进行投票。往往是服务端担任该角色;• learner:被告知结案结果,并与之统一,不参与投票过程。即普通节点系统运行由proposer驱动,当合法提案在一定时间内收到1/2以上投票后达成共识。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值