CAP学习笔记

  定义:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。CAP关注的是分布式数据读写

  • 一致性(Consistence):对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。
  • 可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。
  • 分区容错性(Partition Tolerance:当出现网络分区后,系统能够继续“履行职责”。

  虽然 CAP 理论定义是三个要素中只能取两个,但放到分布式环境下来思考,我们会发现必须选择 P(分区容忍)要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入,当有写入请求时,系统返回 error(例如,当前系统不允许写入),这又和 A 冲突了,因为 A 要求返回 no error 和 no timeout。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构

CAP关键细节点

  • CAP关注的粒度是数据,而不是系统或者节点,所以在系统设计的时候应该将关注点放到数据上,具体数据具体分析。
  • CAP是忽略网络延时的,意味着CAP 理论中的 C 在实践中是不可能完美实现的。在需要强一致性的业务场景中,只能单点写入,其它节点备份。(这里只争对数据,系统还是可以设计成分布式的)
  • 正常运行的情况下,不存在CP或者AP的选择,可以同时满足CA。
  • CAP 理论的“牺牲”只是说在分区过程中我们无法保证 C 或者 A,但并不意味着什么都不做。因为在系统整个运行周期中,大部分时间都是正常的,发生分区现象的时间并不长。分区期间放弃 C 或者 A,并不意味着永远放弃 C 和 A,我们可以在分区期间进行一些操作,从而让分区故障解决后,系统能够重新达到 CA 的状态。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿DD

Gitflow工作流程

原文链接:https://www.atlassian.com/git/workflows#!workflow-gitflow 译文链接:http://blog....

1878
来自专栏帅小子的日常

spring的简单入门

3867
来自专栏木子昭的博客

Chrome吃内存的能力可不是说着玩的!Chrome能吃多少内存呢?

The Great Suspender的作用就是, 把暂且用不到的网页进程挂起来, 等需要的时候, 重新加载它!

983
来自专栏张戈的专栏

解决mstsc无法连接问题:由于没有远程桌面授权服务器可以提供许可证…

最近一直很忙很忙,完全没时间打理博客,回家后基本上就是洗洗睡的节奏,我之前真的从未想过,我会有回到家不想碰电脑的情况。。。不但不想碰电脑,而且失眠症也消失无遗,...

6125
来自专栏Laoqi's Linux运维专列

为什么apache性能没有nginx高

56410
来自专栏不止是前端

实用主义:前后端分离MOCK数据

34611
来自专栏散尽浮华

Linux下分布式系统以及CAP理论分析

CAP理论被很多人拿来作为分布式系统设计的金律,然而感觉大家对CAP这三个属性的认识却存在不少误区,那么什么是CAP理论呢?CAP原本是一个猜想,2000年PO...

801
来自专栏农夫安全

一次比较简单的手工ASP注入

前言 这是一个比较新手中的新手注入。这是之前群里一个朋友丢给我的站点,说有注入点,但是他手上没有工具,他知道我有工具就叫我帮忙看一下。 一般我有个习惯,进去先在...

7206
来自专栏FreeBuf

雅虎紧急修复了可导致远程命令执行的SQL注入漏洞

最近,因存在严重的SQL漏洞,雅虎的网站遭到了侵入,受到了很大的的影响(注:该网站并不是yahoo主站,而是隶属于yahoo的一个印度创意征集网站,详情见文末)...

2166
来自专栏FreeBuf

看我如何在短时间内对Shopify五万多个子域名进行劫持

今天我要分享的是5万多个Shopify平台子域名劫持漏洞的发现过程。首先,我要说明的是,该漏洞不仅只存在于Shopify平台系统,还存在其它几个云服务平台系统中...

1541

扫码关注云+社区