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

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

Amazon Keyspaces 中的读/写容量模式

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

  • 按需(默认)

  • 已预置

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

按需容量模式

Amazon Keyspaces(针对 Apache Cassandra)on-demand 容量模式是一种灵活的计费方式,可以每秒处理数千个请求而不需要进行容量规划。此选项为读取和写请求提供 pay-per-request 定价,您仅需为实际使用的资源付费。

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

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

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

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

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

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

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

借助按需容量模式表,您无需预先指定预期应用程序使用的读取和写入吞吐量。Amazon Keyspaces 按照读取请求单位 (RRU) 和写入请求单位 (WRU) 对您在表上执行的读取和写入请求单位 (WRU) 收费。

  • 一个 RRU 表示对大小最多LOCAL_QUORUM为 4 KB 的行执行一次 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 才能执行一个写入请求。

有关支持的一致性级别的信息,请参阅亚马逊 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(针对 Apache Cassandra)的配额

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

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

  • 使用按需容量模式新创建的表:之前的峰值为 2,000 个 WRU 和 6,000 个 RRU。您可以立即将以前的峰值翻倍。这样,新创建的按需表可提供高达 4,000 个 WRU 和 12,000 个 RRU。

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

预置吞吐能力模式

如果您选择预置的吞吐容量 模式,则指定您的应用程序需要的每秒读取和写入次数。这可以帮助您管理 Amazon Keyspaces 的使用情况,使其保持在或低于定义的请求速率,从而优化价格并保持可预测性。要详细了解预置吞吐量的自动扩展,请参阅使用 Application Auto Scaling 管理 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 来维持每秒一个写入请求。

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

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

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

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

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

例如,没有足够吞吐容量的读取请求会因Read_Timeout异常而失败,并被发布到ReadThrottleEvents指标中。吞吐容量不足的写入请求会因Write_Timeout异常而失败,并被发布到WriteThrottleEvents指标中。

您可以使用 Amazon CloudWatch 来监控您的预置和实际吞吐量指标以及容量不足事件。有关这些指标的更多信息,请参阅 Azon 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 小时在读/写容量模式之间切换一次。