0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

架构设计之 CAP 定理

Linux爱好者 来源:fqj 2019-05-07 11:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在计算机领域,如果是初入行就算了,如果是多年的老码农还不懂 CAP 定理,那就真的说不过去了。CAP可是每一名技术架构师都必须掌握的基础原则啊。

现在只要是稍微大一点的互联网项目都是采用 分布式 结构了,一个系统可能有多个节点组成,每个节点都可能需要维护一份数据。那么如何维护各个节点之间的状态,如何保障各个节点之间数据的同步问题就是大家急需关注的事情了。

CAP定理是分布式系统中最基础的原则。所以理解和掌握了CAP,对系统架构的设计至关重要。

一、什么是 CAP?

「 CAP定理 」又被称为 布鲁尔定理,它提出对于一个分布式系统而言,不能同时满足以下三点:

Consisteny(一致性)

Availability(可用性)

Partition tolerance(分区容错性)

也就是说CAP定理指明了,任何分布式系统只能同时满足这三项中的两项。

架构设计之 CAP 定理

如上图,如果是最多同时满足两项,那我们可以有三个组合:CA、CP、AP。在聊这三个组合之前,我们先分别看一下 Consisteny(一致性)、Availability(可用性)、Partition tolerance(分区容错性)的含义。

假设某个系统当前有两个节点A和B,两个节点分别可以由Actor进行读写,两个节点之间的数据会自动完成同步。

架构设计之 CAP 定理

Consisteny(一致性)

一致性的要求是指,对于任何客户端(上图Actor)来说,每次的读操作,都能获得最新的数据。即,当有客户端向A节点写入了新数据之后,其它客户端从B节点中进行读操作所获得的数据必须也是最新的,是与A节点数据保持一致的。

Availability(可用性)

可用性的要求是指,每个请求都能在合理的时间内获得符合预期的响应(不保证获取的结果是最新的数据)。

按照上图来看就是,客户端只要向A节点或B节点发起请求后,只要这两个节点收到了请求,就必须响应给客户端,但不需要保证响应的值是否正确。

Partition tolerance(分区容错性)

分区容错性是指,当节点之间的网络出现问题之后,系统依然能正常提供服务。

讲完了C、A、P的含义和要求,我们继续来看看它们之间如何组合使用。

二、CAP 怎么应用?

先把视野回到这张图上:

架构设计之 CAP 定理

虽然我们知道有 CA、CP、AP 三种组合方式,但是在分布式系统的结构下,网络是不可能做到100%可靠的。既然网络不能保证绝对可靠,那 P(分区容错性)就是一个必选项了。原因如下:

如果选择 CA组合,放弃 P(分区容错性)。还是以最上面的图中A和B节点来举例,当发生节点间网络故障时,为了保证 C(一致性),那么就必须将系统锁住,不允许任何写入操作,否者就会出现节点之间数据不一致了。但是锁住了系统,就意味着当有写请求进来的时候,系统是不可用的,这一点又违背了 A(可用性)原则。

因此分布式系统理论上是不可能有CA组合的,所以我们只能选择 CP 和 AP组合架构。

下面我们来详细看一下 CP架构 和 AP架构的特点:

CP 架构

CP架构即 Consisteny(一致性)与 Partition tolerance(分区容错性)的组合。

架构设计之 CAP 定理

如上图,由于网络问题,节点A和节点B之前不能互相通讯。当有客户端(上图Actor)向节点A进行写入请求时(准备写入Message 2),节点A会不接收写入操作,导致写入失败,这样就保证了节点A和节点B的数据一致性,即保证了Consisteny(一致性)。

然后,如果有另一个客户端(上图另一个Actor)向B节点进行读请求的时候,B请求返回的是网络故障之前所保存的信息(Message 1),并且这个信息是与节点A一致的,是整个系统最后一次成功写入的信息,是能正常提供服务的,即保证了Partition tolerance(分区容错性)。

上述情况就是保障了CP架构,但放弃了Availability(可用性)的方案。

AP 架构

AP架构即 Availability(可用性)与 Partition tolerance(分区容错性)的组合架构。

架构设计之 CAP 定理

