Amazon Keyspaces 中的读/写容量模式 - Amazon Keyspaces(Apache Cassandra 兼容)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon Keyspaces 中的读/写容量模式

Amazon Keyspaces 具有两个读/写容量模式来处理表的读写:

  • 按需(默认)

  • 已预置

您选择的读/写容量模式控制对读写吞吐量收费的方式以及管理表吞吐容量的方式。

按需容量模式

Amazon Keyspaces(Apache Cassandra 兼容)按需容量模式是一个灵活的计费选项,可以每秒处理数千个请求而不需要进行容量规划。此选项为读取和写入请求提供 pay-per-request 定价,因此您只需为实际用量付费。

选择按需模式时,Amazon Keyspaces 可以将表的吞吐容量立即扩展到以前达到的任何流量级别,然后在应用程序流量减少时调整回来。如果工作负载的流量级别达到新的峰值,则该服务会迅速调整以便为您的表增加吞吐容量。您可以为新表和现有表启用按需容量模式。

如果满足以下任意条件,则按需模式是很好的选项:

  • 您创建工作负载未知的新表。

  • 您具有不可预测的应用程序流量。

  • 您更喜欢只为您使用的容量付费。

要开始使用按需模式,您可以使用控制台或使用几行 Cassandra 查询语言 (CQL) 代码创建新表或更新现有表以使用按需容量模式。有关更多信息,请参阅

读取请求单位和写入请求单位

使用按需容量模式表,您无需预先指定您希望应用程序使用多少读取和写入吞吐量。Amazon Keyspaces 会根据读取请求单位 (RRU) 和写入请求单位 (WRU) 向您对表执行的读取和写入操作收费。

  • 对于大小不超过 4 KB 的行,一个 RRU 代表一个 LOCAL_QUORUM 读取请求,或两个 LOCAL_ONE 读取请求。如果您需要读取大于 4 KB 的行,则读取操作将使用额外的 RRU。所需的 RRU 总数取决于行大小,以及要使用 LOCAL_QUORUM 还是 LOCAL_ONE 读取一致性。例如,使用 LOCAL_QUORUM 读取一致性读取一个 8 KB 行需要 2 个 RRU,如果选择 LOCAL_ONE 读取一致性,则需要 1 RRU。

  • 一个 WRU 代表对大小不超过 1 KB 的行的一次写入。所有写入操作都使用 LOCAL_QUORUM 一致性,使用轻量级事务 (LWT) 不收取额外费用。如果您需要写入大于 1 KB 的行,则写入操作将使用额外的 WRU。所需 WRU 的总数取决于行大小。例如,如果行大小为 2 KB,则需要 2 个 WRU 才能执行一个写入请求。

有关支持的一致性级别的信息,请参阅Amazon Keyspaces 中支持的 Apache Cassandra 一致性级别

峰值流量和扩缩属性

使用按需容量模式的 Amazon Keyspaces 表会自动适应应用程序的流量。按需容量模式会即时在表中承受之前双倍的峰值流量。例如,您的应用程序流量模式可能在每秒 5,000 到 10,000 次 LOCAL_QUORUM 读取之间变化,其中每秒 10,000 次读取是以前的流量峰值。

使用这种模式,按需容量模式可即时容纳最高每秒 20,000 次读取的持续流量。如果应用程序承受每秒 20,000 次读取的流量,则该峰值将成为新的之前峰值,从而使后续流量高达每秒 40,000 次读取。

如果您在一个表上需要的流量是前一个峰值的两倍以上,则随着流量的增加,Amazon Keyspaces 会自动分配更多容量。这有助于确保您的表具有足够的吞吐容量来处理额外的请求。但是,如果您在 30 分钟内超过前一个峰值的两倍,则可能会出现吞吐容量不足错误。

例如,假设您的应用程序流量模式在每秒 5,000 到 10,000 个强一致性读取之间变化,而上一次达到的流量峰值为每秒 20,000 次读取。在这种情况下,服务建议您在将流量推动到每秒 40,000 次读取之前,至少将流量增长的时间间隔 30 分钟。

要了解如何估算表的读取和写入容量消耗,请参阅如何估计 Amazon Keyspaces 的容量消耗

要了解有关账户的默认配额以及如何增加此配额的更多信息,请参阅 Amazon Keyspaces(Apache Cassandra 兼容)限额

按需容量模式的最初吞吐量

如果您在启用按需容量模式的情况下创建了新表,或者首次将现有表切换为按需容量模式,则该表将具有以下之前峰值设置,即使该表之前尚未使用按需容量模式提供流量也是如此。

  • 在按需容量模式下新创建的表:先前峰值为 2000 个 WRU 和 6000 个 RRU。您可以立即将以前的峰值翻倍。这样,新创建的按需表可以提供最高 4000 个 WRU 和 12000 个RRU。

  • 现有表切换为按需容量模式:先前峰值是为该表先前预置的 WCU 和 RCU 的一半,或者是按需容量模式的新建表的设置,以较高者为准。

预置的吞吐容量模式

如果您选择预置的吞吐容量 模式,则指定您的应用程序需要的每秒读取和写入次数。这有助于您管理 Amazon Keyspaces 使用量,使其保持在或低于定义的请求速率以优化价格并保持可预测性。要详细了解预置吞吐量的自动扩展,请参阅使用 Amazon Keyspaces 自动扩展功能自动管理吞吐容量

