部署 Cassandra
分布式 NoSQL DB,高写吞吐、多区域和线性扩展。
平台高级
为什么
Cassandra 为商品硬件高写吞吐设计,无单点故障。一致哈希分布数据,可调一致性。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
时间序列、IoT 和写密集多区域工作负载用 Cassandra。即席查询(CQL 有限)避免。
如何做
1. Docker — cassandra:4 镜像
2. 集群 — 3+ 节点,同 seed 节点
3. Keyspace — 复制因子和策略
4. 表 — CQL CREATE TABLE 配分区键
5. 复制 — NetworkTopologyStrategy 多 DC
6. 压实 — SizeTiered 或 Leveled 压实策略
7. CQL — cqlsh 或驱动查询
示例
# docker-compose.yml — 3 节点集群
services:
cass1: { image: cassandra:4, environment: { CASSANDRA_SEEDS: "cass1" } }
cass2: { image: cassandra:4, environment: { CASSANDRA_SEEDS: "cass1" } }
cass3: { image: cassandra:4, environment: { CASSANDRA_SEEDS: "cass1" } }
# 创建 keyspace 和表
cqlsh cass1 9042 -e "
CREATE KEYSPACE myapp WITH replication = {'class':'SimpleStrategy','replication_factor':3};
CREATE TABLE myapp.events (id uuid, ts timestamp, data text, PRIMARY KEY (id, ts));
"
# 插入和查询
cqlsh cass1 9042 -e "INSERT INTO myapp.events (id, ts, data) VALUES (now(), toTimestamp(now()), 'hello'));"
cqlsh cass1 9042 -e "SELECT * FROM myapp.events;"
常见问题
- ⚠单节点无 HA — 仅开发,生产需 3+ 节点
- ⚠分区键差 — 热点,选均匀分布的键
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓3+ 节点复制因子 3 — 容忍 1 节点故障
- ✓schema 为查询设计 — Cassandra 查询优先,无即席 join
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求