如上图,由于网络问题,节点A和节点B之前不能互相通讯。当有客户端(上图Actor)向节点A进行写入请求时(准备写入Message 2),节点A允许写入,请求操作成功。但此时,由于A和B节点之前无法通讯,所以B节点的数据还是旧的(Message 1)。当有客户端向B节点发起读请求时候,读到的数据是旧数据,与在A节点读到的数据不一致。但由于系统能照常提供服务,所以满足了Availability(可用性)要求。

因此,这种情况下,就是保障了AP架构,但其放弃了 Consisteny(一致性)。

三、CAP 注意事项?

了解了CAP定理后,对于开发者而言,当我们构建服务的时候,就需要根据业务特性作出权衡考虑,哪些点是当前系统可以取舍的,哪些是应该重点保障的。

即使是在同一个系统中,不同模块的数据可能应用的CAP架构都是不同的。举个例子,在某个电商系统中,属于用户模块的数据(账密、钱包余额等)对一致性的要求很高,就可以采用CP架构。而对于一些商品信息方面的数据对一致性要求没那么高,但为了照顾用户体验,所以对可用性要求更高一些,那么这个模块的数据就可以采用AP架构。

另外,虽然上面第二节讲到过我们只能选择CP和AP,无法选择CA。但这句话成立的前提条件是在系统发生了网络故障的情况下。然而,网络故障的概率在系统的整个生命周期中占比是很小的,因此我们在设计的时候,虽然要考虑网络问题下的方案,但也要考虑网络正常情况下的方案,即在网络正常情况下,CA是可以实现的,我们也需要去保证在绝大多数时间下的CA架构。

再者,即使我们按照CAP定理,三个中只能取其二,但不代表我们只需要保障其中的两点,而完全的放弃第三点,我们应该为不能保障的第三点也做一些防备措施或者冗余方案,来使系统更加的完善健全。

以上,就是对CAP定理的一些思考。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CP
    CP
    +关注

    关注

    3

    文章

    37

    浏览量

    25926
  • CAP平台
    +关注

    关注

    0

    文章

    4

    浏览量

    8453

