我是靠谱客的博主 忐忑篮球,最近开发中收集的这篇文章主要介绍整理CAP原则(CAP定理)-为什么CAP原则只能三选二?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CAP理论简介

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼,只能三选二

  • 一致性(C): 在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):保证每个请求不管成功或者失败都有相应。
  • 分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。

CAP实际场景介绍

C:一致性

对分布式系统所有节点进行写请求(对数据的增删改)完成后,不同节点的读请求在同一时刻读取到的数据要一致,读取到的都是写请求发生变化后的数据。

A:可用性

对分布式系统发起读请求或是写请求后,系统必须响应该请求返回结果。
必须满足如下2个条件:

  • 1.返回结果必须在合理的时间以内。这个合理的时间是根据业务来定的。
    当业务设计改请求在100毫秒内响应时,合理的时间就是100毫秒内;如果超过设定的100毫秒,如200毫秒才响应,那么这个系统就不满足可用性。
  • 2.需要系统内能正常接收请求的所有节点都可返回结果。这涵盖了2层含义:
    • 2.1如果部分节点不能正常接收请求了,比如宕机了、系统崩溃了,而其他节点依然能正常接收请求并相应,那么该系统依然是可用的,不影响可用性指标。
    • 2.2如果节点能正常接收请求,但是节点的数据有问题:各节点的数据并不一致,那么也须响应该请求,与数据是否一致无关。比如,系统内有2个正常节点A与B,节点A的数据是1小时前的,节点B的数据是1分钟之前的;如果一个读请求发送到节点A上,则在明知道节点A是1小时前的旧数据的前提下,仍然必须响应返回1小时前的旧数据,不能拒绝响应。

P:分区容忍性

  • 首先,什么是分区?
    分布式系统有很多节点,这些节点之间的通讯基于网络传输。而网络是不可靠的,是人为无法100%保证不出问题的。当网络出现问题时,节点之间通讯中断,此时系统出现了物理意义上的分区。注意:分区并完全都是由于网络问题引起,如机器故障也会导致节点通讯出现问题,系统出现分区现象。
    综上,可以知道在分布式系统中,只要节点通信出现了问题,那么就出现了分区。
  • 那么,分区容忍性指什么?
    它是说,如果出现了分区问题,我们的分布式系统还要继续运行,响应请求。不能因为出现了分区问题,整个分布式系统的所有节点全部停止,不响应请求。

为什么CAP原理在分布式系统中只能三选二,不可兼得?

在CAP原理简介中,已经说明了分布式系统只能设计成满足CAP三原理中的二种。
为什么?
经过CAP实际场景介绍,我们知道在一个分布式系统中,分区现象是无法100%完全避免的。如果不考虑分区容忍性,一旦系统发生分区现象,整个系统就无法使用了,这是不符合实际需要的。所以P在设计分布式系统时已经是默认的,必须考虑满足的一种特性!
在满足分区容忍性的前提下,为什么不能同时一致性和可用性呢?
为了满足数据一致性,则会导致当有写请求发生时,数据需要全部同步到所有节点,读请求必须等到所有节点数据都更新一致后,才能响应,响应之前所有读请求阻塞!响应超时或超出业务定义的响应时间,破坏可用性。
而为了提高可用性,则会在系统中部署多个节点,节点越多,系统可用性越高,为了各节点响应及时,数据一致性就越难满足
综上,分布式系统在保证分区容忍性时,如果保证可用性,则不能保证一致性;如果保证一致性,则不能保证可用性

最后

以上就是忐忑篮球为你收集整理的整理CAP原则(CAP定理)-为什么CAP原则只能三选二?的全部内容,希望文章能够帮你解决整理CAP原则(CAP定理)-为什么CAP原则只能三选二?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(463)

评论列表共有 0 条评论

立即
投稿
返回
顶部