Skip to main content
[ PIER ]

ScyllaDB

Cassandra 的 C++ 重写 — 相同的 CQL,10× 更低延迟。

Database 支持集群 #nosql#wide-column#cassandra-compatible#high-performance

ScyllaDB 是 Apache Cassandra 的高性能、直接兼容的重新实现,用 C++ 编写,使用无共享、每核心一个分片的架构。它说 CQL,在 Kubernetes 上运行,线性扩展,并在 Cassandra 挣扎的工作负载上提供个位数毫秒 p99 延迟。

使用 Pier 部署

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

代码示例

创建键空间和表(与 Cassandra 相同) sql
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)
);
带 TTL 的写入 sql
INSERT INTO sessions (user_id, token, created, last_seen)
VALUES (?, ?, toTimestamp(now()), toTimestamp(now()))
USING TTL 86400;  -- 24h 后过期
可调一致性 sql
CONSISTENCY LOCAL_QUORUM;
SELECT * FROM sessions WHERE user_id = ?;
从 Java / Spring 连接(Cassandra 驱动无需更改即可工作) java
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 的直接替代品吗?
在 CQL 协议级别,是的。模式通过 `cqlsh -e "DESCRIBE KEYSPACE..."` 迁移。数据迁移通过 sstableloader 或 cqlsh copy。某些 Cassandra 特定工具(nodetool 子命令)有 ScyllaDB 等价物。
开源还是专有?
ScyllaDB 有两个版本 — ScyllaDB Open Source(AGPL)和 ScyllaDB Enterprise(商业)。Pier 部署 Open Source 版本。
默认端口?
9042/tcp 用于 CQL(与 Cassandra 相同)。9180/tcp 用于 Scylla 特定的分片感知协议(驱动感知客户端使用它进行更好的路由)。
集群规模?
Pier 的集群模板支持 2-5 节点。生产通常每个数据中心需要 3+ 节点用于 QUORUM 读取/写入。
从 Cassandra 迁移到 ScyllaDB?
是 — ScyllaDB 发布了迁移工具包。通过 SCYLLA migrator + sstableloader 实时流。大多数应用程序不改变一行代码;只有连接端点改变。
备份?
ScyllaDB 通过 `nodetool snapshot`(与 Cassandra 相同)内置快照支持。Pier 按计划将快照 tarball 传输到 S3。
相对于 Cassandra 的性能提升?
工作负载相关。典型报告 — 50-80% 更低 p99 延迟,相同吞吐量下 30-60% 更少节点。在承诺迁移之前运行自己的基准测试。

相关服务

在你的 VPS 上部署

ScyllaDB 是 Apache Cassandra 的高性能、直接兼容的重新实现,用 C++ 编写,使用无共享、每核心一个分片的架构。它说 CQL,在 Kubernetes 上运行,线性扩展,并在 Cassandra 挣扎的工作负载上提供个位数毫秒 p99 延迟。

部署此服务 →