Apache Cassandra
线性可扩展的宽列 NoSQL — 永不宕机的数据库。
Apache Cassandra 是一个分布式宽列 NoSQL 数据库,专为高写入吞吐量、线性水平可扩展性和无单点故障而设计。Netflix、Apple、Discord、Instagram、eBay 使用 — 任何"数据库绝不能宕机"是硬性要求的地方。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 Cassandra。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 Apache Cassandra?
Cassandra 是一个分布式宽列 NoSQL 数据库,最初由 Facebook 开发(2008 年) 并通过 Apache 基金会开源。其设计将写入吞吐量和可用性优先于一致性 — 每个 节点平等,没有故障切换仪式,集群在节点故障和网络分区期间继续接受写入。
Netflix、Apple、Discord(每天 40 亿条消息)、Instagram、eBay、Uber 以及 许多电信运营商都在极端规模上运行 Cassandra 集群。其数据模型(分区键 + 聚类键)迫使你预先思考查询模式,但以可预测的水平扩展和大规模下无运维 戏剧奖励你。
Pier 如何部署它
Pier 使用官方 cassandra Docker 镜像,将 /var/lib/cassandra 挂载为数据
卷。默认版本为 latest(Cassandra 5.x);5.0、4.1 LTS 和 4.0 LTS 也可用。
集群模式支持 2-5 节点。对于生产,你通常希望在 2+ 数据中心中拥有 6+ 节点 — 将 Pier 的集群模板用作起点并手动扩展。
备份捕获 nodetool snapshot tarball 并可上传到任何 S3 兼容存储。
何时不要使用 Cassandra
对于具有强一致性的 OLTP — Postgres。对于临时分析查询 — ClickHouse。对于 具有丰富查询的文档存储 — MongoDB。对于亚毫秒每节点延迟 — ScyllaDB。当 分区键访问模式 + 写入吞吐量 + 可用性 + 多 DC 是硬性要求时,Cassandra 胜出。
核心功能
无主架构
每个节点平等 — 无主节点,无故障切换仪式。从任何节点读取和写入;集群持续收敛。
线性水平扩展
将集群规模翻倍,吞吐量大致翻倍。很少有数据库以这种可预测性扩展写入吞吐量。
可调一致性
每个查询的一致性从 ONE(最快)到 ALL(最强)。按用例选择正确的 CAP 权衡。
CQL — 类 SQL 查询语言
Cassandra Query Language 读起来像 SQL — CREATE TABLE、SELECT、INSERT — 但强制分区感知建模。对 SQL 团队来说易于上手。
多数据中心复制
跨地理区域的开箱即用异步复制。每 DC 仲裁一致性实现低延迟区域读取。
无 SPOF — 在节点丢失时存活
集群在节点故障、网络分区和滚动升级期间继续提供写入。在 Netflix 规模上经过实战检验。
应用场景
极端规模的时序和 IoT
跨多节点集群每天数十亿次写入。传感器数据、遥测、审计日志。
消息和聊天系统
Discord 在 Cassandra 中存储数十亿条消息。宽行架构完美契合聊天线程访问模式。
用户活动流
每用户时间线、通知源 — 高写入吞吐量、简单读取模式。
多区域会话状态
全球复制的用户会话,具有区域读取局部性。每个会话类调优的多 DC 一致性。
推荐系统后端存储
通过分区键以高并发的亚毫秒读取提供预计算的推荐。
代码示例
CREATE KEYSPACE app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3
};
USE app;
CREATE TABLE events (
user_id UUID,
ts TIMESTAMP,
kind TEXT,
payload TEXT,
PRIMARY KEY ((user_id), ts)
) WITH CLUSTERING ORDER BY (ts DESC); INSERT INTO events (user_id, ts, kind, payload)
VALUES (uuid(), toTimestamp(now()), 'signup', '{"plan":"pro"}');
SELECT * FROM events
WHERE user_id = 550e8400-e29b-41d4-a716-446655440000
LIMIT 20; -- 强一致性(仲裁):
CONSISTENCY QUORUM;
SELECT * FROM events WHERE user_id = ?;
-- 最终 / 快速:
CONSISTENCY ONE;
SELECT * FROM events WHERE user_id = ?; INSERT INTO sessions (id, user_id, payload)
VALUES (?, ?, ?)
USING TTL 3600; -- 1 小时后过期 对比
| vs ScyllaDB | ScyllaDB 是针对亚毫秒延迟和更低硬件成本优化的 Cassandra C++ 重写。CQL 兼容。如果延迟和每节点吞吐量重要,选 ScyllaDB;如果社区 + 工具重要,选 Cassandra。 |
| vs MongoDB | Mongo 是面向文档的;Cassandra 是宽列。Mongo 在临时查询上胜出;Cassandra 在线性写入扩展和多 DC 复制上胜出。 |
| vs PostgreSQL | Postgres 是带只读副本的单主 — 强一致性、连接、事务。Cassandra 是多主,无连接,默认最终一致性。对于 OLTP 选 Postgres;对于写密集型、分区键工作负载选 Cassandra。 |
| vs DynamoDB | DynamoDB 是 AWS 托管的宽列,按需计费。Cassandra 是自托管的,成本可预测。API 不同;Cassandra 是 OSS。 |
常见问题
Cassandra 支持连接吗?
生产集群规模?
默认端口?
备份?
应该选 Cassandra 还是 ScyllaDB?
如何建模数据?
默认认证?
相关服务
在你的 VPS 上部署
Apache Cassandra 是一个分布式宽列 NoSQL 数据库,专为高写入吞吐量、线性水平可扩展性和无单点故障而设计。Netflix、Apple、Discord、Instagram、eBay 使用 — 任何"数据库绝不能宕机"是硬性要求的地方。
部署此服务 →