金桔
金币
威望
贡献
回帖0
精华
在线时间 小时
|
现在企业招聘开发,基本都会要求有分布式系统的开发经验,许多面试题也是针对分布式环境下会出现的问题提出。想要在Java开发的道路走上去,熟悉分布式系统可以说是必须的。而CAP理论是业界进行分布式系统设计的一种重要思想,下面就让我们来看看吧。
什么是CAP
CAP是由美国计算机科学家Leslie Lamport在1974年提出的一种理论,他指出一个分布式系统不可能同时满足以下3点情况:
1.一致性(Consistency):
假如你有N份冗余备份的数据,那么同一时刻,无论你读取哪一份数据,都必须确保数据是相同的,我保证每一份数据都是最新的。
2.可用性(Availability):
你的系统必须每周007不间断地进行工作,随叫随到,做一个资本家听了都流泪的好员工。
3.分区容错性(Partition tolerance):
现实生活中,分布式系统经常是集群部署的,网络经常是不可靠的,可能发生丢包,网络故障,甚至某个机房被大水淹了。就算是再怎么糟糕的情况,也要确保系统是可用的,不会崩。
鱼与熊掌不可兼得
举个简单的例子: 我们去签租房合同,一式两份。你们签完第一份合同,要开始签第二份合同时,房东拉肚子(网络故障)跑出去了。摆在你面前有两种选择:
1.你坐在沙发上发呆(牺牲可用性),等待房东从茅厕回来,继续签完合同(分区容错性)。这样无论拿走那份合同,都是一模一样的数据。
2.你赶时间,谁便抓起一份合同就走(可用性),但是拿走的那份合同可能是还没签完的那份(牺牲一致性)
做人需取舍
CA without P
这个看起来就不像是分布式系统该做的选择,而是为单机系统准备的。网络延迟与数据丢失是不可避免的,我们必须要保证自己的系统不能挂掉
CP wihtout A
为了拿到的数据是最新的,在网络故障的情况下,陷入长时间等待,牺牲用户使用体验
AP without C
牺牲数据一致性,比如你正在抢12306火车票,明明页面上显示还有3张票。然后你一下单,提示你票没了。感觉在欺骗我感情。
没有最好的策略,高明的架构师需要根据业务场景去做取舍。 |
|