作者:孤独烟

来自:打杂的ZRJ

引言

CAP理论大概说一下就是,一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)。

目前网上对这三大特性的解释还是比较模糊,因此有了本文!

正文

"记忆公司"登场

昨天晚上你的妻子感谢你记得她的生日,并给她买了礼物。突然,一个点子闪过了你的脑海!人们现在普遍记忆力变差了,而你的记忆力却十分的好。

因此,为何不成立一间公司可以充分运用自己的记忆天赋来赚钱呢?心动不如行动,你马上登报分享你的点子

以下是一次你和顾客的电话对话。

顾客:Hey,麻烦帮我记住我邻居的生日。

你:当然可以。他生日什么时候? 

顾客:1月2日。

你:(在一个本子,翻到这位顾客的一页,记录下他邻居的生日。)好的,已记录好。下次你找回邻居的生日,请再次拨打电话。 

顾客:谢谢。 

你:不客气,本次收费0.1美元。

业务变大了

你的想法是如此简单,除了纸质笔记本和手机之外什么都不需要,但却非常有效, 你每天都开始接听数百个电话。

但慢慢的,问题出现了。顾客打电话进来时,需要等待的时间越来越多,另外,当你生病时,所有顾客都不能获得服务,这令人很是烦恼。

于是,你开始了一个新的计划:

  • 你和你的妻子同时接收顾客的电话

  • 顾客仍然只需要记着一个公司的服务电话 (555)–55-REMEM

  • 一个路由器会将顾客的电话分发到你和妻子电话上

第一次服务出问题

你的新计划实行了两天后,你接到了一个老客户Jhon的电话。对话内容如下

John:Hey 

你:很高兴拨打记忆公司电话,有什么可以帮到你吗 

John:可以告诉我去北京的航班是什么时候吗 

你:当然,稍等1秒。(然后你翻开 John 的页面,发现并没有 John 航班的记录) 

你:你好,是不是搞错了,我们这里并没有关于你航班的信息 

John:什么?!昨天我才刚打电话过来说去北京航班的事情

这是怎么回事勒? Jhon在撒谎么?你稍加思考便找到了原因!应该是妻子接到了电话,你走到妻子的桌子,发现妻子将 John 的航班记录在了本子上,这时你才意识到导致问题的原因,妻子接听到 John 的电话,但你的本子没有 John 的记录。

这就存在一个严重的问题了!你的系统没法保证一致性。打进来的电话可能其中一人接听并记录下来,下次电话查询时却可能由另一人接听,这样就会出现不一致的问题,无法为顾客准确提供服务。

怎么解决一致性问题

当你的妻子睡着后,晚上你躺在床上辗转难眠。在第二天清晨,你想到了一个全新的计划,你叫醒了你的妻子并告诉她:
“亲爱的,这是我们现在要做的!”

  • 我们两个人中任何一个人接到电话(客户要求我们记录事情的时候),在挂电话之前,我们都要通知另一个人

  • 我们两个同时在本子更新这位顾客的记录

  • 下次这位顾客再次打电话进来查询,这时我们不需要告知对方,因为两个本子都有这位顾客的记录了

你对妻子说,这个方案只有一个问题,当有顾客需要记录时,我们不能并行地工作。例如,你接收到记录的电话并这个信息告知我,这时我就不能再接听其他顾客的电话了。但这个问题基本上也是可以接受的,因为大部分顾客的电话都是查询的。

然而,这个方案虽然解决了一致性问题,但是依然存在可用性问题!如果某天我们其中一个人有事不能工作了怎么办?因为我们需要同时更新我们两个人的本子,当我接到一个记录的电话时,而你恰好不在,我就无法更新你的本子。这样我们就无法完成客户的请求,可用性无法保证!

更好的解决方案

难道就没有同时满足一致性和可用性 的设计吗?
你经过一夜的思考,又想到了一个方案,具体如下:

  • 当接到有记录需求的电话,如果我们两人当天都上班,那么我们同时记录下这位顾客的记录

  • 如果有一个人没上班,我们就将变更信息以e-mail的形式发给另一个人

  • 第二天,没上班的那个人上班后,先接收e-mail,并在自己的本子上记录所有顾客的要求。记录好后,才开始接收第一个电话。

这样我们就同时满足了一致性和可用性的要求。

妻子生气了

又过了一段时间,公司经营不错。由于你藏私房钱的原因,妻子生气了。

于是她接到一位顾客需要记录的电话并没告知你。由于记录没能在两个本子更新,你的设计完全被打破了。你的设计建立在两人良好沟通的前提下,如果出现沟通无法进行的情况,系统就出现问题了。

也就是说,你的设计没有达到 分区容忍性(partition tolerant)的要求。

ps:这就是满足一致性和可用性的情况,无法保证分区容忍性。

当然,你也可以允许沟通无法进行的情况下继续提供服务。你要是选择可用性(两个人依然继续上班),你就无法保证你和你妻子之间本子上记录的内容一致。

ps:这就是满足分区容忍性和可用性的情况,无法保证一致性。

最后,你也可以允许沟通无法进行的情况下继续提供服务。你要是选择一致性(都无法沟通了,还要保证一致性),你只能狠心的把你妻子给炒鱿鱼,你一个人默默的提供服务,那在这种情况下,可用性就无法保证。

