墙裂推荐:这可能是CAP理论的最好解释

简介: 你可能经常听到CAP定理, 这个定理描述了在设计分布式系统时的天然约束。就像其他文章一样, 本文以现实场景对比理解CAP定理。1.记忆公司

1.记忆公司


昨晚你的老婆过生日,你这个渣男记得并精心准备了生日礼物,夫妇相视一笑。


一个天才创意在你头脑中产生:既然人们的记忆通常不好,而我偏偏擅长记忆,那我为什么不利用记忆天赋开创一番事业。


90a08a29df7ec2f167b6e0b218e36f64.png


立马行动, 你制作了【记忆公司】的开业广告:


Remembrance Inc! - Never forget, even without remembering!

Ever felt bad that you forget so much? Don’t worry. Help is just a phone away!

When you need to remember something, just call 555—55-REMEM and tell us what you need to remember. For eg., call us and let us know of your boss’s phone number, and forget to remember it. when you need to know it back.. call back the same number[(555)—55-REMEM ] and we’ll tell you what’s your boss’s phone number.

Charges : only $0.1 per request


记忆公司的日常业务通话记录:


客户:喂,你好,你可以存储我邻居的生日吗?

你:可以,您说。

客户:1月2号

你:记录(在笔记本这个客户页上记下信息), 好的,欢迎下次垂询。

客户:谢谢

你:请支付1元


2.业务扩张


凭借创意和人品,【记忆公司】的规模越做越大,而成本只需要笔记本和电话。


当你某天生病不能工作时,你会损失一天的收入;更不用说当天想要信息的客户会因此发狂。


你有了新计划:

1. 你和你老婆分别使用分机

2. (555)—55-REMEM 客服电话不变

3. 客服电话会转到空闲的分机号

eeb4d951b47449232efb66d3fef2cfa7.png


3.第一次业务宕机


有一天你收到老客户罗志祥的电话,要求查询"明天的约会安排";


你一脸蒙蔽,我不知道啊,你的记忆页上没这个信息啊; 客户咣当挂断了电话。


当天复盘, 猜想是昨天罗志祥把业务电话打到我老婆那里了,事实确实如此。


你们都意识到分机号带来的新问题。


多么可怕的分布式设计中的缺陷!你的分布式系统是不一致的!总会有一个时机,客户会将业务电话打到你们其中一个;在下一次拨号时,客户就可能收到不一致的信息。


4.修复一致性问题


睡前吹风时间, 你想到一个主意:


当我们其中一个人接到客户新的记忆业务,我们会在挂电话之前告诉另一个人

这样我们都能在笔记本上记下新业务

当客户查询时,我们两个都可以轻松应对


eba3e490b4cb3c042e83766be9701660.png


这里有一个问题:当其中一人收到新业务电话,两人就不能并行工作了。


例如:当你收到新业务并告诉我记录信息时, 我不能接其他电话。


但是这个问题也不大,因为大部分都是查询业务(可以再拨电话重试),我们首要的是确保信息正确。


你老婆进一步提出:如果某天你不在岗,我收到新业务,你的笔记本不能得到最新信息,这就会有可用性问题, 因为我没能通知你,我就不能挂断电话完成这单业务。


5. 更优方案


你慢慢理解了分布式系统中的“一致性”和“可用性”。你提出了更优方案:


1. 收到新业务电话, 挂电话前通知对方,这样两个人都能记下信息


2. 某天其中一人不在岗,另外一人收到新业务电话 ,给缺岗者发一封邮件


3. 第二天缺岗者上岗查收邮件,更新自己的笔记本。


6cf62027420ad7a6ab1b7f1fa9d440e8.png


Nice, 现在一致性和可用性都满足了。


6. 老婆难养

使用优化方案,一切都很顺利,你们的笔记本是一致的,当你们其中一人不在岗系统也能很好的运作。


但是, 凡事都有但是, 某天你们都在岗,但是你老婆嫌你碗没洗干净,今儿不想理你,收到新业务不通知你了,你的查询业务就有问题了


9c6909ee778235aa3f7bf29c1af88758.png


你的方案包含了“一致性”,“可用性”, 但是不满足“分区容错”。


为了满足“分区容错”, 你可以自我下线(直到你们修复关系),让你老婆一人接手业务,但是你的系统就不可用了


7.结论


我们回过头看CAP定理:在设计分布式系统时,“一致性Consistency ”“可用性Availability”“分区容错Partition Tolerance” 你只能满足两个。


