Skip to main content
[ PIER ]

Apache Cassandra

线性可扩展的宽列 NoSQL — 永不宕机的数据库。

Database 支持集群 #nosql#wide-column#distributed

Apache Cassandra 是一个分布式宽列 NoSQL 数据库,专为高写入吞吐量、线性水平可扩展性和无单点故障而设计。Netflix、Apple、Discord、Instagram、eBay 使用 — 任何"数据库绝不能宕机"是硬性要求的地方。

使用 Pier 部署

  1. 1 打开 Pier 控制台,点击 Add service。
  2. 2 从模板列表中选择 Cassandra。
  3. 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
  4. 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 一致性。

推荐系统后端存储

通过分区键以高并发的亚毫秒读取提供预计算的推荐。

代码示例

创建键空间和表 sql
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);
按分区写入和读取 sql
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;
可调一致性 sql
-- 强一致性(仲裁):
CONSISTENCY QUORUM;
SELECT * FROM events WHERE user_id = ?;

-- 最终 / 快速:
CONSISTENCY ONE;
SELECT * FROM events WHERE user_id = ?;
行上的 TTL sql
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 支持连接吗?
不。数据模型基于分区键 + 聚类键;你在写入时去规范化并预计算连接。SELECT 必须包含分区键(否则需要全集群扫描)。
生产集群规模?
仲裁读取/写入最少 3 节点;生产 6+ 节点。Pier 的集群模板支持 2-5 节点 — 适合评估和小型部署;生产通常需要更多。
默认端口?
CQL 原生协议 9042/tcp;节点间 gossip 7000/tcp。Pier 向应用程序暴露 9042;7000 保留在内部 Pier 网络上。
备份?
Pier 按计划触发 `nodetool snapshot` 并将快照 tarball 传输到 S3。恢复涉及停止节点、替换数据文件并重启。
应该选 Cassandra 还是 ScyllaDB?
对于每节点最佳性能 — ScyllaDB。对于最大生态、最多工具和社区问答 — Cassandra。两者都说 CQL;它们之间的迁移很简单。
如何建模数据?
从查询开始,导出表。"查询优先"建模是必需的。自由去规范化。Cassandra"Spotify 模型"或"时序模式"文档是生产使用前的必读资料。
默认认证?
Cassandra 使用 PasswordAuthenticator。Pier 在首次启动时通过环境变量设置凭据。

相关服务

在你的 VPS 上部署

Apache Cassandra 是一个分布式宽列 NoSQL 数据库,专为高写入吞吐量、线性水平可扩展性和无单点故障而设计。Netflix、Apple、Discord、Instagram、eBay 使用 — 任何"数据库绝不能宕机"是硬性要求的地方。

部署此服务 →