ps:这就是满足分区容忍性和一致性的情况,无法保证可用性。

总结

下面回顾CAP理论,对照三个定义如下。可以发现,我们最多满足其中的两个要求
一致性:一旦顾客更新了记录,下次再打电话查询时,总能获取最新的记录
可用性:只要你和妻子有人上班,记忆公司总能为顾客提供服务
分区容忍性:即使你和妻子的沟通无法进行,记忆公司仍然可以提供服务

长按订阅同类文章

架构师小秘圈

陛下,赐我一个赞↓

2018年,关于CAP最精彩的小故事!相关推荐

  1. 2018全球机器学习技术大会精彩谢幕

    文章来源:ATYUN AI平台 金秋9月,定位全球AI之都的魔都上海,在刚刚举办完全球瞩目的WAIC世界人工智能大会,又迎来了在技术界备受关注的ML-Summit 2018全球机器学习技术大会.本届大 ...

  2. 十个励志小故事,一场精彩的人生课!

    引语:一字洞悉天下,一语道破天机,一个简单故事足以给人意味深长的人生启示.千万种人生就有千万个故事,不同的经历就有不同的体验.这些哲理小故事,读来启人心智,发人深省,从不同侧面阐释了人生哲理,而且短小 ...

  3. 关于大数据,需要你读懂的10个小故事

    自2011年以来,大数据旋风以"迅雷不及掩耳之势"席卷中国.毋庸置疑,大数据已然成为继云计算.物联网之后新一轮的技术变革热潮,不仅是信息领域,经济.政治.社会等诸多领域都" ...

  4. 大数据陷阱:需要读懂的10个小故事

    自2011年以来,大数据旋风以"迅雷不及掩耳之势"席卷中国.毋庸置疑,大数据已然成为继云计算.物联网之后新一轮的技术变革热潮,不仅是信息领域,经济.政治.社会等诸多领域都" ...

  5. 大数据的反思:不可不知的几个小故事

    随着各种技术发展,很多人都在吹捧大数据.然而如同股市一样,越是高涨,越是需要警醒,在大数据热火朝天前行的路上,多一点反思,多一份冷静,或许能让这路走的更好.更远.本文的10个小故事,或许能让你有所得. ...

  6. 管理小故事精髓 100例(转) 1

    1.黄金台招贤 如何将企业治理好,一直是管理者的一个"研究课题".有的研究有素,也就治理有方:有的研究无得,也就治理失败.要治理好企业,必须网罗人才,古代燕昭王黄金台招贤,便是最著 ...

  7. 用计算机编故事,计算机的小故事有哪些

    计算机是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.下面是学习啦小编为大家带来两个关于计算 ...

  8. 微型计算机的发展经历了哪几个,计算机的小故事有哪些_计算机发展史小故事...

    计算机是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能.是能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.下面是小编为大家带来两个关于计算机的小 ...

  9. 计算机科学小故事,三月份实习小故事计算机科学与技术学院

    三月份实习小故事计算机科学与技术学院 (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 7.9 积分 三月实习小故事指缝很宽,时间太瘦,悄悄从指缝间溜走 ...

最新文章

  1. 数字图像处理:(5)非微分算子在数字图像处理中的应用
  2. OpenCV(二十)模板匹配
  3. ASP.NET中EVAL用法大全
  4. 【云计算】5_云存储产品介绍
  5. cookie获取java_java中如何获取cookie
  6. Mathcad Prime 下载 安装 与 和谐教程
  7. PMP:4.项目整合管理
  8. python与C#的互相调用
  9. 工作250:uniapp--实战--flex布局--星级评分
  10. Pl/SQL Developer 配置
  11. k8s容器内的东西复制出来_容器 | Docker 如此之好,你为什么还要用k8s
  12. Linux网络协议指令:ifconfig/netstat(net-tools)工具 .vs. iproute2
  13. C++ 构造函数和析构函数
  14. 牛客网-Technology Tree
  15. Media Player Classic - HC 源代码分析 6:MediaInfo选项卡 (CPPageFileMediaInfo)
  16. mips的旁路_低功耗设计二之Bypassing(旁路)
  17. html+placeholder+兼容问题,placeholder属性做兼容性处理
  18. 大班科学电子计算机,计算器教案
  19. 电脑驱动器中出现Winretools和ESP问题
  20. 基于堡垒主机概念的运维审计系统

热门文章

  1. [Ahoi2013]差异[后缀数组+单调栈]
  2. python怎么打包压缩文件_Python打包文件夹的方法小结(zip,tar,tar.gz等)
  3. poj 2352 Stars 线段树(先建后查/边建边查)/树状数组三种方法思路详解,带你深入了解线段树难度⭐⭐⭐★
  4. 例题5-8 Unixls命令(Unix ls,UVa400)
  5. java idea 模块_java-项目之间共享模块的Intellij
  6. 1047.删除字符串中的所有相邻重复项
  7. oracle 收回 user,oracle 10.2.0.3对USER收回CONNECT及RESOURCE
  8. signature=0a26d8967069103efeee67346aac0529,Construction of Thinned Gated Single-Assignment Form
  9. celery 停止执行中 task
  10. Web 服务器 之 简易WWW服务器的架设