0%

分布式系统中的CAP理论

前言

很多人都见过下面这张图, 鱼与熊掌不可兼得, 在分布式系统中也是一样.

一个分布式系统, 我们要关注的是它的可用性、一致性、分区容错性

  1. Consistency 一致性
  2. Availability 可用性
  3. Partition tolerance 分区容错

什么是CAP

我们假设一个分布式系统有3个终端, 数据库DB1DB2以及应用端App
分布式系统

假设服务端有数据a=1

  1. 如果AppDB1写入数据a=2, 然后从DB2读到数据a=2, DB1DB2的数据保持一致, 这叫做一致性C.
  2. 如果AppDB1读取数据a, DB1能够及时响应, 这叫做可用性A.
  3. DB1DB2存在于不同的网络分区, 比如一个在华东, 一个在华南, 他们两个能相互通信做主从复制, 这叫做P.

那么CAP能同时做到吗?

正常情况下是可以的, 我们说的只能三选二的情况一般都是网络故障的时候, 才会进行取舍.
还是以这张图为例
分布式系统
作为分布式系统, 必定要满足P, 那么当DB1DB2之间的网络发生故障, 此时就要对AC进行取舍.

  1. 保障A, App能正常读写DB1DB2, 但是一旦进行了写入操作, DB1DB2是不能进行通信做主从复制的, 换句话说, 就会导致数据不一致的情况.
  2. 保障C, 那么为了保证数据一致性, App就应该等待DB1DB2之间的网络恢复, 这样就不能访问数据库了, 舍弃了可用性.

那有人问, 能不能只保证AC?
可以啊, 我们把两个数据库都放在一台服务器上, 这样就不会因为网络故障导致AC二选一的问题了, 因为根本没有网络.
但是这还能叫做分布式吗?

参考资料

点击进入云乞讨模式!