前言

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

分布式基础之CAP

  • C表示一致性(Consistency),分布式中所有节点访问数据时,要求数据始终都是最新的。

  • A表示可用性(Availability),分布式中任意节点出现故障时,要求系统可正常使用。

  • P表示分区容忍性(Partition tolerance),分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。(分区状态可以理解为部分机器不连通了,比如机器挂了,繁忙失去响应,单机房故障等)

一致性(Consistency)

数据一致性,及系统只读到最新写入的数据,如:单点串行化的方式,就能达到一致性效果。

单机架构保持一致性

分布式基础之CAP

分布式架构数据同步失败,无法保持数据一致性

分布式基础之CAP

举个栗子:你去租房的时候都会去找地产中介(某链),你找到了A小区的门店发现没有需要的房源,然后去B小区的门店发现有个房源很适合你,这就可以理解为两个门店信息不一致,及不满足一致性要求,但实际上你会遇到这种情况,你去A小区门店询问的时候,有你需要的房源,然后他们会去B小区的门店拿钥匙,这是因为房东把房源交给了B小区门店,然后A小区的门店同样同步的B门店的房源,这样就满足一致性的要求。

可用性(Availability)

如果每运行100个时间单位,有1个时间单位不可用,则说系统的可用性是99%。

分布式基础之CAP

如上图服务A可能由于网络原因导致不可用,但是B、C还是可以继续服务的,但是在反向代理那个位置发生了故障那系统都不可用了,它不是高可用的。

举个栗子:还是以租房为例,你去租房的时候发现A小区的门店今天关门了,然后直接去了B小区的门店发现他们正常工作的,这就满足了可用性的要求,如果去B小区或其他门店都没有正常工作,那这家地产商可能倒闭了,没法对客户提供可用性的服务了。

分区容忍性(Partition tolerance)

分布式系统,大多都是很大个节点,第个节点节点之前都不是完全独立的,需要相互通信,当发生节点无法连通时,系统如何进行容错处理,是需要考虑的。

举个栗子:C小区新增加了一个门店,装修啥的都弄好了,就是没拉网线,没有连通性,等于就是个孤立的门店,店员只能大眼瞪小眼,没得事做。那你去A门店找房源,那里的人可能都不知道有C小区这个门店,所以A直接带你去了C小区看房子了。

总结

一致性,可用性,分区容忍性三者只能取其二,常见的最佳工程架构实践是什么呢?最常见的实践是这样的:

  • 连通性异常的处理必须保证,满足P

  • 一致性C与可用性A一般二选一

  • 选择一致性C,举例:传统单库水平切分,就是这类选型的典型

  • 选择可用性A,举例:双主库同步高可用,就是这类选型的典型

相关文章:

  • 2021-08-15
  • 2021-12-29
  • 2021-12-26
  • 2021-09-19
  • 2021-05-29
猜你喜欢
  • 2021-07-07
  • 2022-01-18
  • 2022-02-23
  • 2021-11-03
  • 2021-04-21
  • 2021-05-02
相关资源
相似解决方案