分布式系统的起点——CAP定理

大家好,我是徒手敲代码。

写完设计模式之后,就断更了将近两个星期。

可能是一直下雨,湿气太重的原因,睡眠质量不太好,导致精神状态也比较低迷。(总要找个借口推脱一下)

接下来会更新分布式系统专题相关的文章,发表自己的一些见解,如果有错误的地方,欢迎各位指出。

所谓的分布式系统,就是多个节点分工合作,就算某一个节点挂了,也只会影响其中的一些服务,而不至于成个系统都崩溃。此外,在遇到性能瓶颈的时候,还可以比较容易的做出扩展,比如增加更多的节点,而不至于要重构整个系统。

就好像一家饭店,本来只有老板一个人,下单、炒菜、买单都是老板全部干完。这样在客人少的时候,确实问题不大,还节约成本。但是当人多了之后,老板的效率始终有限,可以招呼的客人也是有限的。而且如果老板突然病倒了,那么这家饭店将无法正常运作。

但是如果对饭店进行拓展,设定厨房部负责炒菜、营业部复杂下单,那么即使一两个员工病倒,也不会影响饭店的正常营业。客人多了之后,只需要再聘请多几个厨师,几个服务员,即可满足增加的需求。

对于一个分布式系统,有三个指标,分别是 Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性)。这三个指标是由加州大学的计算机科学家 Eric Brewer 提出来的。

而这三个指标,不能同时满足,只能满足其中的两个,这就是 CAP 定理的结论,也是分布式系统的起点。

分区容错性

首先来看分区容错性。它的意思是:数据在网络传输当中,可能会出现错误,即使出现了错误,系统仍然能够正常运行。比如:一台服务器在中国,另一台服务器在加拿大,这两台服务器之间,可能会无法通信。

一般来说,分区容错是无法避免的,系统在设计的时候,必须考虑到这种情况。所以 CAP 定理中的 P 是一定要满足的。

一致性

一致性分为两种情况:

  • 一个数据库,有多个节点,主节点更新了数据之后,从节点也要更新数据,保证主从的数据是一致的

  • 一个操作涉及到多个服务,比如A服务和B服务,如果A服务成功了,那么B服务也必须要成功,否则AB服务都要回滚

可用性

可用性意思就是,客户端每次发过来的请求,都要给出回应,也就是所谓的有求必应。

一致性和可用性的矛盾

实际上,一致性和可用性,是不能同时满足的。

假设现在有两台服务器,分别为 A 和 B。

如果满足了一致性,那么在写入了 A 之后,B马上要进行数据的同步,同步的过程,其他请求不能访问进来,而且要对B进行加锁,这个时候,就已经不满足可用性这个需求了。

如果满足了可用性,那么数据写入了A之后,B就不能马上加锁,进行数据的同步,在B同步数据完成之前,A和B的数据必然是不一致的,所以不可能满足一致性的需求。

计算机系统的设计,就像人生一样,不可能百分百的完美,需要根据实际的业务场景,对不同的结果作出取舍。

想要吃健康的家常便饭,就必须接受它的清淡;想要吃方便快捷的麦当劳,就要接受它的热气。

今天的分享到这里结束了。

关注公众号“徒手敲代码”,免费领取由腾讯大佬推荐的Java电子书!

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值