湛江市城乡住房建设局网站,网站访问加速器,莱芜金点子信息港最新招聘信息港,河南省住房和城乡建设厅门户网站大家好#xff0c;我是月夜枫#xff0c;一个漂泊江湖多年的 985 非科班程序员#xff0c;曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。
在计算机科学领域#xff0c;分布式系统是一门极具挑战性的研究方向#xff0c;也是互联网应用中必不可少的优化实践…
大家好我是月夜枫一个漂泊江湖多年的 985 非科班程序员曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。
在计算机科学领域分布式系统是一门极具挑战性的研究方向也是互联网应用中必不可少的优化实践而 CAP 理论和 BASE 理论则是分布式系统中的两个关键的概念。
今天将带大家深入浅出地探讨这些概念帮助大家更好地理解分布式系统的奥秘。 目录
一、什么是分布式系统
二、 CAP理论
2.1、C - 一致性Consistency
2.1.1强一致性
2.1.3.最终一致性
2.2.A - 可用性Availability
三.、CAP 的特点
3.1 分区容错的重要性
3.2 AP Or CP
3.2.1.先保证一致性
3.2.2.先保证可用性
3.3 CAP 如何权衡
3.3.1.满足一致性和分区容错CP
3.3.2满足可用性和分区容错AP
四、 BASE 理论
4.1 基本可用
4.1.1功能需求
4.1.2.非功能需求
4.2 软状态
4.3 最终一致性 一、什么是分布式系统
首先让我们来谈谈分布式系统。你可以将分布式系统想象成一个庞大的计算机网络由多个计算机或服务器节点组成它们可能分布在不同的地理位置上。 如图所示应用层的三个节点都发布在不同的城市。这些节点之间可以相互通信和协作共同完成复杂的任务。
想象一下你是一名团队领导有一项任务需要完成。如果你独自一人完成可能需要花费很长时间。
但如果你将任务分解成几个子任务分派给你的团队成员他们可以并行工作更快地完成任务。这就是分布式系统的核心思想。
二、 CAP理论
接下来让我们谈谈 CAP 理论它是分布式系统设计中非常重要的一个原则。
CAP 是指在分布式系统中Consistency一致性、Availability可用性和 Partition tolerance分区容错性这三个基本原则。 2.1、C - 一致性Consistency
一致性意味着无论你从分布式系统的哪个节点读取数据你都会获得相同的数据副本它确保了数据的准确性。
在分布式系统中广泛的一致性分为三种分别是强一致性、弱一致性和最终一致性。 2.1.1强一致性
强一致性要求用户在分布式系统中访问数据时不管是哪个节点的响应数据都应该完全一致。
比如在订单系统中球鞋库存还剩 10 双张三刚买了一双球鞋数据更新完成后接下来李四看到的球鞋数量就只有 9 双否则就可能会出现超卖的情况。
但这需要更多的时间和精力来协调就像李四在买鞋的时候必须排队先等张三的购买动作结束后才可以继续效率较低。 2.1.2.弱一致性
弱一致性是指在分布式系统中的数据被更新后也允许让后续的访问拿到更新之前的老数据。
就像参加聚会一样每个人都有自己的钟表。各自的钟表时间可能会有点不一样但是这不影响大家聚在一起玩耍。
弱一致性提高了业务的效率但有时会导致一些混乱想象一下如果聚会人员的时间差太多就会陷入长久的等待。 2.1.3.最终一致性
最终一致性是弱一致性的特殊形式要求系统的数据更新完成在一段时间以后后续的所有访问都能拿到最新的数据。
这就像朋友圈的消息传播。当你发了一条消息它不会立刻被所有朋友看到但最终每个人都会看到相同的消息。
一般的业务系统基于性价比的考量绝大多数都是采用最终一致性作为分布式系统的设计思想。 而 CAP 理论里的一致性则要求是强一致性。正如官方文档中描述的那样All nodes see the same data at the same time所有节点在同一时间内数据完全一致。
2.2.A - 可用性Availability
可用性意味着分布式系统的每个请求都应该得到响应而且应该在有限的时间内完成。
可用性确保了系统的稳定性和可靠性它描述的是系统能够很好地为用户服务不会出现用户操作失败或者访问超时的情况影响用户体验。
即官方所说Reads and writes always succeed服务在正常响应时间内一直可用。 2.3.P - 分区容错性Partition Tolerance
分区容错性是指系统能够在网络分区或通信故障的情况下继续运行也就是节点之间的网络通信出现故障了或者系统中的某一个节点出问题了我们仍然需要保证业务系统可用。
即 The system continues to operate despite arbitrary message loss or failure of part of the system分布式系统在遇到某个节点或者网络分区故障时仍然能够对外提供满足一致性或可用性的服务。 三.、CAP 的特点
3.1 分区容错的重要性
这时有分布式基础的同学可能就会问了CAP 理论确实很重要但是这三个特性似乎不能同时满足是吧
没错这就是 CAP 理论的核心观点。
CAP 理论告诉我们在一个分布式系统中我们最多只能同时满足其中 2 个特性而无法同时满足 3 个。 为什么 CAP 三者不可兼得首先我们得知道在分布式系统中由于网络不可靠为了保证服务可以时刻对外提供服务所以分区容错性是一定要保证的。
试想如果只有一个分区谈分布式就没有意义了。而多个分区一定会有分区的故障问题分布式系统中保证分区容错就变成最基本的诉求了。
所以现在我们只需考虑在分区容错的基础上能否同时满足一致性和可用性我们可以用反证法来证明。
3.2 AP Or CP
假设现在有两个分区 P1 和 P2分区上都有同一份数据 D1 和 D2 现在它们是完全相同的。 接下来有一个请求 1 访问了 P1更改了 D1 上的数据。然后又有一个请求 2 访问了 P2去访问 D2 的同一份数据。
这时我们需要权衡。 3.2.1.先保证一致性
如果先保证满足一致性和分区容错即 CP。
这个过程很容易出现D1 已经更新数据但是查询 D2 时数据返回的还是老数据。
为了保证 D2 和 D1 数据完全一致必须在更新 D1 数据时给 P2 上的 D2 数据上锁等待 D1 更新完成后再同步更新 D2。
这个过程中锁住的 D2 就没法给请求 2 实时响应也就是违背了 P2 上的可用性。
所以在满足一致性的前提下CAP 无法同时满足。 3.2.2.先保证可用性
如果先保证满足可用性和分区容错即 AP。
可用性要求 P1 和 P2 都可以实时响应因此在 D2 刚更新完还未同步给 D1 时两个 DB 的数据是不一致的也就违背了 P1 和 P2 上的数据一致性。
所以在满足可用性的前提下CAP 亦无法同时满足。 3.3 CAP 如何权衡 CAP 三者不可兼得该怎么选择呢一般根据我们的业务可以有以下选择。
3.3.1.满足一致性和分区容错CP
保证分区的强一致性C不要求可用A。
相当于请求到达某个系统之前需要等待数据完全同步以后才会得到系统的数据响应一般在数据需严格保持一致的金融系统中会使用这种模式。
3.3.2满足可用性和分区容错AP
保证分区的可用性A不要求强一致性C。
当请求访问某个分区的数据时可能拿到未同步的老数据这种模式一般只要求数据满足最终一致性进而保证系统响应速度和高可用。
AP 在业界使用范围较广比如著名的 BASE 理论下文会细讲。
3.3.3满足可用和一致性AC
上文已经说过分布式系统中无法同时保证系统的强一致性C和可用性A。
这是因为分布式系统中的分区是客观存在无法避免的而单体系统中的数据库可以通过事务保证数据的一致性和可用性比如 MySQL 中事务的四大特性原子性、一致性、隔离性和持久性简称 ACID。 四、 BASE 理论
BASE 理论是当今互联网分布式系统的实践总结它的核心思想在于既然在分布式系统中实现强一致性的代价太大那不如退而求其次。 只需要各应用分区在提供高可用服务的基础上尽最大能力保证数据一致性也就是保证数据的最终一致性。
BASE 理论是 CAP 中保证分区容错P的前提下对可用性A和一致性C的权衡它由 Basically Available基本可用Soft State软状态Eventually-Consistent最终一致性三方面构成简称 BASE 理论。
分布式系统中CAP 理论提供了一个理论框架而 BASE 理论则提供了一种实际操作的指导原则。
4.1 基本可用
BASE 理论认为分布式系统在面临故障或异常情况时可以选择降低性能或一致性要求以保持基本的可用性。
这意味着系统可能会出现一些短暂的不一致性但最终会达到一致状态。 正如一个银行系统的系统设计一般有功能需求和非功能需求我们首先需要保证核心功能需求的基本可用性。
4.1.1功能需求
在银行系统里用户提款、转账等交易模块就是核心功能是用户的基本需求不能出问题。
而非核心功能可以出现异常但需要保证在一段时间内修复。
4.1.2.非功能需求
非功能需求是指用户业务不依赖的其它需求比如性能相关的要求用户转账在 0.5 秒内完成但是由于网络延迟等原因可以延迟响应至1~2 秒。
由于系统出现此类异常从而影响了系统的高可用性但核心流程依然可用即基本可用性。
4.2 软状态
软状态是指系统服务可能处于中间状态数据在保证一致性的过程中可能延迟同步但不会影响系统的可用性。
比如我们在购买火车票付款结束之后就可能处在一个既没有完全成功也没有失败的中间等待状态。用户需要等待系统的数据完全同步以后才会得到是否购票成功的最终状态。
BASE 理论认识到在分布式系统中状态可能会随时间变化而软化而不是立即达到一致状态。 这意味着我们需要容忍一些状态的不确定性比如我们在火车票候补排队时是不确定是否可以候补成功的。
4.3 最终一致性
最终一致性是 BASE 理论的核心思想。它指出分布式系统可以在一段时间内保持不一致状态但最终会收敛到一致状态。
它不像强一致性那样需要分区数据保证实时一致导致系统数据的同步代价过高。也不像弱一致性那样数据更新后不保证数据一致导致后续的请求只能访问到老数据。
当前业界的分布式系统甚至关系数据库系统的数据大都是用最终一致性实现的。比如 MySQL 的主从备份就是在一段时间内通过 binlog 日志和监听线程让从库和主库的数据保持最终一致。 总的来说BASE 理论其实就是牺牲了各节点数据的强一致性允许不同节点的数据在一段时间内不一致来获得更高的性能和高可用性。
在单体系统中数据库还能通过 ACID 来实现事务的强一致性但分布式事务需要考虑节点通信的延迟和网络故障。
所以BASE 理论是我们在实际的分布式系统中经常使用的方案。 好了本文的技术部分就到这里啦。
最后说一句(求关注别白嫖我)
如果这篇文章对您有所帮助或者有所启发的话帮忙关注一下您的支持是我坚持写作最大的动力。
求一键三连点赞、转发、在看。
我从清晨走过也拥抱夜晚的星辰人生没有捷径你我皆平凡你好陌生人一起共勉。