惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Tenable Blog
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
P
Proofpoint News Feed
A
About on SuperTechFans
P
Privacy International News Feed
月光博客
月光博客
雷峰网
雷峰网
S
Secure Thoughts
博客园 - 叶小钗
博客园 - 聂微东
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Project Zero
Project Zero
The Cloudflare Blog
SecWiki News
SecWiki News
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
罗磊的独立博客
A
Arctic Wolf
阮一峰的网络日志
阮一峰的网络日志
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
小众软件
小众软件
有赞技术团队
有赞技术团队
博客园 - 司徒正美
T
Tailwind CSS Blog
量子位
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity

博客园 - 一个人的合唱

手写简易docker synchronized 泛型学习 反码与补码 解决128位秘钥长度限制的方法 ThreadLocal的学习 读书笔记脑图列表 a=a++和a=++a centos7下安装python3 深入理解jvm虚拟机笔记(二) AtomicInteger的使用 volatile学习 echarts重新绘制的时候数据未更新 深入理解jvm虚拟机笔记(一) elasticsearch学习笔记 使用fiddler模拟post请求 二叉堆 二叉平衡树 二叉查找树
CAP学习
一个人的合唱 · 2018-11-04 · via 博客园 - 一个人的合唱

一、分布式系统的三个指标

  • C:数据一致性(consistency)
    • 所有节点拥有数据的最新版本(强一致性)
  • A:可用性(availability)
    • 服务具备高可用性
  • P:分区容错性(partition-tolerance)
    • 网络出现分区时,分区之间网络不可达,系统仍然能正常运作,即允许发送的信息可能不可达

二、Partition tolerance

  任何网络都是不可能始终可达,一定会出现通信失败的情况,这时通信双方在网络上像被割裂开来了,形成不同分区。

  我们必须允许通信失败的情况,做到这种分区情况的容错性,因为这是无法避免的,所以三者之中必须有P,那么就是说C和A无法同时达到

三、Consistency

  一致性是指系统内部所有节点数据和状态保持一致,你在系统中一个节点中写了数据,那么可以从其他节点读到该数据。

四、Availability

  可用性是指系统中的节点应该始终能对外提供服务,保持可用。

五、Consistency 和 Availability 的矛盾

  为什么C和A不能同时达到呢?就是因为通信可能会失败(即分区容错),无法达到百分之百通信成功。

  

  如图所示,在理想情况下,client往G1写数据,然后G1立马向G2通信来同步数据,那么client之后去G2就能读到该数据,这时可以同时满足CAP了。

  但是如果通信失败,那么在当前,G1和G2数据不同步,达不到一致性,而如果把G2剔除或禁止G2对外提供服务直到通信成功,那么此时对于外界来说,这个分布式系统还是一致的,但这时G2就没有可用性了。

  通信失败是无法避免的,所以CAP只能最多实现其中两样,也就是C和A任选一样。

  但这个只是说严格的C和A,也就是强一致性和完全可用性无法同时达到,但一致性其实是有不同级别的:

  • 强一致性:每个节点的数据都是最新版本
  • 弱一致性:容忍部分不是最新
  • 最终一致性:放宽对时间的要求,在容忍的时间内达到一致性即可

  互联网大部分应用其实只需要高可用性和最终一致性而已,失败之后重试直到成功,那么这样最终达到了一致性以及始终的可用性,但代价是中间存在一段时间的不一致性,当然也要求操作是幂等的