Contents

Cassandra 架构的基本组件

1. 简介

在本教程中,我们将仔细研究 Cassandra 的架构。我们将了解分布式架构中的数据存储,并讨论基本架构组件。

2. Cassandra 概述

Apache Cassandra 是一个 NoSQL 分布式数据库管理系统。**Cassandra 的主要优势在于它可以跨商品服务器处理大量结构化数据。此外,它提供高可用性并且不提供单点故障。**Cassandra 通过使用环型架构来实现这一点,其中最小的逻辑单元是一个节点。它使用数据分区来优化查询。

每条数据都有一个分区键。每行的分区键都经过哈希处理。结果,我们将为每条数据获得一个唯一的令牌。对于每个节点,都有一个分配的令牌范围。因此,具有相同令牌的数据存储在同一节点上。节点的环架构 如下图所示:

/uploads/cassandra_cluster_datacenters_racks_nodes/1.jpg

3. Cassandra 组件

3.1. 节点

节点是 Cassandra 的基本基础架构组件。它是一台功能齐全的机器,通过高层内部网络与集群中的其他节点连接。

该网络的名称是Gossip Protocol。澄清一下,机器可以是物理服务器或EC2 实例,也可以是虚拟机。所有节点均采用环形网络拓扑结构。重要的是,每个节点都是独立的,并且在环中具有相同的角色。Cassandra以*peer-to-peer *结构排列节点。该节点包含实际数据。

集群中的每个节点都可以接受读写请求。因此,数据在集群中的实际位置并不重要。我们将始终获得最新版本的数据。

3.2. 虚拟节点

较新版本的 Cassandra 使用虚拟节点或简称vnodes 。虚拟节点是服务器内的数据存储层。

默认情况下,每台服务器有 256 个虚拟节点。正如我们在上一段中讨论的那样,每个节点都分配了一系列令牌。每个虚拟节点都使用它们所属节点的令牌子范围。

这些虚拟节点在系统中提供了更大的灵活性。因此,Cassandra 在我们需要时更容易将新节点添加到集群中。当我们的数据在节点之间存在令牌分布不均时,我们可以通过将虚拟节点扩展到负载更多的节点来轻松扩展存储容量。

3.4. 服务器

**当我们使用术语server时,我们指的是安装了 Cassandra 软件的机器。**每个节点都有一个 Cassandra 实例,从技术上讲,它是一个服务器。正如我们之前所说,Cassandra 的每个实例已经发展到包含 256 个虚拟节点。Cassandra 服务器运行核心进程。例如,在节点周围传播副本或路由请求等过程。

3.5. 机架

Cassandra 机架是环内节点的逻辑分组。换句话说,机架是服务器的集合。数据库使用机架,以便它可以确保副本分布在不同的逻辑分组中。因此,它不仅可以向一个节点发送操作。多个节点,每个都在一个单独的机架上,可以提供更高的容错性和可用性。

3.6. 数据中心

**数据中心是一组逻辑机架。**数据中心应至少包含一个机架。我们可以说 Cassandra 数据中心是一组相关的节点,并在集群中配置用于复制目的。因此,它有助于减少延迟,防止事务受到其他工作负载和相关影响的影响。此外,还可以设置复制因子以写入多个数据中心。因此,Cassandra 可以在架构设计和组织方面提供额外的灵活性。

3.7. 簇

**集群是包含一个或多个数据中心的组件。**它是数据库中最外层的存储容器。一个数据库包含一个或多个集群。Cassandra 集群中元素的层次结构是:

/uploads/cassandra_cluster_datacenters_racks_nodes/3.png

首先,我们有由数据中心组成的集群。在数据中心内部,我们的节点默认包含 256 个虚拟节点。

4. 数据复制

现在,当我们了解 Cassandra 的基本组件时。让我们谈谈 Cassandra 如何围绕其结构管理数据。某些系统不允许数据丢失或数据传输中断。解决方案是在问题发生时提供备份。例如,它可能是硬件问题,或者在数据处理过程中的任何时候链路都可能断开。Cassandra 将数据副本存储在多个节点上,以确保可靠性和容错性。

4.1. 复制因子

我们可以通过复制因子和复制策略来确定副本的数量及其位置。复制因子是整个集群的副本总数。当我们将此因子设置为 1 时,这意味着集群中每行仅存在一个副本,依此类推。我们可以在数据中心级别和机架级别设置此因素。

4.2. 复制策略

复制策略控制如何选择副本。副本的重要性是一样的。Cassandra 有两种策略来确定哪些节点包含复制数据。第一个称为SimpleStrategy,它不知道数据中心和机架的节点的逻辑划分。第二个是NetworkTopologyStrategy更复杂,既可以感知机架,也可以感知数据中心。我们可以使用NetworkTopologyStrategy定义将多少副本放置在不同的数据中心。此外,它试图避免两个副本放置在同一个机架上的情况。