保证
Apache Cassandra 是一个高度可扩展且可靠的数据库。Cassandra 用于为大量客户端提供服务的基于 Web 的应用程序,并且处理的数据量是 Web 规模(PB 级)的。Cassandra 对其可扩展性、可用性和可靠性做出了一些保证。为了充分了解存储系统在预期一定程度的网络分区故障的环境中的固有局限性,并在设计系统时考虑到这些局限性,首先简要介绍 CAP 定理非常重要。
什么是 CAP?
根据 CAP 定理,分布式数据存储不可能同时提供以下保证中的两个以上。
-
一致性:一致性意味着每次读取都接收最新的写入或出错。
-
可用性:可用性意味着每个请求都收到响应。不保证响应包含最新的写入或数据。
-
分区容忍性:分区容忍性是指存储系统对网络分区故障的容忍能力。即使某些消息被丢弃或延迟,系统也能继续运行。
CAP 定理意味着,当使用网络分区时,由于存在固有的分区故障风险,必须在一致性和可用性之间做出选择,而两者不能同时得到保证。CAP 定理如图 1 所示。
高可用性是基于 Web 的应用程序中的优先事项,为了实现这一目标,Cassandra 从 CAP 保证中选择了可用性和分区容忍性,在一定程度上牺牲了数据一致性。
Cassandra 做出以下保证。
-
高可扩展性
-
高可用性
-
持久性
-
对单个表的写入的最终一致性
-
具有线性化一致性的轻量级事务
-
跨多个表的批量写入保证完全成功或完全失败
-
辅助索引保证与其本地副本的数据一致
持久性
Cassandra 通过使用副本保证数据持久性。副本是存储在集群中不同节点上的数据的多个副本。在多数据中心环境中,副本可以存储在不同的数据中心。如果由于不可恢复的节点/数据中心故障而丢失了一个副本,数据不会完全丢失,因为副本仍然可用。
最终一致性
为了满足生产环境中性能、可靠性、可扩展性和高可用性的要求,Cassandra 是一个最终一致的存储系统。最终一致性意味着所有更新最终都会到达所有副本。同一数据的不同版本可能暂时存在,但最终会协调到一致的状态。最终一致性是实现高可用性的权衡,它涉及一些读写延迟。
具有线性化一致性的轻量级事务
数据必须按顺序读取和写入。Paxos 共识协议用于实现轻量级事务。Paxos 协议实现轻量级事务,这些事务能够使用线性化一致性处理并发操作。线性化一致性是具有实时约束的顺序一致性,它通过比较和设置 (CAS) 事务确保事务隔离。使用 CAS 副本数据进行比较,发现过时的数据被设置为最一致的值。具有线性化一致性的读取允许读取数据的当前状态,该状态可能尚未提交,而无需进行新的添加或更新。