当前位置: 首页 > 教程 > Cassandra >

Cassandra的架构

精华
小牛编辑
191浏览
2023-03-14

Cassandra旨在处理多个节点之间的大数据工作负载,而无需担心单点故障。 它在其节点之间具有对等分布式系统,数据分布在集群中的所有节点上。

  • 在Cassandra中,每个节点是独立的,同时与其他节点互连。 集群中的所有节点都扮演着相同的角色。
  • 集群中的每个节点都可以接受读取和写入请求,而不管数据实际位于集群中的位置。
  • 在一个节点发生故障的情况下,可以从网络中的其他节点提供读/写请求。

Cassandra中的数据复制

在Cassandra中,集群中的节点作为给定数据片段的副本。 如果某些节点以超时值响应,Cassandra会将最新的值返回给客户端。 返回最新值后,Cassandra会在后台执行读取修复,以更新旧值。

请参阅以下图示,以了解Cassandra如何在集群中的节点之间使用数据复制的原理图,以确保没有单点故障。

Cassandra的组成部分

Cassandra的主要组成部分主要有:

  • 节点(Node):Cassandra节点是存储数据的地方。
  • 数据中心(Data center):数据中心是相关节点的集合。
  • 集群(Cluster):集群是包含一个或多个数据中心的组件。
  • 提交日志(Commit log):在Cassandra中,提交日志是一个崩溃恢复机制。 每个写入操作都将写入提交日志。
  • 存储表(Mem-table):内存表是内存驻留的数据结构。 提交日志后,数据将被写入内存表。 有时,对于单列系列,将有多个内容表。
  • SSTable:当内容达到阈值时,它是从内存表刷新数据的磁盘文件。
  • 布鲁姆过滤器(Bloom filter):这些只是快速,非确定性的,用于测试元素是否是集合成员的算法。 它是一种特殊的缓存。 每次查询后都会访问Bloom过滤器。

Cassandra查询语言

Cassandra查询语言(CQL)用于通过其节点访问Cassandra。 CQL将数据库(Keyspace)视为表的容器。 程序员使用cqlsh:提示使用CQL或单独的应用程序语言驱动程序。
客户端可以接近任何节点进行读写操作。 该节点(协调器)在客户机和保存数据的节点之间扮演代理。

写操作

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

读操作

在读操作中,Cassandra从mem-table中获取值,并检查bloom过滤器以找到包含所需数据的适当SSTable。

有三种类型的读请求被协调者发送给副本。

  • 直接请求
  • 摘要要求
  • 读修复请求

协调器发送的直接请求到副本中的一个。 之后,协调器将摘要请求发送到由一致性级别指定的副本数,并检查返回的数据是否是更新的数据。

之后,协调器将所有剩余的副本发送摘要请求。 如果任何节点发出过期值,后台读修复请求将更新该数据。 这个过程称为读修复机制。