9月16日消息,Perplexity 公布自研键值数据库 CobbleDB,把搜索业务的网页内容热读路径从 AWS DynamoDB 迁到这套自研系统上。公司报告的关键数字是:批量读延迟中位数从 31.4 毫秒降到 5.60 毫秒,内部成本模型估计支出至少下降 20%。整个项目写了约 4 万行 Rust,由两名工程师和数百个持续运行的编码代理在两个月内完成。 DynamoDB 哪里不合适了
CobbleDB 的诞生由一个具体的读模式驱动。Perplexity 的流水线把每个网页清洗后切成语义连贯的段落、计算向量、连同段落一起存储;一次典型的搜索请求要取回 100 到 120 个页面键,拆成 10 到 20 个一批的小组,单条记录约 50KB。排名必须等整批记录到齐才能开始,任何一个慢响应都会拖住整批的延迟。
DynamoDB 在这个模式下有两个问题。一是钱:读写按数据量计费,而持续爬取和 embedding 模型升级带来的全量重写让账单随语料滚动放大。二是控制权:托管架构不允许 Perplexity 决定缓存分配、副本选择和数据放置,一个慢副本或一次跨可用区的网络跳转就会抬高整批延迟;新 chunker 或新 embedding 模型的重处理产生的写入洪峰,又会和在线搜索流量直接争抢。
三层拆解:Pillar、Lorry、CobbleDB
Perplexity 的解法是把三件事拆开:持久化文档状态、导出处理、低延迟在线服务,各配一套存储和运维要求。
Pillar 在分布式数据平台 YTsaurus 上保存带版本的文档状态,跑在成本更低的 HDD 存储上,同时管理页面子集和导出队列。Lorry 把导出转换成与分区对齐的批次,写入 Amazon S3,再把批次元数据发布给 CobbleDB。CobbleDB 只管热读路径:键是哈希后的 URL,值是处理好的段落和逐块 embedding。
这个结构的关键在于写入不再直接打进在线库。CobbleDB 的分区副本各自轮询控制面、下载自己的下一批、按时间序应用更新;一个副本恢复时处理自己的积压,不阻塞健康节点,也不暂停整个集群的写入。
读路径上,每个数据节点用 RocksDB 引擎,热记录留在内存,缓存未命中读本地 NVMe。无状态路由把哈希键映射到分区,优先选择调用方同可用区的副本;某个副本响应慢时,路由会向另一份副本发对冲请求——对冲消耗额外容量,但避免一个掉队节点拖住整批。节点层面用 RocksDB 的 MultiGet 一次取回多个键。
一致性是主动放弃的部分:没有事务,更新经批量写入异步可见,副本可以短暂暴露不同版本,恢复各自独立。Perplexity 的检索路径容忍短暂滞后,于是把协调开销从延迟敏感的读路径里拿掉。需要事务、同步副本或写后立读的系统,不适用这套模型。
数字与它们的口径
Perplexity 在约 20 万请求每秒的生产流量下对比了新旧两套系统:批量读 p50 从 31.4 毫秒降到 5.60 毫秒,p90 从 56.7 毫秒降到 9.77 毫秒,p99 从 123 毫秒降到 24.2 毫秒。公司另报告压测到 50 万请求每秒未观察到性能下降。
p99 这一档值得单独看。搜索排名等的是整批记录,长尾延迟比中位数更要命——24.2 毫秒的 p99 意味着 99% 的批量读都在这个时间内完成。
成本有两个口径:公司内部模型估计至少下降 20%;媒体报道的推算是每年最多节省 1 亿美元。两个数字都不是独立审计。整组对比基于 Perplexity 自己的记录大小、批量模式、基础设施和一致性需求,CobbleDB 的优势来自与这套条件的贴合,不能当作通用基准结论。
两名工程师,数百个不休息的代理
比延迟数字更受关注的是生产方式。约 4 万行 Rust 代码和周边迁移在两个月内完成,人力配置是两名工程师加上数百个持续运行的编码代理。
按 Perplexity 的描述,这些代理跨会话保留项目目标、仓库历史、当前风险和过往决策,工作内容超出代码生成:审计项目频道并把待办关联到 PR,审查应用与基础设施变更,准备修复、测试和后续补丁,跟踪 CI 门禁,监控部署、回滚和恢复演练。两名工程师负责定架构、审查关键变更、批准生产操作——决策在人手里,决策之间的持续跟进在代理手里。
这个分工描述是整件事里最有迁移价值的部分。代理写代码已经不新鲜,少见的是代理在生产级项目里承担审查、CI、部署监控这类"不产出代码但决定进度"的协调工作,而人类工程师的角色收缩为架构、审查与授权。边界同样要写明:这是 Perplexity 一家公司的自述,没有第三方复核,代理具体用什么模型、出错的代价如何分担,都没有披露。
Perplexity 称计划通过 GitHub 开源 CobbleDB,没有给出日期和许可证。开源之前,外部团队无法检验这些数字,也无法直接部署;开源之后,这篇文章里的每一个性能声明才具备被验证的条件。