ScyllaDB
Cassandra 的 C++ 重写 — 相同的 CQL,10× 更低延迟。
ScyllaDB 是 Apache Cassandra 的高性能、直接兼容的重新实现,用 C++ 编写,使用无共享、每核心一个分片的架构。它说 CQL,在 Kubernetes 上运行,线性扩展,并在 Cassandra 挣扎的工作负载上提供个位数毫秒 p99 延迟。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 ScyllaDB。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 ScyllaDB?
ScyllaDB 是 Apache Cassandra 的从头 C++ 重写,始于 2015 年,目标是:保留数据 模型,去掉 Cassandra 的 JVM 税。每核心一个分片架构意味着每个 CPU 核心拥有 一片数据,没有共享可变状态 — 无线程上下文切换,无 GC 暂停,无跨核心 同步。
面向用户的结果:相同的 CQL、相同的驱动程序、相同的模式 — 但 10× 更低 p99 延迟,通常一半的硬件。Discord 将 177 节点的 Cassandra 迁移到 72 节点 ScyllaDB,p99 下降了一个数量级。
Pier 如何部署它
Pier 使用官方 scylladb/scylla Docker 镜像,将 /var/lib/scylla 挂载为数据
卷。默认版本为 latest(撰写时为 Scylla 6.x);5-stable、6-stable 是
固定变体。
集群模式支持 2-5 节点;生产部署通常每个数据中心需要 3+ 节点。Pier 暴露 9042(CQL)和 9180(分片感知)端口。
备份使用快照 tarball,可推送到任何 S3 兼容存储。
何时不要使用 ScyllaDB
对于具有强一致性和丰富连接的 OLTP — Postgres。对于临时分析 — ClickHouse。 对于具有灵活模式的文档 — MongoDB。对于内存缓存/队列 — Redis/Valkey。当 分区键访问 + 写入吞吐量 + 可预测尾延迟是硬性要求时,Scylla 大放异彩。
核心功能
直接 CQL 兼容
与 Cassandra 相同的 CQL 协议、相同的驱动程序、相同的数据模型。通过 cqlsh 转储或使用 sstableloader 实时流迁移。
每核心一个分片架构
每个 CPU 核心拥有一个分片。无跨核心锁,无线程上下文切换 — 重负载下可预测的延迟。
10× 更低 p99 延迟
在 99 百分位上为个位数毫秒,而 Cassandra 为数十或数百。更好的尾延迟 = 更好的用户体验。
更低的硬件占用
通常在 Cassandra 1/3 的硬件上运行相同的工作负载。成本节省在多节点集群中复合。
相同的无主设计
无主,无故障切换。每个节点平等。从 ONE 到 ALL 的可调一致性。
现代运维工具
通过 Prometheus 的内置可观测性、动态核心调度、自动内存管理、暗示交接。
应用场景
用户档案和会话存储
按分区键以个位数毫秒 p99 提供每用户记录 — 完美契合 AdTech、社交、游戏用例。
规模化时序和 IoT
高吞吐量传感器/遥测摄取;与 Cassandra 时序模式相同的模型但延迟更好。
推荐系统后端存储
通过预计算的用户/项目推荐以高并发和可预测尾延迟提供。
广告技术服务与竞价
实时竞价响应需要亚 10ms p99 — Scylla 的每核心架构在通用 DB 失败的地方胜出。
Cassandra 成本削减迁移
现有 Cassandra 集群经常迁移到 Scylla 并削减节点数 60-70%,SLO 更好。
代码示例
CREATE KEYSPACE app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3
};
USE app;
CREATE TABLE sessions (
user_id UUID,
token TEXT,
created TIMESTAMP,
last_seen TIMESTAMP,
PRIMARY KEY ((user_id), token)
); INSERT INTO sessions (user_id, token, created, last_seen)
VALUES (?, ?, toTimestamp(now()), toTimestamp(now()))
USING TTL 86400; -- 24h 后过期 CONSISTENCY LOCAL_QUORUM;
SELECT * FROM sessions WHERE user_id = ?; CqlSession session = CqlSession.builder()
.addContactPoint(new InetSocketAddress("scylla-host", 9042))
.withAuthCredentials("user", "pass")
.withKeyspace("app")
.build(); 对比
| vs Apache Cassandra | ScyllaDB 在协议和 CQL 上兼容。相同的数据模型,相同的驱动程序。Scylla 在延迟和密度上胜出;Cassandra 拥有更大的生态和更长的历史。 |
| vs DynamoDB | 两者都是具有类似 API 的宽列(DynamoDB 有自己的 SDK)。Scylla 有一个 DynamoDB 兼容的 Alternator API。自托管 vs AWS 托管;Scylla 在成本可预测性上胜出。 |
| vs Redis / Valkey | Redis 是带可选持久化的内存;Scylla 是磁盘优先的持久化。Redis 用于缓存 + 短期数据,Scylla 用于规模化持久宽列。 |
| vs MongoDB | Mongo 是带丰富查询语言的面向文档。Scylla 是分区键宽列。Mongo 在临时查询上胜出;Scylla 在可预测延迟和写入吞吐量上胜出。 |
常见问题
ScyllaDB 真的是 Cassandra 的直接替代品吗?
开源还是专有?
默认端口?
集群规模?
从 Cassandra 迁移到 ScyllaDB?
备份?
相对于 Cassandra 的性能提升?
相关服务
在你的 VPS 上部署
ScyllaDB 是 Apache Cassandra 的高性能、直接兼容的重新实现,用 C++ 编写,使用无共享、每核心一个分片的架构。它说 CQL,在 Kubernetes 上运行,线性扩展,并在 Cassandra 挣扎的工作负载上提供个位数毫秒 p99 延迟。
部署此服务 →