Amazon Keyspaces 中的容量管理疑难解答 - Amazon Keyspaces (for Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon Keyspaces 中的容量管理疑难解答

在使用无服务器容量时遇到问题? 以下解决方案。

无服务器容量错误

本节概述了如何识别与无服务器容量管理相关的错误以及如何解决这些错误。例如,当您的应用程序超过预配置的吞吐量容量时,您可能会观察到容量不足事件。

由于 Apache Cassandra 是基于集群的软件,专为在节点队列上运行而设计,因此它没有与无服务器功能(例如吞吐容量)相关的异常消息。大多数驱动程序只能理解 Apache Cassandra 中可用的错误代码,因此 Amazon Keyspaces 使用相同的错误代码集来保持兼容性。

要将 Cassandra 错误映射到底层容量事件,你可以使用 Amazon CloudWatch 监控相关的 Amazon Keyspaces 指标。根据导致客户端错误的容量不足事件可以根据导致该事件的资源分为以下三组:

  • 桌子— 如果你选择已配置表的容量模式,如果您的应用程序超出了预配置的吞吐量,则可能会出现容量不足错误。有关更多信息,请参阅Amazon Keyspaces 中的读/写容量模式

  • 分区— 如果给定分区的流量超过 3,000 个 RCU 或 1,000 WCU,则可能遇到容量不足事件。我们建议在分区之间均匀分配流量作为最佳实践。有关更多信息,请参阅在亚马逊 Keyspaces 中制定数据建模(适用于 Apache Cassandra)

  • 连接— 如果超过每个连接每秒最大操作数的配额,则可能会遇到吞吐量不足的问题。要提高吞吐量,可以在配置与驱动程序的连接时增加默认连接的数量。有关更多信息,请参阅 CQL 查询吞吐量调整负载均衡

要确定哪个资源导致容量不足事件并返回客户端错误,您可以在 Amazon Keyspaces 控制台中查看控制面板。默认情况下,控制台提供最常见容量和与流量相关的汇总视图 CloudWatch 中的指标容量和相关指标上这一部分容量表格的选项卡。

要使用亚马逊创建自己的控制面板 CloudWatch,请查看以下 Amazon Keyspaces 指标。

  • PerConnectionRequestRateExceeded— 向 Amazon Keyspaces 发出的超出每次连接请求速率配额的请求。与 Amazon Keyspaces 的每个客户端连接每秒最多可支持 3000 个 CQL 请求。通过创建多个连接,每秒可以执行超过 3000 个请求。

  • ReadThrottleEvents— 向 Amazon Keyspaces 发出的超出表读取容量的请求。

  • StoragePartitionThroughputCapacityExceeded— 对 Amazon Keyspaces 存储分区的请求超过该分区的吞吐容量。Amazon Keyspaces 存储分区每秒最多可支持 1000 个 WCU/WRU 和每秒 3000 个 RCU/RRU。为了缓解这些异常,我们建议您检查您的数据模型,以便在更多分区之间分配读/写流量。

  • WriteThrottleEvents— 向 Amazon Keyspaces 发出的超出表写入容量的请求。

了解相关更多信息 CloudWatch,使用亚马逊监控亚马逊Keyspaces CloudWatch。要解决此问题 CloudWatch Amazon Keyspaces 的指标,Amazon Keyspaces 指标与

注意

要开始使用显示 Amazon Keyspaces 所有常见指标的自定义控制面板,您可以使用预先构建的 CloudWatch 模板可用于 GitHub 在Amazon样本存储库的。

我收到NoHostAvailable我的客户端驱动程序出现容量不足错误

你看见了Read_Timeout要么Write_Timeout表格的例外。

在容量不足的情况下反复尝试对 Amazon Keyspaces 表进行写入或读取操作可能会导致驱动程序特有的客户端错误。

使用 CloudWatch 监控您的预配置吞吐量和实际吞吐量指标,以及表的容量不足事件。例如,吞吐量不足的读取请求会失败,并显示Read_Timeout异常并已发布到ReadThrottleEvents公制。吞吐量不足的写入请求失败,并显示为Write_Timeout异常并已发布到WriteThrottleEvents公制。有关这些指标的更多信息,请参阅 Amazon Keyspaces 指标与

要解决这些问题,请考虑以下选项之一。

如果您需要增加账户的默认容量配额,请参阅亚马逊密钥空间配额(适用于 Apache Cassandra)

您会看到与超出分区容量相关的错误。

当分区容量暂时超过时,可能会发生分区限制(这可能会由自适应容量或按需容量自动处理)。此错误也可能表明您的数据模型存在问题。Amazon Keyspaces 存储分区每秒最多可支持 1000 个 WCU/WRU 和每秒 3000 个 RCU/RRU。要详细了解如何改进数据模型以将读/写流量分配到更多分区,请参阅在亚马逊 Keyspaces 中制定数据建模(适用于 Apache Cassandra)

Write_Timeout同一个逻辑分区中包含静态和非静态数据的并发写入操作速率提高也可能导致异常。如果预计流量将运行多个并发写入操作,其中包含同一逻辑分区内的静态和非静态数据,我们建议分别写入静态和非静态数据。单独写入数据还有助于优化吞吐量成本。

您会看到与超出连接请求速率相关的错误。

连接限制可能由以下原因之一导致。

  • 您可能没有为每个会话配置足够的连接。

  • 由于您的 VPC 终端节点权限配置不正确,因此您获得的连接数可能少于可用对等项。有关 VPC 终端节点策略的更多信息将接口 VPC 终端节点与接口 VPC 终端节点结合使用来接口

  • 如果您使用的是 4.x 驱动程序,请检查是否启用了主机名验证。默认情况下,该驱动程序启用 TLS 主机名验证。此配置导致 Amazon Keyspaces 在驱动程序中显示为单节点集群。我们建议您关闭主机验证功能。

我们建议您遵循以下最佳实践,确保您的连接和吞吐量得到优化:

  • 配置 CQL 查询吞吐量调整。

    Amazon Keyspaces 每秒 TCP 连接最多支持 3,000 个 CQL 查询,但对驱动程序可以建立的连接数量没有限制。

    大多数开源 Cassandra 驱动程序都会建立与 Cassandra 的连接池,并通过该连接池对查询进行负载平衡。Amazon Keyspaces 向驱动程序公开 9 个对等 IP 地址。大多数驱动程序的默认行为是与每个对等 IP 地址建立单一连接。因此,使用默认设置的驱动程序的最大 CQL 查询吞吐量将为每秒 27,000 个 CQL 查询。

    要增加此数字,我们建议您增加驱动程序在其连接池中维护的每个 IP 地址的连接数。例如,将每个 IP 地址的最大连接数设置为 2 会使驱动程序的最大吞吐量增加一倍,达到每秒 54,000 个 CQL 查询。

  • 优化您的单节点连接。

    默认情况下,大多数开源 Cassandra 驱动程序会与其中公布的每个 IP 地址建立一个或多个连接system.peers建立会话时的表格。但是,某些配置可能会导致驱动程序连接到单个 Amazon Keyspaces IP 地址。如果驱动程序正在尝试对等节点进行 SSL 主机名验证,则可能会发生这种情况(例如 DataStax Java 驱动程序),或者当它通过 VPC 终端节点进行连接时。

    要获得与多个 IP 地址连接的驱动程序相同的可用性和性能,我们建议您执行以下操作:

    • 根据所需的客户端吞吐量,将每个 IP 的连接数增加到 9 或更高。

    • 创建自定义重试策略,确保在同一个节点上运行重试。

    • 如果您使用 VPC 终端节点,请向用于连接到 Amazon Keyspaces 的 IAM 实体授予访问权限,以查询您的 VPC 以获取终端节点和网络接口信息。这改善了负载平衡并增加了读/写吞吐量。有关更多信息,请参阅填充system.peers包含接口 VPC 终端节点信息的表条目

我在数据导入期间收到写入超时错误

使用上传数据时,您会收到超时错误cqlsh COPY命令。

Failed to import 1 rows: WriteTimeout - Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 2, 'write_type': 'SIMPLE', 'consistency': 'LOCAL_QUORUM'}, will retry later, attempt 1 of 100

Amazon KeyspacesReadTimeoutWriteTimeout异常,用于指示写入请求何时由于吞吐量不足而失败。为了帮助诊断容量不足异常,Amazon Keyspaces 在亚马逊上发布了以下指标 CloudWatch。

  • WriteThrottleEvents

  • ReadThrottledEvents

  • StoragePartitionThroughputCapacityExceeded

要解决数据加载期间容量不足的错误,请降低每个 worker 的写入速率或总摄取速率,然后重试上传行。有关更多信息,请参阅步骤 4:配置cqlsh COPY FROM设置:要获得更强大的数据上传选项,可以考虑使用 DSBulk,可从GitHub 知识库。对于 step-by-step说明,教程:使用 DSBulk 将数据加载到亚马逊Keyspaces

我看不到密钥空间或表格的实际存储大小

您无法看到密钥空间或表的实际存储大小。

您可以通过开始计算表中的行大小来估算存储大小。有关计算行大小的详细说明,请访问计算 Amazon Keyspaces 中的行大小