Cassandra - 架构

Cassandra 的设计目标是处理跨多个节点的大数据工作负载,而不会出现任何单点故障。Cassandra 在其节点之间具有对等分布式系统,数据分布在集群中的所有节点之间。

  • 集群中的所有节点都扮演相同的角色。每个节点都是独立的,同时又与其他节点互连。

  • 集群中的每个节点都可以接受读取和写入请求,无论数据实际位于集群中的哪个位置。

  • 当某个节点发生故障时,可以从网络中的其他节点提供读取/写入请求。

Cassandra 中的数据复制

在 Cassandra 中,集群中的一个或多个节点充当给定数据的副本。如果检测到某些节点响应了过期值,Cassandra 将向客户端返回最新值。返回最新值后,Cassandra 会在后台执行 读取修复 来更新过期值。

下图显示了 Cassandra 如何在集群中的节点之间使用数据复制来确保无单点故障的示意图。

数据复制

注意 − Cassandra 在后台使用 Gossip 协议 来允许节点相互通信并检测集群中任何故障节点。

Cassandra 的组件

Cassandra 的关键组件如下 −

  • 节点 −它是存储数据的地方。

  • 数据中心 − 它是相关节点的集合。

  • 集群 − 集群是包含一个或多个数据中心的组件。

  • 提交日志 − 提交日志是 Cassandra 中的崩溃恢复机制。每个写入操作都会写入提交日志。

  • 内存表 − 内存表是驻留在内存中的数据结构。提交日志后,数据将写入内存表。有时,对于单列系列,会有多个内存表。

  • SSTable −它是一个磁盘文件,当其内容达到阈值时,数据将从内存表中刷新到其中。

  • 布隆过滤器 − 这些只是用于测试元素是否是集合成员的快速、非确定性算法。它是一种特殊的缓存。每次查询后都会访问布隆过滤器。

Cassandra 查询语言

用户可以使用 Cassandra 查询语言 (CQL) 通过其节点访问 Cassandra。CQL 将数据库(Keyspace)视为表的容器。程序员使用cqlsh:提示来使用 CQL 或单独的应用程序语言驱动程序。

客户端可以访问任何节点进行读写操作。该节点(协调器)充当客户端和保存数据的节点之间的代理。

写入操作

节点的每个写入活动都由写入节点的提交日志捕获。稍后,数据将被捕获并存储在内存表中。每当内存表已满时,数据将被写入SStable数据文件。所有写入都会自动分区并在整个集群中复制。Cassandra 定期合并 SSTables,丢弃不必要的数据。

读取操作

在读取操作期间,Cassandra 从内存表获取值并检查布隆过滤器以找到保存所需数据的适当 SSTable。