Cassandra 兼容数据库 - 使用 Amazon Keyspaces 实现无服务器分布式数据库
介绍使用 Amazon Keyspaces(for Apache Cassandra)和 DynamoDB 的分布式数据库设计与运维方法。
Apache Cassandra 与 Amazon Keyspaces 的定位
Apache Cassandra 是以高写入吞吐量、线性可扩展性和多区域复制为特征的大规模分布式 NoSQL 数据库。Netflix、Apple、Instagram 等大规模服务采用了该数据库,但本地运维需要高度专业知识。节点增删时的数据再平衡、压缩策略优化、墓碑管理、JVM 调优等运维任务涉及面广。Amazon Keyspaces 是 Apache Cassandra 兼容的全托管数据库服务,可直接使用 CQL(Cassandra Query Language)。现有 Cassandra 应用的驱动程序和工具几乎无需修改即可使用,在大幅降低运维负担的同时保持 Cassandra 的数据模型和查询模式。采用无服务器架构,创建表后即可立即读写数据,无需预先配置容量。
Amazon Keyspaces 的特性与架构
Amazon Keyspaces 以无服务器方式运行,表的吞吐量根据流量自动扩展。按需模式对读写请求按量计费,最大限度降低低流量时段的成本。预置模式可为可预测的工作负载提供高性价比的定价。存储自动扩展,数据跨 3 个可用区复制,提供 99.999% 的可用性 SLA。静态和传输中的加密默认启用,也可使用 AWS KMS 的客户托管密钥。Keyspaces 支持 CQL 3.x 的主要功能,表定义、数据类型、查询语法与 Cassandra 兼容。但轻量级事务(LWT)和计数器类型等部分功能有限制。通过 Point-in-Time Recovery(PITR),可将表恢复到过去 35 天内的任意时间点,便于从误操作或数据损坏中恢复。以下是在 Keyspaces 中创建表的 CQL 示例。 CREATE TABLE my_keyspace.orders ( customer_id text, order_id timeuuid, product_name text, quantity int, total_amount decimal, PRIMARY KEY (customer_id, order_id) ) WITH CLUSTERING ORDER BY (order_id DESC) AND CUSTOM_PROPERTIES = {'capacity_mode': {'throughput_mode': 'PAY_PER_REQUEST'}};
从 Cassandra 迁移到 Keyspaces 的策略
从现有 Cassandra 集群迁移到 Keyspaces 推荐采用分阶段方法。首先使用 cqlsh 或 DataStax 驱动程序验证与 Keyspaces 的连接,确认 schema 兼容性。数据迁移有两种方法:使用 AWS Glue 的批量迁移和双写(同时写入两个数据库)的渐进式迁移。使用 Glue 时,配置从 Cassandra 读取数据并写入 Keyspaces 的 ETL 作业。大规模数据集迁移时,在 Keyspaces 的预置模式下确保足够的写入容量,迁移完成后切换到按需模式较为高效。应用端的修改最小化,主要变更为连接端点的更改和 TLS 连接设置(Keyspaces 要求 TLS)。迁移时的性能测试中,预先验证 Keyspaces 的读取一致性(默认 LOCAL_QUORUM)和延迟特性非常重要。 从分布式数据库设计的基础到应用,可通过相关书籍(Amazon)系统学习。
Keyspaces 与 DynamoDB 的选择
在 AWS 上选择分布式数据库时,Keyspaces 和 DynamoDB 都是候选。Keyspaces 最适合作为现有 Cassandra 应用的迁移目标,可直接利用 CQL 知识和技能。可保持复合分区键和聚簇列的灵活数据建模、TTL(Time to Live)的数据自动过期、静态列的分区级共享数据等 Cassandra 特有的数据建模模式。另一方面,DynamoDB 作为 AWS 原生服务,提供与 Lambda、AppSync、API Gateway 等的无缝集成。DynamoDB Streams 的事件驱动架构、全局表的多区域复制、DAX(DynamoDB Accelerator)的微秒级缓存等,与 AWS 生态系统的集成是其优势。对于没有 Cassandra 经验的团队进行新开发推荐 DynamoDB,现有 Cassandra 工作负载的迁移推荐 Keyspaces。两个服务都支持 IAM 认证、VPC 端点和加密,满足企业级安全需求。
Keyspaces 的费用
按需模式读取每百万单位约 0.297 美元,写入每百万单位约 1.4846 美元。预置模式每 RCU 月约 0.000742 美元,每 WCU 月约 0.000371 美元。存储每 GB 月约 0.25 美元。与 DynamoDB 的定价体系基本相同,但可通过 CQL 访问,因此现有 Cassandra 工作负载的迁移成本较低是其优势。
总结 - Cassandra 兼容数据库的最佳选择
根据工作负载特性和现有资产,选择作为 Cassandra 迁移目标的 Keyspaces 或 AWS 原生的 DynamoDB,可构建最优的分布式数据库策略。需要 CQL 兼容时选择 Keyspaces,重视无服务器灵活性时选择 DynamoDB。