面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

CAP理论指在一个分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个要素最多只能同时实现两点,不可能三者兼顾。

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

让我们想象一个简单的分布式系统,它由G1和G2两个节点组成的,这两个节点都存有相同的变量V且初始值都是V0,如下图

面试官:CAP 都搞不清楚,别跟我说你懂微服务

客户端Client可以向任何一个节点发出读写请求,当节点收到该请求,经过计算返回相应的应答,如写数据操作

面试官:CAP 都搞不清楚,别跟我说你懂微服务

读数据操作如下

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

分区容错性P

The system will continue to function when network partitions occur.

当网络出现分区后,系统能够继续履行职责。

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

一致性C

A read is guaranteed to return the most recent write for a given client

对某个指定的客户端来说,它的读操作保证能够返回最新的写操作结果。如下

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

节点G1在应答client之前,先把数据同步给G2节点,当client从G2读取时就已经是最新的数据了,从而达到了数据的一致性。

可用性A

A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).

非故障节点将在合理的时间内返回合理的响应,但不能是错误响应或超时。

面试官:CAP 都搞不清楚,别跟我说你懂微服务

面试官:CAP 都搞不清楚,别跟我说你懂微服务

第一阶段,client向节点G1发出写操作请求,数据是v1。由于网络分区,导致G1无法把数据同步给G2节点,如果此时满足可用性A,client向节点G2发出读操作请求,如下图

面试官:CAP 都搞不清楚,别跟我说你懂微服务

由于满足可用性A则G2返回给client的数据是v0,则不满足一致性C。如果需要满足一致性C,则失联的G2暂时不可用,直到网络恢复并同步数据完成方可。

面试官:CAP 都搞不清楚,别跟我说你懂微服务

本文部分内容参考并翻译

https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

面试官:CAP 都搞不清楚,别跟我说你懂微服务

End

版权归@码农神说所有,转载须经授权,翻版必究

转载可联系助手,微信号:codeceo-01

往期精彩

互联网人的娱乐精神之28岁退休 & P8和生活助理的故事

千万不能让程序员给娃娃取名字

漫画 | 啊哈,给我一碗孟婆汤

人工智能之机械基

面试官:CAP 都搞不清楚,别跟我说你懂微服务

扫码关注我们

码农神说

一个让你远离抑郁的公众号

面试官:CAP 都搞不清楚,别跟我说你懂微服务

原文 

https://mp.weixin.qq.com/s?__biz=MzIyODc2MDgxOA==&mid=2247485319&idx=1&sn=516a43347221145c58c3645a2f4cce77&chksm=e84c4a1adf3bc30cc83ab16b94fd2e44074aeb7ef7187fdcad2e50c4419a1b07a3237a94e123&sessionid=0&scene=126&subscene=0&clicktime=1593001301&enterid=1593001301&ascene=3&devicetype=android-29&version=27000f3d&nettype=WIFI&lang=zh_CN&exportkey=A9Hl/nRwg8lDzgG2Z/czDUE=&pass_ticket=1SFLrTKIPPJarxUfuYdPQ1nP96z4YcSZFzWVVAHkvTq73eYbN0OJyD9gJcO3BG15&wx_header=1

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 面试官:CAP 都搞不清楚,别跟我说你懂微服务

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址