当前位置:首页 > 科技  > 软件

深入浅出:分布式、CAP 和 BASE 理论

来源: 责编: 时间:2023-09-21 20:48:11 405观看
导读1. 引言大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。在计算机科学领域,分布式系统是一门极具挑战性的研究方向,也是互联网应用中必不可少的优化实践,而 CAP

1. 引言

大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。rHV28资讯网——每日最新资讯28at.com

在计算机科学领域,分布式系统是一门极具挑战性的研究方向,也是互联网应用中必不可少的优化实践,而 CAP 理论和 BASE 理论则是分布式系统中的两个关键的概念。rHV28资讯网——每日最新资讯28at.com

今天,小❤将带大家深入浅出地探讨这些概念,帮助大家更好地理解分布式系统的奥秘。rHV28资讯网——每日最新资讯28at.com

2. 什么是分布式系统

首先,让我们来谈谈分布式系统。你可以将分布式系统想象成一个庞大的计算机网络,由多个计算机或服务器节点组成,它们可能分布在不同的地理位置上。rHV28资讯网——每日最新资讯28at.com

图片图片rHV28资讯网——每日最新资讯28at.com

如图所示,应用层的三个节点都发布在不同的城市。这些节点之间可以相互通信和协作,共同完成复杂的任务。rHV28资讯网——每日最新资讯28at.com

想象一下,你是一名团队领导,有一项任务需要完成。如果你独自一人完成,可能需要花费很长时间。rHV28资讯网——每日最新资讯28at.com

但如果你将任务分解成几个子任务,分派给你的团队成员,他们可以并行工作,更快地完成任务。这就是分布式系统的核心思想。rHV28资讯网——每日最新资讯28at.com

3 CAP理论

接下来,让我们谈谈 CAP 理论,它是分布式系统设计中非常重要的一个原则。rHV28资讯网——每日最新资讯28at.com

CAP 是指在分布式系统中,Consistency(一致性)、Availability(可用性)和 Partition tolerance(分区容错性)这三个基本原则。rHV28资讯网——每日最新资讯28at.com

C - 一致性(Consistency)

一致性意味着无论你从分布式系统的哪个节点读取数据,你都会获得相同的数据副本,它确保了数据的准确性。rHV28资讯网——每日最新资讯28at.com

在分布式系统中,广泛的一致性分为三种,分别是强一致性、弱一致性和最终一致性。rHV28资讯网——每日最新资讯28at.com

强一致性

强一致性要求用户在分布式系统中访问数据时,不管是哪个节点的响应,数据都应该完全一致。rHV28资讯网——每日最新资讯28at.com

比如在订单系统中球鞋库存还剩 10 双,张三刚买了一双球鞋,数据更新完成后,接下来李四看到的球鞋数量就只有 9 双,否则就可能会出现超卖的情况。rHV28资讯网——每日最新资讯28at.com

但这需要更多的时间和精力来协调,就像李四在买鞋的时候,必须排队先等张三的购买动作结束后才可以继续,效率较低。rHV28资讯网——每日最新资讯28at.com

弱一致性

弱一致性是指,在分布式系统中的数据被更新后,也允许让后续的访问拿到更新之前的老数据。rHV28资讯网——每日最新资讯28at.com

就像参加聚会一样,每个人都有自己的钟表。各自的钟表时间可能会有点不一样,但是这不影响大家聚在一起玩耍。rHV28资讯网——每日最新资讯28at.com

弱一致性提高了业务的效率,但有时会导致一些混乱,想象一下如果聚会人员的时间差太多,就会陷入长久的等待。rHV28资讯网——每日最新资讯28at.com

最终一致性

最终一致性是弱一致性的特殊形式,要求系统的数据更新完成,在一段时间以后,后续的所有访问都能拿到最新的数据。rHV28资讯网——每日最新资讯28at.com

这就像朋友圈的消息传播。当你发了一条消息,它不会立刻被所有朋友看到,但最终,每个人都会看到相同的消息。rHV28资讯网——每日最新资讯28at.com

一般的业务系统基于性价比的考量,绝大多数都是采用最终一致性作为分布式系统的设计思想。rHV28资讯网——每日最新资讯28at.com

而 CAP 理论里的一致性,则要求是强一致性。正如官方文档中描述的那样:All nodes see the same data at the same time,所有节点在同一时间内数据完全一致。rHV28资讯网——每日最新资讯28at.com

A - 可用性(Availability)

可用性意味着分布式系统的每个请求都应该得到响应,而且应该在有限的时间内完成。rHV28资讯网——每日最新资讯28at.com

