Amazon Keyspaces:如何使用 - Amazon Keyspaces(针对 Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Keyspaces:如何使用

Amazon Keyspaces 消除了 Cassandra 的管理开销。要了解为什么首先从 Cassandra 架构开始然后与 Amazon Keyspaces 进行比较是很有帮助的。

高级架构:阿帕奇卡桑德拉与亚马逊 Keyspaces

传统的 Apache Cassandra 部署在由一个或多个节点组成的集群中。您负责管理各个节点,并随着集群的扩展添加和删除节点。

客户端程序通过连接到其中一个节点并发出 Cassandra 查询语言 (CQL) 语句,来访问 Cassandra。CQL 类似于 SQL,后者是关系数据库中常用的语言。虽然 Cassandra 并不是关系数据库,不过 CQL 提供了一个熟悉的界面,可用于查询和操作 Cassandra 中的数据。

下图显示了一个由四个节点构成的简单 Apache Cassandra 集群。


               Apache Cassandra 集群的图表,该集群包含 4 个节点并与客户端应用程序交互。

生产 Cassandra 部署可能由数百个节点构成,这些节点在一个或多个物理数据中心内的数百台物理计算机上运行。这会给应用程序开发人员带来运营负担,这些人员除了安装、维护和操作软件之外,还需要预置、修补和管理服务器。

借助 Amazon Keyspaces(针对 Apache Cassandra),您无需预置、修补或管理服务器,因此可以专注于构建更好的应用程序。Amazon Keyspaces 为读取和写入提供了两种吞吐容量模式:按需和预置。您可以根据工作负载的可预测性和可变性选择表的吞吐容量模式,以优化读取和写入价格。

借助按需模式,您只需为您的应用程序实际执行的读取和写入付费。您无需事先指定表的吞吐容量。Amazon Keyspaces 几乎可以立即容纳应用程序上升或下降的流量,这使其成为流量不可预测的应用程序的理想选择。

如果您的应用程序流量可预测,并且可以提前预测表的容量需求,那么预置容量模式可以帮助您优化吞吐量的价格。使用预置容量模式时,请指定您的应用程序预计每秒需要执行的读取和写入次数。您可以通过启用自动扩展来自动增加和减少表的预置容量。

在以下情况下,您可以每天更改一次表的容量模式:您需要了解有关工作负载的流量模式的更多信息,或如果您预计流量会突增(例如,您预计会发生导致大量表流量的重大事件)。有关预置读取和写入容量的更多信息,请参阅Amazon Keyspaces 中的读/写容量模式

Amazon Keyspaces(针对 Apache Cassandra)将数据的三个副本存储在多个Availability Zones (可用区),可实现耐用性和高可用性。此外,您可以从专为满足大多数安全敏感型组织的要求而打造的数据中心和网络架构中受益。在您创建新的 Amazon Keyspaces 表时,将自动启用静态加密,并且所有客户端连接都需要传输层安全性 (TLS)。其他Amazon安全功能包括监控Amazon Identity and Access Management, 和Virtual Private Cloud (VPC) 终端节点。有关所有可用安全功能的概述,请参阅Amazon Keyspaces(针对 Apache Cassandra)中的安全性

下图演示了 Amazon Keyspaces 的架构。


               与客户端应用程序交互的 Amazon Keyspaces 示意图。

客户端程序通过连接到预先确定的终端节点(主机名和端口号)并发出 CQL 语句来访问 Amazon Keyspaces。有关可用终端节点的列表,请参阅亚马逊 Keyspaces 的服务终端节点

Cassandra 数据模型

如何为业务案例建模数据,对于 Amazon Keyspaces 实现最佳性能至关重要。较差的数据模型会显著地降低性能。

尽管 CQL 与 SQL 类似,但 Cassandra 后端与关系数据库后端存在明显的不同,必须采取不同的方法。下面是需要考虑的一些更重要的问题:

存储

可以在表中直观地显示您的 Cassandra 数据,其中每行表示一条记录,每列表示该记录中的一个字段。

表设计:首先查询

CQL 中没有 JOIN。因此,您应该根据数据的性质,以及需要如何访问数据来满足业务使用案例的要求,设计您的表。这可能会导致重复数据的逆规范化。您应该专门为特定的访问模式设计每个表。

分区

您的数据存储在磁盘分区中。存储数据的分区数以及数据在分区之间的分布方式由您的分区键 决定。分区键的定义方式会对查询的性能产生重大影响。

主键

在 Cassandra 中,数据以键/值对的形式存储。为此,每个 Cassandra 表必须有一个主键,这是表中每一行的键。主键是一个必需的分区键与多个可选的聚类列的组合。组成主键的数据在表中的所有记录之间必须是唯一的。

  • 分区键— 主键的分区键部分是必需的,可确定数据存储在集群的哪个分区中。分区键可以是单个列,也可以是由两列或多个列组成的复合值。如果单列分区键会导致单个分区,或者导致极少数分区具有大部分数据,从而承担大部分磁盘 I/O 操作,则应使用复合分区键。

  • 聚类列— 主键的可选聚类列部分决定如何在每个分区中聚类和排序数据。如果您在主键中包含聚类列,聚类列可以有一个或多个列。如果聚类列中有多个列,则排序顺序由各列在聚类列中从左到右的列出顺序决定。

从应用程序访问 Amazon Keyspaces

Amazon Keyspaces(针对 Apache Cassandra)实施 Apache Cassandra 查询语言 (CQL) API,因此您可以使用您已在使用的 CQL 和 Cassandra 驱动程序。要更新您的应用程序,只需更新您的 Cassandra 驱动程序或 cqlsh 配置以指向 Amazon Keyspaces 服务终端节点即可。

考虑以下 Python 程序,该程序连接到 Cassandra 集群并查询表。

from cassandra.cluster import Cluster #TLS/SSL configuration goes here ksp = 'MyKeyspace' tbl = 'WeatherData' cluster = Cluster(['NNN.NNN.NNN.NNN'], port=NNNN) session = cluster.connect(ksp) session.execute('USE ' + ksp) rows = session.execute('SELECT * FROM ' + tbl) for row in rows: print(row)

要对 Amazon Keyspaces 运行同一个程序,您需要:

  • 添加集群终端节点和端口: 例如,可以将主机替换为服务终端节点,例如cassandra.us-east-2.amazonaws.com和端口号为的:9142

  • 添加 TLS/SSL 配置:有关使用 Cassandra 客户端 Python 驱动程序添加 TLS/SSL 配置以连接到 Amazon Keyspaces 的更多信息,请参阅使用 Cassandra Python 客户端驱动程序通过编程方式访问