当前位置: 首页 > 科技观察

运维必看!这里是CAP分布最通俗易懂的解释

时间:2023-03-19 12:59:49 科技观察

CAP理论是分布式系统的一个基本理论,它描述了任何分布式系统最多只能满足以下三个特性中的两个:一致性可用性(Availability)分区容错性(Partitiontolerance)CAP理论听起来很抽象,本文试图用生活中的例子,用通俗易懂的语言来解释CAP理论的含义。1.记忆公司诞生一天晚上,就在你快要睡着的时候,你的妻子感谢你记住了她的生日,还送了她一份礼物。这时,你的脑海里闪过一个商业想法:人在生活中总是记不住东西,而我的记忆力却超群,何不成立一家可以充分利用我的记忆天赋来赚钱的公司呢。继续,然后您在当地报纸上刊登了MemoryInc.的广告:MemoryInc.—您永远不会忘记的事情仍然担心您是如何忘记的?福音就在这里,只需一个电话。当您需要记住一些东西时,请拨打400-888-8888,告诉我们您需要记住什么,下次您需要取回这件东西时,请再次致电,我们会告诉您您需要什么。费用:每次只需10元。以下是您与一位客户的电话交谈。顾客:嘿,请帮我记住我邻居的生日。你好。你邻居的生日是什么时候?客户:1月2日。你:(在笔记本上,翻到客户的页面,记录下他邻居的生日。)好的,记录下来了。下次您发现邻居的生日时,请再次致电。顾客:谢谢。你:不客气,这次收费10元。2、业务扩大了。随着时间的推移,内存公司的业务发展得越来越好,来电服务的客户也越来越多。虽然赚的钱越来越多,但是新的问题也出现了。客户来电要等的时间越来越长,而且你生病了,所有的客户都得不到服务,很烦人。于是,你想出了一个新方案:你和老婆同时接到客户的电话,客户仍然只需要记住一个公司的服务号码400-888-8888,路由器就会把电话分配给你和妻子正在打电话。3、服务出错。新计划实施两天后,您接到约翰的电话,他是老客户。John:嘿You:您好,欢迎致电记忆公司,请问有什么可以帮您?约翰:你能告诉我什么时候飞往新泽西的航班吗?当然是你。(然后你打开约翰的页面,发现没有约翰的航班记录)你:你好,是不是搞错了,我们这里没有你的航班信息。约翰:什么?!我昨天刚打电话询问我飞往新泽西的航班。错误在哪里?约翰撒谎了吗?您一直在思考导致错误的原因。难道是老婆接到电话了?你走到你妻子的办公桌前,发现她在笔记本上记录了约翰的航班,这时你才意识到是什么导致了问题。妻子接听了约翰的电话,但您的笔记本上没有约翰的记录。如果把上面的实现方案称为分布式设计,那么这个设计就存在一个很明显的问题——一致性问题。其中一个来电可能由一个人接听并记录,但下一个电话可能由另一个人接听。这样就会出现不一致,无法为客户提供准确的服务。4.解决一致性问题你晚上在床上翻来覆去,终于想出一个解决一致性问题的办法,你把新的方案告诉你老婆:每次我们接到一个录音电话(客户要求帮忙记住他们的东西),我们同时这样告诉对方,下次客户再次来电时,我们双方都会更新客户在账本上的记录,此时不需要通知对方,因为双方账本上都有这个客户记录这种方法只有一个问题,你是在告诉妻子,当有客户要记录时,我们不能并行工作。例如,如果您收到录音电话并将此信息告知我,我将无法再接听其他客户的电话。但是这个问题基本可以接受,因为客户的电话大部分都是询价。老公,你真聪明,老婆夸你,但是这个设计还有一个问题。如果我们中的一个人有一天无法工作怎么办?由于我们要求每次接到录音电话都需要同时更新两台笔记本,这样就无法为客户提供录音服务,无法满足可用性要求。例如,当我接到录音电话时,恰好你不在,我无法完成此客户服务。这是因为我不能要求您更新笔记本。5.更好的方法这时,你才意识到设计一个分布式系统是多么的困难。难道就没有同时满足一致性和可用性的设计吗?经过又一夜的思考,你想出了一个两全其美的方法,新方法与之前的方法非常相似。你告诉你老婆新的做法:当接到录音电话时(客户要求给他们录音),如果那天我们都上班,那么我们同时录音那个客户的录音,但如果对方不在工作那天,我们可以将记录通过电子邮件发送给那些不在工作的人。第二天,不在工作的人的第一件事就是接收所有电子邮件,并将所有客户要求记录在自己的笔记本上。录音完成后,开始第一次通话。真是个天才,老婆说,这个方法我查不出有什么问题,而且可以同时满足一致性和可用性的要求。6、老婆生气了。公司各项业务长期持续正常运转。即使您和您的妻子其中一人不上班,也可以正常提供服务。好景不长,新的问题又出现了。有一天,您的妻子因为一些微不足道的小事对您大发雷霆,以至于她接到了一位需要录音的客户打来的电话,但她没有告诉您。由于两本书中的记录都没有更新,您的设计完全被破坏了。你的设计是建立在两个人良好沟通的前提下的。如果通信失败,系统就会出现问题。也就是说,你的设计不符合分区容错(partitiontolerant)的要求。当然,你也可以在没有通信的情况下让服务继续。这样,当客户需要记录时,由于需要满足Consistency要求,客户的服务无法完成,即可用性无法满足。..7.结论让我们回到CAP理论。CAP理论告诉我们,在设计分布式系统时,不能同时满足一致性、可用性和分区容错性的要求。我们最多可以满足其中两个要求,形式化的证明可以参考CAP理论的证明。一致性:客户更新记录后,下次来电查询时,总能得到最新的记录。可用性:只要您和您的妻子在工作,内存公司就可以随时为客户提供服务。分区容忍度:即使你和你老婆沟通无法进行,内存公司仍然可以提供服务内存公司可以聘请一个抄写员,当你和你的妻子之一接到客户的电话录音时,抄写员会写记录在你背后的其他笔记本中。这样,另一个人的服务就不会被这个录音电话打断。许多NoSQL系统都使用这种方法。当一个节点更新数据时,其背后会有一个进程将数据同步到其他节点。这种设计的问题是一致性可能会在短时间内丢失。例如,客户打电话要求记录,妻子接听电话。紧接着,客户又来电询价,你接听询价电话。如果记录器还没有把客户的记录更新到你的账本上,客户此时无法正常查询。虽然有这种可能,但大家也不必太过担心,因为客户很少会在电话录音后立即拨打询价电话,所以书本内容出现不一致的概率很低。