Cassandra 简明教程

Cassandra - Architecture

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

  1. 集群中的所有节点都扮演着相同的角色。每个节点都是独立的,同时与其他节点互联。

  2. 集群中的每个节点都可以接受读写请求,而不管数据实际位于集群的什么位置。

  3. 当某个节点关闭时,可以从网络中的其他节点处理读写请求。

Data Replication in Cassandra

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

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

data replication

Note - Cassandra 在后台使用 Gossip Protocol ,从而使各个节点能够相互通信并检测集群内的任何故障节点。

Components of Cassandra

Cassandra 的主要组件如下:

  1. Node - 数据存储在其中。

  2. Data center - 一系列相关的节点。

  3. Cluster - 集群是一个包含一个或多个数据中心(data center)的组件。

  4. Commit log - 提交日志是 Cassandra 中的故障恢复机制。每个写入操作都将写入提交日志。

  5. Mem-table - 内存表是驻留在内存中的数据结构。在提交日志之后,数据将被写入内存表。有时,对于一个单列族(column family),将有多个内存表。

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

  7. Bloom filter - 这只不过是快速、非确定性算法,用于测试元素是否是集合的成员。这是一种特殊的缓存。布隆过滤器在每次查询后被访问。

Cassandra Query Language

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

客户端通过任意节点进行读写操作。该节点(协调器)在客户端与保存数据的节点之间充当代理。

Write Operations

每个节点的写入活动都由写入节点中的 commit logs 记录。稍后,数据将被捕获并存储在 mem-table. 中。每当内存表已满时,数据都会被写入 SStable 数据文件。所有写入都自动进行分区并复制到整个集群。Cassandra 会定期合并 SSTable,丢弃不必要的数据。

Read Operations

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