原文标题:架构设计之「 CAP 定理 」

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式软件分层架构设计原则

    嵌入式软件分层架构的设计原则如下: 模块化和可扩展性:每一层应当保持松耦合,这样当硬件变化或某些功能扩展时,只需要修改对应的层次,而不影响整体架构。 硬件无关性:上层代码应当尽量避免直接依赖硬件
    发表于 11-28 07:05

    ‌TE Connectivity KILOVAC CAP120R 高压闭锁接触器技术解析与应用指南

    TE Connectivity (TE)/Kilovac CAP120R高压闭锁接触器满足业界对更高电压隔离、更小尺寸/重量和更低功耗的需求。就电压和电流额定值来说,CAP120R属于极小、重量极轻
    的头像 发表于 11-07 15:05 273次阅读

    分布式光伏环境监测站的技术架构与应用实践

    分布式光伏环境监测站的技术架构与应用实践 柏峰【BF-GFQX】一、系统技术架构解析 分布式光伏环境监测站采用“感知层-传输层-应用层”三层架构设计,实现环境数据的全链路智能化处理。
    的头像 发表于 10-13 10:05 246次阅读
    分布式光伏环境监测站的技术<b class='flag-5'>架构</b>与应用实践

    TensorRT-LLM的大规模专家并行架构设

    之前文章已介绍引入大规模 EP 的初衷,本篇将继续深入介绍 TensorRT-LLM 的大规模专家并行架构设计与创新实现。
    的头像 发表于 09-23 14:42 675次阅读
    TensorRT-LLM的大规模专家并行<b class='flag-5'>架构设</b>计

    光伏电站中应用的无人机AI巡检系统架构设

    维护提供数据支持,在当下的电站运营中发挥着重要的作用。 从系统架构设计方面来说,通过硬件层、软件层以及云平台层各层不同功能模块部署设计,实现智能化的巡检流程应用。首先是硬件层,通过构建无人机平台适应如沙漠、山地
    的头像 发表于 09-02 14:13 229次阅读
    光伏电站中应用的无人机AI巡检系统<b class='flag-5'>架构设</b>计

    NUC972如何移动非作系统 CAP (捕获) 窗口开始地址?

    NUC972如何移动非作系统 CAP (捕获) 窗口开始地址?
    发表于 09-01 07:41

    深入剖析RabbitMQ高可用架构设

    在微服务架构中,消息队列故障导致的系统不可用率高达27%!如何构建一个真正可靠的消息中间件架构?本文将深入剖析RabbitMQ高可用设计的核心要点。
    的头像 发表于 08-18 11:19 696次阅读

    TPS51317 3.3V / 5V 输入,6A,D-CAP+ 模式同步整流转换器数据手册

    TPS51317 是一款完全集成的同步降压稳压器 采用 D-CAP+ ™ 模式架构。它用于 3.3V 和 5V 考虑空间的降压系统、高性能和 需要优化的组件数量。
    的头像 发表于 07-09 09:47 473次阅读
    TPS51317 3.3V / 5V 输入,6A,D-<b class='flag-5'>CAP</b>+ 模式同步整流转换器数据手册

    同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,运行速度如何?

    ARM 架构与 RISC-V 架构的 MCU 在同一性能水平下的运行速度对比,需从架构设计原点、指令集特性及实际测试数据展开剖析。以 ARM Cortex-M33 这类 ARMv8M 架构
    的头像 发表于 07-02 10:29 1200次阅读
    同一水平的 RISC-V <b class='flag-5'>架构</b>的 MCU,和 ARM <b class='flag-5'>架构</b>的 MCU 相比,运行速度如何?

    聚徽解码——从嵌入式到模块化:国内工控平板的柔性技术架构设

    在工业 4.0 与智能制造蓬勃发展的浪潮下,国内工控平板作为工业自动化与智能化的关键设备,其技术架构设计正经历着从嵌入式到模块化的深刻变革。这一转变旨在赋予工控平板更强的柔性,使其能够更高效、灵活
    的头像 发表于 06-13 16:24 404次阅读

    光伏运维管理系统架构设计及其应用分析

    开展。 光伏运维管理系统集成先进的数据监测、故障诊断、运维任务管理等多种功能内容,为光伏电站提供全面、高效、智能的运维服务。其系统分层架构设计,覆盖感知层、网络层、平台层和应用层。感知层通过传感器和摄像头等设
    的头像 发表于 06-10 11:34 467次阅读
    光伏运维管理系统<b class='flag-5'>架构设</b>计及其应用分析

    用Manim动画生动演示勾股定理

    作者:算力魔方创始人/英特尔创新大使刘力 一,引言 勾股定理是初中数学中最重要的几何定理之一,它揭示了直角三角形三条边之间的数量关系。传统的静态教学方式往往难以让学生直观理解这一定理的本质。而使
    的头像 发表于 04-27 16:36 592次阅读

    设备远程监控与预测性维护系统架构设计及应用实践

    本文探讨了在工业4.0与数字化转型背景下,设备管理系统从传统人工巡检向智能运维的深刻变革。文章从技术架构、实施路径和典型应用三个方面深入解析了设备远程监控与预测性维护系统的实现方法。
    的头像 发表于 04-15 10:16 841次阅读
    设备远程监控与预测性维护系统<b class='flag-5'>架构设</b>计及应用实践

    芯片架构设计的关键要素

    芯片架构设计的目标是达到功能、性能、功耗、面积(FPA)的平衡。好的芯片架构能有效提升系统的整体性能,优化功耗,并确保在成本和时间的限制下完成设计任务。
    的头像 发表于 03-01 16:23 1402次阅读

    面向服务的整车EE架构(SOA)设计开发咨询服务

    经纬恒润多年来一直致力于为客户提供先进电子电气架构解决方案,近年来,经纬恒润在国内率先开展整车SOA架构的技术研发和业务布局,参与多款SOA架构下量产车型的研发,积累了丰富的SOA架构设
    的头像 发表于 12-12 15:11 1254次阅读
    面向服务的整车EE<b class='flag-5'>架构</b>(SOA)设计开发咨询服务