CAP 理论

  • 什么是 CAP 理论?

CAP 是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容忍度)这三个单词的首字母组合。CAP 理论指出对于一个分布式系统来说,当设计读写操作时,只能同时满足 CP 或 AP 两种情况。

一致性(Consistency):所有节点都可以访问同一份最新的数据副本;

可用性(Availability):正常运行的节点可以在合理的时间内返回合理的响应;

分区容忍度(Partition Tolerance):分布式系统出现网络分区的时候,仍然能够对外提供服务。

  • 什么是网络分区?

分布式系统中,多个节点之间的网络本来是连通的,但是因为某些故障让一些节点挂掉了,导致这些节点之间不连通了,整个网络被分成了多个区域,这就叫做网络分区。

  • 为什么只能选择 CP 或 AP 架构,不能选择 CA 架构呢?

当没有发生网络分区现象时,系统就是处于正常状态,也就不存在 P 了,此时 C 和 A 就能够同时保证。

当发生网络分区现象时,系统如果想要继续服务,C 和 P 只能选一个。换言之,发生了网络分区后,P 是前提,然后才有 C 和 A 的选择。

因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。比如 ZooKeeper、HBase、七彩石(tx内部用于配置中心)都是 CP 架构,北极星(tx内部用于服务发现)是 AP 架构,Nacos 不仅支持 CP 架构也支持 AP 架构。

当然,可以举一个例子来说明为什么不可能选择 CA 架构:如果分布式系统出现网络分区,系统中的某个节点在进行写操作。为了保证 C,必须禁止其它节点的读写操作,这就和 A 发生冲突了。如果为了保证 A,其它节点的读写操作正常的话,那就和 C 发生冲突了。

总结下来:根据具体的业务场景来选择 CP 架构还是 AP 架构。对于需要强一致性的场景一般选择 CP 。

BASE 理论

  • 什么是 BASE理论?

BASE 是 Basically Available(基本可用)、Soft-state(软状态)和 Eventually Consistent(最终一致性)三个短语的缩写。

BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,是 CAP 理论的延伸。BASE 理论认为系统即使无法做到强一致性,但系统中每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

在前面介绍 CAP 理论时,提到了 AP 架构。AP 架构只是在系统发生分区的时候暂时放弃一致性,而不是永远放弃一致性。在分区故障恢复后,系统应该达到最终一致性。这一点就是 BASE 理论对 CAP 理论延伸的地方。

  • 基本可用 Basically Available

基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但是,这并不意味着系统完全不可用。那么允许损失部分可用性指的是什么呢?主要分两个方面:响应时间上的损失系统功能上的损失

响应时间上的损失:在请求量非常大的时候,允许请求响应延迟。(限流)

系统功能上的损失:在请求量非常大的时候,允许系统的非核心功能无法使用。(降级)

  • 软状态 Soft-state

软状态是指允许分布式系统中的数据存在一种不一致的中间状态,认为这种中间状态不会影响系统的整体可用性。换句话说,允许分布式系统中不同节点的数据副本之间进行数据同步的过程存在延迟。

  • 最终一致性 Eventually Consistent

最终一致性是指分布式系统中所有节点的数据,在经过一段时间的同步后,最终能够达到全部一致的状态。最终一致性只需要确保系统最终数据能够达到一致,不需要像强一致性那样实时保证系统数据的一致性。

当然,一般的业务系统采用的大都是最终一致性,但是一些对数据一致要求非常严格的场景,比如银行转账系统,就要保证强一致性。

  • 最终一致性实现的具体方式?

参考阅读:CAP & BASE理论详解 | JavaGuide

最终一致性实现的具体方式大致分成三种:读时修复写时修复异步修复

读时修复:在读取数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Read Repair 实现。具体来说,在向 Cassandra 系统查询数据的时候,如果检测到不同节点的副本数据不一致,系统就会自动修复数据。

写时修复:在写入数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Hinted Handoff 实现。具体来说,Cassandra 集群的节点之间远程写数据的时候,如果写失败就将数据缓存下来,然后定时重传,修复数据的不一致性。

异步修复:最常用的数据同步方式,通过定时对账检测副本数据的不一致,并修复。

Cassandra 是一个高可扩展的高性能的分布式 NoSQL 数据库。

参考阅读:

什么是Cassandra数据库 – DataStax – 博客园

什么是Cassandra? – 知乎

Categories:

Tags:

No responses yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注