使用 IOP 可能会损失一些准确性。Cassandra 有很多 iops 开销。在读取时,cassandra 可以从多个 sstable 读取。Cassandra 还执行消耗 iops 的后台压缩和修复。这不是 Amazon Keyspaces 中的因素。此外,Keyspaces 会根据利用率进行扩展和缩减。在某个时间点取平均值只会为您提供单一维度的成本。您需要取一个代表很长一段时间的平均值,以涵盖工作负载的高峰和低谷。工作负载往往看起来像正弦波或余弦波,而不是一条直线。
收集以下指标将有助于提供更准确的成本估算。
- 平均行大小报告的结果(下)
- 以 GB 为单位的表生存空间除以复制因子
- 长时间内的平均每秒写入次数
- 长时间内的平均每秒读取次数
存储大小
以 GB 为单位的表生存空间
此方法使用 Apache Cassandra 调整统计数据来确定 Amazon Keyspaces 中的数据大小。Apache Cassandra 通过 Java 管理扩展 (JMX) 公开存储指标。您可以使用第三方监控工具(例如 DataStax OpsCenter、Datadog 或 Grafana)来捕获这些指标。从 cassandra.live_disk_space_used 指标中捕获表活动空间。取 LiveTableSize 并将其除以数据的复制因子(很可能是 3),以估算 Keyspaces 存储大小。Keyspaces 自动在多个 AWS 可用区中复制数据 3 次,但定价基于单个副本的大小。
表生存空间为 5TB,复制因子为 3。对于 us-east-1,您将使用以下公式
(Table live space in GB / Replication Factor) * region storage price per gb
5000 / 3 * 0.3 = 500$ per month.
收集行大小
平均行大小报告的结果
使用以下脚本收集表的行大小指标。该脚本使用 cqlsh 从 Apache Cassandra 导出表数据,然后使用 awk 计算可配置的表数据样本集的行大小的最小值、最大值、平均值和标准差。使用您的集群和表信息更新用户名、密码、键空间名称和表名占位符。如果它们包含相似的数据,您可以使用开发和测试环境。
https://github.com/aws-samples/amazon-keyspaces-toolkit/blob/master/bin/row-size-sampler.sh
./row-size-sampler.sh YOURHOST 9042 -u "sampleuser" -p "samplepass"
输出将用于下面的请求单位计算。如果您的模型使用大 blob,则将平均大小除以 2,因为 cassandra 返回一个十六进制值字符表示。
读/写请求指标
平均每秒写入次数/每月总写入次数 平均每秒读取次数/每月总读取次数
捕获表的读取和写入请求率将有助于确定您的 Amazon Keyspaces 表的容量和扩展要求。Keyspaces 是无服务器的,您只需为使用的内容付费。Keyspaces 读/写吞吐量的价格取决于请求的数量和大小。
要从现有 Cassandra 集群中收集最准确的利用率指标,您将捕获协调器级别读取和写入操作的平均每秒请求数 (RPS)。对一个表取较长时间的平均值,以捕获工作负载的高峰和低谷。
两周内每秒平均写入请求 = 每秒 200 次写入 两周内每秒平均读取请求 = 每秒 100 次读取请求
LOCAL_QUORUM 读取
=READ REQUEST PER SEC * ROUNDUP(ROW SIZE Bytes / 4096) * RCU per hour price * HOURS PER DAY * DAYS PER MONTH
200 * (900 bytes / 4096) * 0.00015 * 24 * 30.41 = 27$ per month
LOCAL_ONE 读取
使用最终一致性读取可以为您节省一半的读取工作量成本。
=READ REQUEST PER SEC * ROUNDUP(ROW SIZE Bytes / 8192) * RCU per hour price * HOURS PER DAY * DAYS PER MONTH
200 * (900 bytes / 4096) * 0.00015 * 24 * 30.41 = 14$ per month
LOCAL_QUORUM 写入
=WRITE REQUEST PER SEC * ROUNDUP(ROW SIZE Bytes / 1024) * RCU per hour price * HOURS PER DAY * DAYS PER MONTH
100 * (900 bytes / 4096) * 0.00075 * 24 * 30.41 = 68$ per month
存储 每月 500 美元 最终一致读取 每月 14 美元 写入 68 美元 每月
总计:每月 592
为了进一步降低成本,我可能会在写入大型 blob 数据时使用客户端压缩,或者如果我有许多小行,我可能会使用集合来在单行中容纳更多数据。
查看定价页面以获取最新信息。