可用性确保了系统的稳定性和可靠性,它描述的是系统能够很好地为用户服务,不会出现用户操作失败或者访问超时的情况,影响用户体验。rHV28资讯网——每日最新资讯28at.com

即官方所说Reads and writes always succeed,服务在正常响应时间内一直可用。rHV28资讯网——每日最新资讯28at.com

P - 分区容错性(Partition Tolerance)

分区容错性是指系统能够在网络分区或通信故障的情况下继续运行,也就是节点之间的网络通信出现故障了,或者系统中的某一个节点出问题了,我们仍然需要保证业务系统可用。rHV28资讯网——每日最新资讯28at.com

即 The system continues to operate despite arbitrary message loss or failure of part of the system,分布式系统在遇到某个节点或者网络分区故障时,仍然能够对外提供满足一致性或可用性的服务。rHV28资讯网——每日最新资讯28at.com

4. CAP 的特点

4.1 分区容错的重要性

这时,有分布式基础的同学可能就会问了,CAP 理论确实很重要,但是这三个特性似乎不能同时满足,是吧?rHV28资讯网——每日最新资讯28at.com

没错,这就是 CAP 理论的核心观点。rHV28资讯网——每日最新资讯28at.com

CAP 理论告诉我们,在一个分布式系统中,我们最多只能同时满足其中 2 个特性,而无法同时满足 3 个。rHV28资讯网——每日最新资讯28at.com

图片图片rHV28资讯网——每日最新资讯28at.com

接下来,有一个请求 1 访问了 P1,更改了 D1 上的数据。然后又有一个请求 2 访问了 P2,去访问 D2 的同一份数据。rHV28资讯网——每日最新资讯28at.com

这时,我们需要权衡。rHV28资讯网——每日最新资讯28at.com

先保证一致性

如果先保证满足一致性和分区容错,即 CP。rHV28资讯网——每日最新资讯28at.com

这个过程很容易出现:D1 已经更新数据,但是查询 D2 时,数据返回的还是老数据。rHV28资讯网——每日最新资讯28at.com

为了保证 D2 和 D1 数据完全一致,必须在更新 D1 数据时给 P2 上的 D2 数据上锁,等待 D1 更新完成后再同步更新 D2。rHV28资讯网——每日最新资讯28at.com

这个过程中,锁住的 D2 就没法给请求 2 实时响应,也就是违背了 P2 上的可用性。rHV28资讯网——每日最新资讯28at.com

所以在满足一致性的前提下,CAP 无法同时满足。rHV28资讯网——每日最新资讯28at.com

先保证可用性

如果先保证满足可用性和分区容错,即 AP。rHV28资讯网——每日最新资讯28at.com

可用性要求 P1 和 P2 都可以实时响应,因此在 D2 刚更新完还未同步给 D1 时,两个 DB 的数据是不一致的,也就违背了 P1 和 P2 上的数据一致性。rHV28资讯网——每日最新资讯28at.com

所以在满足可用性的前提下,CAP 亦无法同时满足。rHV28资讯网——每日最新资讯28at.com

4.3 CAP 如何权衡

CAP 三者不可兼得,该怎么选择呢?一般根据我们的业务可以有以下选择。rHV28资讯网——每日最新资讯28at.com

满足一致性和分区容错CP

保证分区的强一致性(C),不要求可用(A)。rHV28资讯网——每日最新资讯28at.com

相当于请求到达某个系统之前,需要等待数据完全同步以后,才会得到系统的数据响应,一般在数据需严格保持一致的金融系统中会使用这种模式。rHV28资讯网——每日最新资讯28at.com

满足可用性和分区容错AP

保证分区的可用性(A),不要求强一致性(C)。rHV28资讯网——每日最新资讯28at.com

当请求访问某个分区的数据时,可能拿到未同步的老数据,这种模式一般只要求数据满足最终一致性,进而保证系统响应速度和高可用。rHV28资讯网——每日最新资讯28at.com

AP 在业界使用范围较广,比如著名的 BASE 理论(下文会细讲)。rHV28资讯网——每日最新资讯28at.com

满足可用和一致性AC

上文已经说过,分布式系统中无法同时保证系统的强一致性(C)和可用性(A)。rHV28资讯网——每日最新资讯28at.com

这是因为分布式系统中的分区是客观存在无法避免的,而单体系统中的数据库可以通过事务保证数据的一致性和可用性,比如 MySQL 中事务的四大特性(原子性、一致性、隔离性和持久性,简称 ACID)。rHV28资讯网——每日最新资讯28at.com