如果满足以下任意条件,则预置的吞吐容量模式是很好的选项:

  • 您具有可预测的应用程序流量。

  • 您​运行流量比较稳定或逐渐增加的应用程序。

  • 您可以预测容量要求以优化价格。​

读取容量单位和写入容量单位

对于预置的吞吐容量模式表,您可以按读取容量单位 (RCU) 和写入容量单位 (WCU) 指定吞吐容量:

  • 对于大小不超过 4 KB 的行,一个 RCU 表示每秒一个 LOCAL_QUORUM 读取操作或每秒两个 LOCAL_ONE 读取操作。如果您需要读取大于 4 KB 的行,则读取操作将使用额外的 RCU。

    所需的 RCU 总数取决于行大小,以及要使用 LOCAL_QUORUM 还是 LOCAL_ONE 读取。例如,如果您的行大小为 8 KB,则需要 2 个 RCU 来维持每秒一个 LOCAL_QUORUM 读取;如果选择 LOCAL_ONE 读取,则需要 1 个 RCU。

  • 一个 WCU 表示每秒对大小不超过 1 KB 的行执行一次写入操作。所有写入操作都使用 LOCAL_QUORUM 一致性,使用轻量级事务 (LWT) 不收取额外费用。如果您需要写入大于 1 KB 的行,则写入操作将使用额外的 WCU。

    所需 WCU 的总数取决于行大小。例如,如果您的行大小为 2 KB,则您需要 2 个 WCU 来维持每秒一个写入请求。有关如何估算表的读取和写入容量消耗的更多信息,请参阅如何估计 Amazon Keyspaces 的容量消耗

如果您的应用程序读取或写入较大的行(最大为 1 MB 的 Amazon Keyspaces 行大小上限),它将消耗更多的容量单位。要了解有关如何估算行大小的更多信息,请参阅 计算 Amazon Keyspaces 中的行大小。例如,假设您创建了具有 6 个 RCU 和 6 个 WCU 的预置表。使用这些设置,您的应用程序可以执行以下操作:

  • 每秒执行高达 24 KB 的 LOCAL_QUORUM 读取(4 KB × 6 个 RCU)。

  • 执行最高每秒 48 KB 的 LOCAL_ONE 读取(读取吞吐量的两倍)。

  • 每秒写入高达 6 KB(1 KB × 6 个 WCU)。

预置的吞吐量 是应用程序可以从表消耗的最大吞吐容量。如果您的应用程序超出了预置的吞吐容量,则可能会发现容量不足错误。

例如,读取请求如果没有足够的吞吐容量,就会出现 Read_Timeout 异常,并发布到 ReadThrottleEvents 指标。写入请求如果没有足够的吞吐容量,就会出现 Write_Timeout 异常,并发布到 WriteThrottleEvents 指标。

您可以使用 Amazon CloudWatch 监控您的预配置吞吐量和实际吞吐量指标以及容量不足事件。有关这些指标的更多信息,请参阅 Amazon Keyspaces 指标与维度

注意

由于容量不足而反复出现错误可能会导致客户端驱动程序特定的异常,例如, DataStax Java 驱动程序因出现故障。NoHostAvailableException

要更改表的吞吐容量设置,您可以使用 Amazon Web Services Management Console 或使用 CQL 的 ALTER TABLE 语句,有关更多信息,请参阅 ALTER TABLE

要了解有关账户的默认配额以及如何增加此配额的更多信息,请参阅 Amazon Keyspaces(Apache Cassandra 兼容)限额

管理和查看容量模式

您可以在 Amazon Keyspaces 系统键空间中查询系统表,以查看有关表的容量模式信息。您还可以查看表使用的是按需吞吐容量模式还是预置吞吐容量模式。如果表配置为预置吞吐量模式,您会看到为表预置的吞吐容量。

示例

SELECT * from system_schema_mcs.tables where keyspace_name = 'mykeyspace' and table_name = 'mytable';

使用按需容量模式配置的表返回以下内容。

{ 'capacity_mode': { 'last_update_to_pay_per_request_timestamp': '1579551547603', 'throughput_mode': 'PAY_PER_REQUEST' } }

使用预置吞吐容量模式配置的表将返回以下内容。

{ 'capacity_mode': { 'last_update_to_pay_per_request_timestamp': '1579048006000', 'read_capacity_units': '5000', 'throughput_mode': 'PROVISIONED', 'write_capacity_units': '6000' } }

last_update_to_pay_per_request_timestamp 值以毫秒为单位。

要更改表的预置吞吐容量,请使用 ALTER TABLE

更改容量模式时的注意事项

当您将表从预置的容量模式切换到按需容量模式时,Amazon Keyspaces 会对表和分区的结构进行若干更改。此过程可能耗时数分钟。在切换期间,您的表将提供与先前预置的 WCU 和 RCU 数量相一致的吞吐量。

当您从按需容量模式切换回预置的容量模式时,表将提供与表设置为按需容量模式时达到的先前峰值一致的吞吐量。

注意

每 24 个小时的周期内,您可以在读/写容量模式之间切换两次。