FerroDruid
Rust-native Apache-Druid-compatible OLAP
何时收回成本?
示例:托管可观测性支出每月 $5,000
如果托管可观测性支出为每月 $5,000,按保守 40% 降低约为 $2,000/月的可避免总使用费 — 不含 S4 软件费、EC2 和工作负载差异。
一个 Rust-native、兼容 Apache Druid 规格的实时 OLAP 数据库。它支持 Druid REST API、native query JSON 和 Druid SQL,并读取 Druid segment v9 二进制文件 — 无需 JVM、无需 ZooKeeper,也无需六进程 control plane。单一二进制文件在低于 200 MB RAM 下可于一秒内启动。
经典 Apache Druid 集群在提供单个查询前,就需要六个或更多 JVM 进程、ZooKeeper、外部 metadata 数据库以及 16 GB+ RAM;FerroDruid 的单二进制模式用一个进程替代全部组件,并以自包含 AMI 交付。它提供全部八种 native query 类型(timeseries、topN、groupBy、scan、search、segmentMetadata、dataSourceMetadata、timeBoundary);运行 Druid SQL(SELECT、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、30+ 函数、EXPLAIN PLAN FOR、MSQ task endpoint,~95% 核心 SQL 对等);暴露 40+ 个 Druid-compatible REST endpoint;读取 Druid segment v9(已在本地针对 Druid 31.0.2 / 35.0.1 写入的 segment 验证,并已从真实 AWS S3 deep storage 端到端验证:Druid-31 segment,round-trip);并从 Kafka 和 Kinesis supervisors 以及 native batch 摄取。默认启用 Basic auth(Argon2id)+ RBAC,通过 rustls 提供 TLS,并在首次启动时生成唯一随机管理员密码。
面临挑战
Apache Druid 是一款强大的实时 OLAP 引擎,但传统的集群在服务单个查询之前,需要 6 个或更多 JVM 进程、ZooKeeper、外部元数据数据库以及 16 GB 或更多的 RAM。建立、运行和监控这 6 进程控制平面非常繁重,对于评估环境和较小的部署来说大材小用。您希望使用 Druid 的 API 和 segment 格式,但不希望承担运行 JVM 和 ZooKeeper 集群的负担。
工作原理
- 1
作为单个二进制文件启动
单二进制模式运行单个进程 — 无 JVM、无 ZooKeeper、无外部元数据数据库 — 启动时间不到 1 秒,内存占用低于 200 MB。它使用 SQLite 存储元数据,使用本地文件系统作为深度存储,并作为自包含 of AMI 交付。
- 2
支持 Druid 线路协议
它支持 Druid REST API、原生查询 JSON 和 Druid SQL,并读取 Druid segment v9 二进制文件(已在本地针对 Druid 31.0.2 / 35.0.1 写入的 segment 验证,并已从真实 AWS S3 deep storage 端到端验证:Druid-31 segment,round-trip)。它支持所有 8 种原生查询类型,并公开了 40 多个与 Druid 兼容的 REST 端点,因此您可以将现有的 Druid 客户端或 Apache Superset 连接器直接指向它。
- 3
启动时锁定,首次登录时需修改密码
默认启用基本身份验证(Basic auth,使用 Argon2id)和 RBAC,并通过 rustls 提供 TLS。在首次启动时,它会生成一个该实例特有的全新随机 admin 密码(绝非默认或共享密码),并将其写入实例系统日志一次。admin 账户被标记为必须修改,因此在操作员 POST 新密码之前,所有 API 端点都会返回 HTTP 403,从而强制在首次登录时修改密码。
产品亮点
Druid-spec wire-compatible(REST + native JSON + Druid SQL,segment v9)— 现有 Druid 客户端和查询可用。
一个二进制文件,无需 JVM / ZooKeeper / 六进程 control plane;在低于 200 MB RAM 下亚秒级启动。
8 种 native query 类型 + Druid SQL(~95% 核心对等)+ Kafka / Kinesis ingest;默认启用 auth + RBAC。
包含内容
- 自包含的 Amazon Linux 2023 AMI(Graviton / arm64,支持 t4g、c7g、m7g 和 r7g 系列实例)
- 单二进制模式 — 无 JVM、ZooKeeper 或外部元数据数据库的单进程,在低于 200 MB 的 RAM 上启动时间不到 1 秒(SQLite 元数据以及本地文件系统深度存储)
- 所有 8 种 Druid 原生查询类型(timeseries、topN、groupBy、scan、search、segmentMetadata、dataSourceMetadata、timeBoundary)以及 40 多个与 Druid 兼容的 REST 端点
- Druid SQL(SELECT / WHERE / GROUP BY / HAVING / ORDER BY / LIMIT,超过 30 个函数,EXPLAIN PLAN FOR,一个 MSQ 任务端点,以及约 95% 的核心 SQL 兼容性)
- 读取 Druid segment v9 二进制文件(已在本地针对 Druid 31.0.2 / 35.0.1 写入的 segment 验证,并已从真实 AWS S3 deep storage 端到端验证:Druid-31 segment,round-trip),支持从 Kafka、Kinesis supervisor 以及通过原生批处理进行摄取
- 默认开启安全设置 — 基本身份验证(Basic auth,使用 Argon2id)加上 RBAC,通过 rustls 提供 TLS,并在首次启动时生成实例唯一的随机 admin 密码,该密码必须在首次登录时修改
- 用于在 ALB 后方部署的 CloudFormation 模板(marketplace/cloudformation/ami.yaml),支持的拓扑结构为单二进制单节点(多节点默认 fail-closed)
适用场景
希望运行与 Druid 兼容的实时 OLAP 且无需运行 6 进程 JVM 和 ZooKeeper 集群的团队
使用 Druid REST API、原生查询 JSON、Druid SQL 或 Apache Superset 连接器的现有客户端的后端
基于轻量级二进制文件的 Druid 功能评估和开发环境,该文件启动时间不到 1 秒且内存占用低于 200 MB
单节点流式传输和时间序列分析,支持从 Kafka、Kinesis supervisor 或通过原生批处理进行摄取
常见问题
它与真正的 Apache Druid 的兼容性如何?
FerroDruid 支持 Druid REST API、原生查询 JSON 和 Druid SQL,并读取 Apache Druid 的 v9 磁盘 segment — 已在本地针对 Druid 31.0.2 / 35.0.1 写入的 segment 验证(FerroDruid 自身写出的 segment 使用其自有格式)。它支持所有 8 种原生查询类型,并提供 40 多个与 Druid 兼容的 REST 端点,核心 Druid SQL 兼容性约为 95%(并非 100%)。Apache Superset 4.1.4 的端到端流程(Test Connection、数据集自动同步、图表、时间范围筛选、SQL Lab)已针对 v1.2.0 验证,且 v1.2.0 的多 segment post-aggregation 与 Apache Druid 36.0.0 在 13 个审计用例中全部一致。坦诚的适用范围:验证针对 single-binary 模式;segment 读取已在本地磁盘上按字节验证(针对 Druid 31.0.2 / 35.0.1),并已从真实 AWS S3 deep storage 端到端验证(Druid 31 的 segment,行数与列集合 round-trip 一致);非默认 segment 编码会以明确错误拒绝;JOIN / CTE SQL 不执行而是 fail-closed 返回。
我需要 JVM、ZooKeeper 还是外部元数据数据库吗?
在单二进制模式下不需要。单进程启动时间不到 1 秒,且使用低于 200 MB 的 RAM — 相比之下,传统的 Druid 集群需要 6 个或更多 JVM 进程、ZooKeeper、外部元数据数据库以及 16 GB 或更多的 RAM。支持的单二进制路径使用 SQLite 存储元数据,使用本地文件系统作为深度存储。
我可以运行多节点配置吗?
支持的拓扑结构是单二进制单节点;多节点配置默认 fail-closed。老实说,实时验证是针对单二进制模式进行的,我们目前尚未将其作为运行中的多节点集群进行验证。有关详细信息,请参阅 docs/KNOWN_LIMITATIONS.md。
安全是如何处理的?首次登录流程是怎样的?
默认启用基本身份验证(Basic auth,使用 Argon2id) and RBAC,并通过 rustls 提供 TLS。在首次启动时,AMI 会生成一个该实例特有的全新随机 admin 密码(绝非默认或共享密码),并将其写入实例系统日志一次。admin 账户被标记为必须修改,因此在操作员向 /druid-ext/basic-security/authentication/db/basic/users/admin/credential POST 新密码之前,所有 API 端点都会返回 HTTP 403。轮换后的凭据会被持久化,并在重启后依然保留。
如何部署它?许可和计费是如何工作的?
使用提供的 CloudFormation 模板(marketplace/cloudformation/ami.yaml)将其部署在 Application Load Balancer 后方;在 ALB 处终止 TLS,请勿将服务端口直接暴露给互联网。将您的客户端(REST API、原生查询 JSON、Druid SQL 或 Apache Superset 连接器)指向负载均衡器端点。此商品以固定发布版本销售 FerroDruid 的经过加固、扫描且获得支持的分发版。源代码依据 Business Source License 1.1(BUSL-1.1)提供:可用于生产,但不得作为与本公司竞争的托管、代管或嵌入式数据库/分析/OLAP 服务向第三方提供;每个版本在公开发布四年后转换为 Apache License 2.0(商业许可:[email protected])。AWS 会根据运行的实例小时数自动对 AMI 进行计量收费,产品中没有计量代码。
为什么更便宜
假设在 us-east-1 进行约 1k events/秒的实时摄取并要求亚秒级 OLAP 查询响应。
- m5.xlarge × 3 (broker / coord / historical)
- $525 / 月
- ZooKeeper (t3.medium)
- $30 / 月
- RDS PostgreSQL 元数据
- $150 / 月
- 月度合计
- $705 / 月
- FerroDruid 实例 (m5.large + 软件费)
- $120 / 月
- 月度合计
- $120 / 月
按摄取 QPS 选择 FerroDruid 实例
| 摄取 QPS | 推荐实例 | FerroDruid 实例费用 | 月度合计对比 Druid 集群 |
|---|---|---|---|
| ~100 events/s | t3.medium | $45 / 月 | $45 / 月 (Druid $400, −89%) |
| ~1k events/s | m5.large | $120 / 月 | $120 / 月 (Druid $705, −83%) |
| ~10k events/s | m5.2xlarge | $400 / 月 | $400 / 月 (Druid $1,800, −78%) |
仅供参考。Apache Druid 集群基线运行 broker / coordinator / historical 作为独立 JVM (m5.xlarge × 3) 加 ZooKeeper 和 RDS PostgreSQL 元数据 DB, 是典型最小部署。FerroDruid 是与 Druid wire 兼容的单一二进制, 无需外部 ZooKeeper 或元数据 DB; 默认安全设置, 首次登录强制更改密码。
计费模式
按小时收取软件费用 + EC2(t4g / c7g / m7g / r7g 级,Arm)。按实例类型计量。