5. BASE 理论

BASE 理论是当今互联网分布式系统的实践总结,它的核心思想在于,既然在分布式系统中实现强一致性的代价太大,那不如退而求其次。rHV28资讯网——每日最新资讯28at.com

只需要各应用分区在提供高可用服务的基础上,尽最大能力保证数据一致性,也就是保证数据的最终一致性。rHV28资讯网——每日最新资讯28at.com

BASE 理论是 CAP 中保证分区容错(P)的前提下,对可用性(A)和一致性(C)的权衡,它由 Basically Available(基本可用),Soft State(软状态),Eventually-Consistent(最终一致性)三方面构成,简称 BASE 理论。rHV28资讯网——每日最新资讯28at.com

分布式系统中,CAP 理论提供了一个理论框架,而 BASE 理论则提供了一种实际操作的指导原则。rHV28资讯网——每日最新资讯28at.com

5.1 基本可用

BASE 理论认为,分布式系统在面临故障或异常情况时,可以选择降低性能或一致性要求,以保持基本的可用性。rHV28资讯网——每日最新资讯28at.com

这意味着系统可能会出现一些短暂的不一致性,但最终会达到一致状态。rHV28资讯网——每日最新资讯28at.com

正如一个银行系统的系统设计,一般有功能需求和非功能需求,我们首先需要保证核心功能需求的基本可用性。rHV28资讯网——每日最新资讯28at.com

功能需求

在银行系统里,用户提款、转账等交易模块就是核心功能,是用户的基本需求,不能出问题。rHV28资讯网——每日最新资讯28at.com

而非核心功能可以出现异常,但需要保证在一段时间内修复。rHV28资讯网——每日最新资讯28at.com

非功能需求

非功能需求是指用户业务不依赖的其它需求,比如性能相关的:要求用户转账在 0.5 秒内完成,但是由于网络延迟等原因,可以延迟响应至1~2 秒。rHV28资讯网——每日最新资讯28at.com

由于系统出现此类异常,从而影响了系统的高可用性,但核心流程依然可用,即基本可用性。rHV28资讯网——每日最新资讯28at.com

5.2 软状态

软状态是指系统服务可能处于中间状态,数据在保证一致性的过程中可能延迟同步,但不会影响系统的可用性。rHV28资讯网——每日最新资讯28at.com

比如我们在购买火车票付款结束之后,就可能处在一个既没有完全成功,也没有失败的中间等待状态。用户需要等待系统的数据完全同步以后,才会得到是否购票成功的最终状态。rHV28资讯网——每日最新资讯28at.com

BASE 理论认识到,在分布式系统中,状态可能会随时间变化而软化,而不是立即达到一致状态。rHV28资讯网——每日最新资讯28at.com

这意味着我们需要容忍一些状态的不确定性,比如我们在火车票候补排队时是不确定是否可以候补成功的。rHV28资讯网——每日最新资讯28at.com

5.3 最终一致性

最终一致性是 BASE 理论的核心思想。它指出,分布式系统可以在一段时间内保持不一致状态,但最终会收敛到一致状态。rHV28资讯网——每日最新资讯28at.com

它不像强一致性那样,需要分区数据保证实时一致,导致系统数据的同步代价过高。也不像弱一致性那样,数据更新后不保证数据一致,导致后续的请求只能访问到老数据。rHV28资讯网——每日最新资讯28at.com

当前业界的分布式系统,甚至关系数据库系统的数据,大都是用最终一致性实现的。比如 MySQL 的主从备份,就是在一段时间内通过 binlog 日志和监听线程让从库和主库的数据保持最终一致。rHV28资讯网——每日最新资讯28at.com

总的来说,BASE 理论其实就是牺牲了各节点数据的强一致性,允许不同节点的数据在一段时间内不一致,来获得更高的性能和高可用性。rHV28资讯网——每日最新资讯28at.com

在单体系统中,数据库还能通过 ACID 来实现事务的强一致性,但分布式事务需要考虑节点通信的延迟和网络故障。rHV28资讯网——每日最新资讯28at.com

所以,BASE 理论是我们在实际的分布式系统中经常使用的方案。rHV28资讯网——每日最新资讯28at.com

rHV28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10898-0.html深入浅出:分布式、CAP 和 BASE 理论

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 这种方法可以解决开发中的重复“造轮子”

下一篇: 前后端分离项目必备——自动生成API文档神器Swagger

标签:
  • 热门焦点
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
Top