Cassandra - 架构


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

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

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

  • 当节点出现故障时,可以从网络中的其他节点提供读/写请求。

Cassandra 中的数据复制

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

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

数据复制

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

Cassandra的组件

Cassandra 的关键组件如下 -

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

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

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

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

  • Mem-table - mem-table 是内存驻留数据结构。提交日志后,数据将写入mem-table。有时,对于单列族,会有多个内存表。

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

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

Cassandra 查询语言

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

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

写操作

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

读操作

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