分布式系统中的常见问题(数据不一致):

  1. 我们想象一个场景,主机向从机复制数据肯定是会有时间的延迟,当我们将数据写入主机后马上读取从机的数据若是数据还未完全复制过来,那么就出现数据不一致的问题了。(也就是需要从CAP定理着手了)

CAP理论

  • 对于分布式架构师来说,CAP理论就是一定要掌握的,这里你就可以什么CP,AP这些名词代表了什么

理论:

  • 在分布式系统中,在其中的读写操作中,我们想要操作的有三种特性(一致性(C)、可用性(A)、分区容错性(P))但是我们只能保证其中三者中的两个,另外一个是肯定会被牺牲的
  1. 一致性(C)Consistency :就是对应我们客户端来说每次从数据库得到的都是最新的数据,写的什么数据,我就需要读到什么数据。
  2. 可用性(A)Availablity :一个好的节点(服务器或者说数据库),在合理的时间返回正确的响应(不能是错误的响应的超时的响应,不然这个节点就不是一个好的节点了)
  3. 分区容错性(P)Parttion Tolerance :出现网络问题或者这个原因问题时,系统仍然能够正常工作运行

CAP特点:

  • 我们的系统会处理多种数据,这个时候我们就需要设计这种数据需要满足CP架构(一致+容错),还是AP架构(可用+容错)。CA 架构时不存在的(一致+可用),一致性和可用行是相互矛盾的。

这里我们解释一下:

想象一个场景当我们想要满足其中的一致性的时候,其中我们的从数据库在复制数据的时候那么我们肯定是不能返回数据的,当他复制完才返回这样才是满足其中的一致性。那么这里就出现了一个问题,在数据复制完成之前我们不能访问从库数据返回数据,那么其中就满足系统的可用性了。所以可用性和一致性是矛盾的

CP场景

场景:假若我们有两个节点(n1(主)和n2(从))其中我们需要满足一致性,n1的x数据发生更新为y,这个时候突然n1和n2直接通道断开,这时候n2的数据就无法从x更新为y了,那么为了一致性我们只能让n2节点返回错误的响应,因为我们想要保证一致性啊,只有一致才能返回正确的响应。也就是为了一致性(C),牺牲了其中的可用性(A),其中就是CP为了一致性牺牲可用性。

AP场景

场景:详细我们还是分节点,我们有两个节点(n1(主)和n2(从)),其中我们需要满足可用性就是一定要在合理时间返回数据返回什么我们不管,也是n1的x数据发生更新为y,这个时候突然n1和n2直接通道断开,这时候n2的数据就无法从x更新为y了,这时候操作就不一样了,虽然是错的数据为了满足可用性我们还是返回了数据x,数据一致与否我们不管,也即是AP,可用性和容错性牺牲了一致性(C)

强一致性无法完美的实现(C无法完美实现)

  • 因为在数据复制过程中一定是存在时间延迟的,所以我们一般都是要求最终一致性

最终一致性特点

  • 基本可用:准许牺牲一定的可用性,保证核心可用
  • 软状态:运行系统存在中间状态(也就是不一致)(例如:我们发朋友圈,朋友并不会立即看到我发的朋友圈,而是两三分钟后可能才能看见我发的朋友圈,其中朋友和我是存在两分钟的数据不一致的)
  • !!!其中最终一致性就是,系统在一定时间后能够达到一致性。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