浅谈 CAP 和 Paxos 共识算法

本文由腾讯CSIG网络产品部后台开发工程师郑勰撰写,深入浅出地介绍了CAP理论,探讨了一致性和可用性的权衡。接着,文章阐述了共识模型,特别是Paxos算法的工作原理,包括其角色、步骤和阶段,并提到了Multi Paxos、Raft和ZAB等优化方案。文章总结了在分布式系统中如何在容错性和一致性之间寻找平衡。
摘要由CSDN通过智能技术生成


作者:郑勰,腾讯 CSIG 网络产品部后台开发工程师

什么是 CAP

关于 CAP 理论的背景介绍已经很多,这里不过多介绍,我们谈谈如何理解它的问题。

用通俗易懂的话解释三个名词:

一致性

如果刚刚向一个节点写入,那么之后,从另外一个节点读取的必须是刚刚写入的数据,不能是更老的数据。

可用性

如果请求一个节点,这个节点必须能够给予回复,如果节点挂掉了,那就谈不上可用性了。

分区容忍性

是否容忍网络分区,即可以允许节点和其它节点无法通信。

CAP 的意思就是说我们最多只能保证其中两个条件同时成立。

下面我们来看看为什么。

如图所示,假如我们满足了分区容忍性,即虚线处表示两个节点发生了分区。

  1. 假如要满足一致性,那么,我们只能让请求另一个节点的操作暂时 hang 住,返回 client 失败或者超时的结果,这种情况多发生在银行柜台等对数据一致性要求很高的情境下,因为比起保证用户资金数目的正确性比暂时让用户无法操作要更重要一些。

  2. 假如要满足可用性,因为网络已经隔离,也就没办法达到一致性,这种情况多发生在互联网行业中,比如新闻等对数据一致性要求不高但对可用性要求高的情况下,毕竟,用户压根看不了新闻比看不到及时新闻要重要的多。

大家可以自己自由组合,最终会证明,三种条件不可能同时满足,其实大部分情况下,我们都是在一致性和可用性之间取舍而已。

Consistency = Consensus?

Consistency 几乎被业界用烂,以至于当我们在讨论一致性的时候,其实我们都无法确定对方所说的一致性是不是和自己的那个一致。

Consistency:一致性,Consensus:协同,这两个概念极容易混淆。

我们常说的一致性(Consistency)在分布式系统中指的是对于同一个数据的多个副本,其对外表现的数据一致性,如线性一致性、因果一致性、最终一致性等,都是用来描述副本问题中的一致性的。而共识(Consensus)则不同,简单来说,共识问题是要经过某种算法使多个节点达成相同状态的一个过程。在我看来,一致性强调结果,共识强调过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值