Consistency:一旦接受了客户的新业务,在客户后续查询时必须得到最新的信息


Availability:只要你们一人在岗,记忆公司就一直提供服务 (节点下线的角度)


Partition Tolerance:你们夫妻二人闹矛盾了,记忆公司依旧运作(节点连通性角度)有了这样的场景,理解CP、AP、CA就不难了


0f911d53c7f074f4145172618d1e0856.png


雇佣工具人-->最终一致性


雇佣工具人,更新[未更新的人]的笔记本,相比你老婆实时通知你更新, 这个工具人有个好处是在后台跑腿,你们两个业务都不会阻塞。


这也是很多NoSql的工作方式:一个节点在本地更新,后台进程同步到其他节点, 唯一存在的问题是少数时候丢失一致性。


你老婆收到新业务,工具人还没来得及跑腿,客户就立即回拨并转到你的分机,你给出不一致的答复。这种情况有限,因为客户不会如此迅速忘记事情。


这就是CAP定理和最终一致性的现实解释。

相关文章
|
JSON 监控 算法
TIDE.JS:三维空间数字化渲染引擎
为了满足我们三维空间渲染各个业务的需求,并且提供易用SDK方便第三方开发人员快速搭建自己的应用或平台,我们自研了TIDE.JS——一款组件化、轻量化、高性能、大规模的面向空间数字化应用的渲染引擎。
3923 0
TIDE.JS:三维空间数字化渲染引擎
|
11月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
279 1
Gateway服务网关
|
12月前
|
缓存 JavaScript UED
Vue 的动态组件与 keep-alive
【10月更文挑战第19天】总的来说,动态组件和 `keep-alive` 是 Vue.js 中非常实用的特性,它们为我们提供了更灵活和高效的组件管理方式,使我们能够更好地构建复杂的应用界面。深入理解和掌握它们,以便在实际开发中能够充分发挥它们的优势,提升我们的开发效率和应用性能。
172 18
|
机器学习/深度学习 人工智能 测试技术
阿里云百炼已上线超强推理开源模型QwQ-32B,尺寸更小,性能比肩DeepSeek满血版
通义千问团队推出了320亿参数的QwQ-32B模型,通过大规模强化学习和多阶段训练,在数学、编程及通用能力上达到或超越了DeepSeek-R1等先进模型。QwQ-32B模型已在阿里云百炼上线,支持API调用,用户可通过官方文档了解详细使用方法。未来,团队将继续探索智能体与RL集成,推动人工通用智能的发展。
8751 0
|
安全 物联网 Linux
学习Linux对网络安全的重要性
**学习Linux对网络安全至关重要:** 1. 开源操作系统广泛应用于服务器、网络设备,掌握Linux是安全专家必备技能。 2. Linux内置安全特性,如最小权限和防火墙,加上丰富的安全工具,提供强大保障。 3. 可定制性允许灵活配置,满足安全需求,开源社区提供持续更新和教育资源。 4. 学习Linux能提升攻防能力,用于系统加固和渗透测试,适应跨平台安全场景。 5. 随着云计算和物联网发展,Linux在网络安全中的角色日益关键。
321 3
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之如何确保解决冲突代码是提交到合并的目标分支
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
Linux 编译器 vr&ar
【Linux】—— 详解动态库和静态库
【Linux】—— 详解动态库和静态库
552 0
|
XML 安全 Java
Android Studio App开发之广播组件Broadcast的讲解及实战(包括收发标准、有序、静态广播实现手机震动功能 附源码)
Android Studio App开发之广播组件Broadcast的讲解及实战(包括收发标准、有序、静态广播实现手机震动功能 附源码)
1034 0
|
传感器 人工智能 监控
智慧城管系统源码 如何快速处理an件
智慧城管系统是智慧城市的重要组成部分,它综合应用大数据、物联网技术等多种现代信息技术手段,旨在整合城市管理资源,引入先进的城市管理技术,实现体制、机制、手段和技术创新。智慧城管通过建立科学化、精细化的城市管理新模式,为城市管理提供集城市管理、协同处置、执法监督、应用调剂、决策指挥、公众互动为一体的智慧管理大平台。,智慧城管的功能涵盖了多个方面。它可以实现智能化的交通管理,通过传感器、摄像头等设备实时监测交通流量和交通状况,并根据实时数据进行交通信号的智能调节和优化,以提高交通运行效率,减少交通拥堵,智慧城管还能提升治安管理的水平,通过视频监控、人脸识别等技术手段,实现对公共场所的实时监控和异常
91 0