Cassandra 架构和复制因子
Cassandra 被设计用于处理大数据。Cassandra 的主要特点是在没有单点故障的情况下将数据存储在多个节点上。
Cassandra 采用这种架构的原因是硬件故障可能随时发生。任何节点都可能宕机。在发生故障时,可以利用存储在其他节点上的数据。因此,Cassandra 是基于其分布式架构设计的。
Cassandra 以对等分布式架构的模式将数据存储在不同的节点上。
所有节点都使用Gossip 协议相互交换信息。Gossip 是 Cassandra 中节点可以相互通信的协议。
Cassandra 架构的组件
Cassandra 架构包含以下组件:

节点
节点是存储数据的地方。它是 Cassandra 的基本组件。
数据中心
一组节点称为数据中心。许多节点被归类为数据中心。
集群
集群是多个数据中心的集合。
提交日志
每次写入操作都会写入提交日志。提交日志用于崩溃恢复。
内存表
数据写入提交日志后,数据会写入内存表。数据暂时写入内存表。
SSTable
当内存表达到一定阈值时,数据会被刷新到 SSTable 磁盘文件。
Cassandra 中的数据复制
由于在数据处理过程中硬件问题或网络连接随时可能中断,因此需要一种解决方案来在问题发生时提供备份。因此,数据会被复制以确保没有单点故障。
Cassandra 根据这两个因素将数据的副本放置在不同的节点上。
- 下一个副本放置在哪里由复制策略决定。
- 而放置在不同节点上的副本总数由复制因子决定。
一个复制因子意味着只有一份数据副本,而三个复制因子意味着在三个不同的节点上有三个数据副本。
为确保没有单点故障,复制因子必须是三个。
Cassandra 中有两种复制策略。
Cassandra 中的 SimpleStrategy
SimpleStrategy 用于只有单个数据中心的情况。SimpleStrategy 将第一个副本放置在由分区器选择的节点上。之后,其余副本按顺时针方向放置在节点环中。
这是 SimpleStrategy 的图示表示。
Cassandra 中的 NetworkTopologyStrategy
NetworkTopologyStrategy 用于拥有两个以上数据中心的情况。在 NetworkTopologyStrategy 中,副本为每个数据中心单独设置。NetworkTopologyStrategy 按顺时针方向将副本放置在环中,直到到达另一个机架上的第一个节点。此策略尝试将副本放置在同一数据中心内的不同机架上。
这是因为机架有时可能会发生故障或出现问题。然后,其他节点上的副本可以提供数据。
这是网络拓扑策略的图示表示。
Cassandra 中的写入操作
协调器将写入请求发送到副本。如果所有副本都正常,它们将收到写入请求,而不管其一致性级别如何。
一致性级别决定有多少节点会响应成功确认。
如果数据成功写入提交日志和内存表,节点将响应成功确认。
例如,在一个复制因子等于三的单个数据中心中,三个副本将收到写入请求。如果一致性级别为一,则只有一个副本会响应成功确认,而其余两个将保持休眠状态。
假设由于节点宕机或其他问题,其余两个副本丢失了数据,Cassandra 将通过 Cassandra 内置的修复机制使行保持一致。
此处解释了 Cassandra 中的写入过程,
- 当写入请求到达节点时,首先将其记录在提交日志中。
- 然后 Cassandra 将数据写入内存表。每次写入请求写入内存表的数据也会单独写入提交日志。内存表是临时存储在内存中的数据,而提交日志记录事务记录以供备份。
- 当内存表已满时,数据会被刷新到 SSTable 数据文件。
Cassandra 中的读取操作
协调器发送三种读取请求到副本。
- 直接请求
- 摘要请求
- 读取修复请求
协调器将直接请求发送到其中一个副本。之后,协调器将摘要请求发送到由一致性级别指定的副本数量,并检查返回的数据是否是最新的。
之后,协调器将摘要请求发送到所有剩余的副本。如果任何节点给出过时的值,后台读取修复请求将更新该数据。这个过程称为读取修复机制。
摘要
- 本教程解释了 Cassandra 的内部架构,以及 Cassandra 在不同阶段如何复制、写入和读取数据。
- 此外,这里还解释了 Cassandra 在整个过程中如何维护一致性级别。
- Cassandra 架构组件:节点、数据中心、集群、提交日志、内存表、SSTable
- 一个复制因子意味着只有一份数据副本,而三个复制因子意味着在三个不同的节点上有三个数据副本。
- SimpleStrategy 用于只有单个数据中心的情况。
- NetworkTopologyStrategy 用于拥有两个以上数据中心的情况。