两名工程师、两个月、4 万行 Rust:DynamoDB 太贵又慢,Perplexity 决定自己造
文章目录
两名工程师、两个月、4 万行 Rust:DynamoDB 太贵又慢,Perplexity 决定自己造
两名工程师、两个月、4 万行 Rust:DynamoDB 太贵又慢,Perplexity 决定自己造 — infoq.cn · 13 小时前 · ⚙️ 工程

当托管的键值数据库在成本和延迟两端同时逼近瓶颈,是继续加钱扩容,还是把主动权收回自己手里?Perplexity 的工程团队选择了后者:面对 DynamoDB 在大规模读写下的账单压力和尾延迟抖动,他们用两名工程师、约两个月时间、四万行 Rust 代码搭起一套自研存储系统,逐步替换掉原先依赖的托管服务。文章交代了迁移动因:DynamoDB 按读写容量单位计费,请求量和数据体积增长时成本曲线陡峭;受分区键设计限制,热点分区会带来限流与延迟尖刺;单条记录 400KB 的上限也让大对象存储显得别扭。自研方案围绕自身访问模式做取舍,把通用性换成更低的单位成本、更可控的尾延迟和更强的可观测性。值得注意的是,这套系统并非从零发明存储引擎,而是把重心放在与业务贴合的分片、缓存与查询路径上,用成熟组件拼装出可控的整体;迁移也采取渐进方式,新旧系统在一段时间内并行,避免一次性切换带来的风险。作者的核心结论是:当业务规模跨过某个阈值,通用托管数据库的抽象成本可能超过自建的工程成本,一支小团队在边界清晰的前提下也能造出够用的专用系统;但这条路要求团队对数据结构、故障恢复和日常运维有足够把握,并非普适选择。对多数团队而言,这更像一份成本核算的提醒,而不是可以直接照抄的施工图。
核心信息
- 投入规模:Perplexity 用两名工程师、约两个月、四万行 Rust 代码完成了自研数据库从设计到上线的全过程,并替换掉原先托管的 DynamoDB。四万行代码背后还有查询路径、缓存、分片、故障恢复、监控告警等一整套配套设施,这些工作量和长期运维负担远不是代码行数能概括的,两名核心成员也意味着较高的关键人依赖风险。换言之,所谓「两个月造一个数据库」,省下的是授权费,花掉的是团队注意力和长期的运维责任。
- 迁移动因:DynamoDB 按读写容量单位计费,请求量与数据体积上涨时账单增长陡峭;分区键设计不当会形成热点分区,进而触发限流和延迟尖刺;单条记录 400KB 的上限也让大对象存储变得别扭。这些约束叠加,使托管方案在成本与延迟两端同时逼近瓶颈,继续加钱扩容的边际收益越来越低。对读多写少、访问模式稳定的业务,这类问题往往被抽象层掩盖,直到规模放大才集中暴露。
- 方案取舍:自研系统围绕 Perplexity 自身的访问模式做定制,放弃通用数据库的广泛兼容性和现成的生态工具,换取更低的单位成本、更可控的尾延迟以及更强的可观测性。代价是团队必须自行承担一致性语义、备份恢复、扩容与故障演练,一旦出现数据损坏或跨区域问题,没有厂商兜底,只能靠自己的工程能力解决。换句话说,这是用确定性换来了自由度,前提是团队对自身负载足够了解。
- 适用边界:作者认为当业务规模跨过某个临界点,通用托管数据库带来的抽象成本会超过自建的工程成本,小团队也能造出够用的专用系统;但这一结论高度依赖团队能力与业务形态。对访问模式多变、团队规模有限、增长路径不确定的业务来说,继续购买托管服务、把精力放在产品上,通常仍是更理性的选择。判断标准不是「自研更酷」,而是单位查询成本与工程人力的长期对比。
💡 为什么值得读: 如果你想搞清楚「什么时候该自己造轮子」这道题的真实成本,这篇来自一线团队的复盘比任何架构图都更有说服力。
✍️ 小编看法: 这个故事最容易被误读成「云服务不行了,大家都该自研」。真正值得关注的是那条成本曲线:按请求计费的产品,在流量和数据的双重增长下,账单会以比业务收入更快的速度爬升,而尾延迟的抖动往往在用户投诉之后才被看见。当一个业务的单次查询成本可以被清楚算出来,自建与否就不再是信仰问题,而是一道算术题。但算术题里最容易被漏掉的,是那些不进预算表的部分。两名工程师两个月写出四万行代码,听着很燃,可代码上线只是开始:后面是随叫随到的值班、数据损坏时的手工修复、扩容窗口的通宵,以及两个人中任何一位离职带来的断层。托管服务真正卖的从来不是存储,而是把「半夜三点有人替你处理故障」这件事打包进了账单。自研等于把这笔保险费换成自留风险,规模不够大时,这笔交易是亏的。对读者的意义在于两点。其一,如果你的账单里已经出现明显浪费,先别急着换技术栈,把单位查询成本和单位写入成本拉出来算清楚,很多问题其实出在分区键、缓存命中率或查询模式上,改这些比造数据库便宜得多。其二,如果你真的走到了自建的门口,请把运维人力和关键人风险一起写进决策文档,而不是只比较机器开销。下一步值得观察的是:这套系统在数据结构频繁变更、跨区域部署和合规审计面前能撑多久;它会不会被开源出来,成为其他团队的参考;以及云厂商会不会针对这类流失做出定价或产品层面的回应。这三件事的走向,比四万行代码本身更能说明问题。
🏷️ Rust, DynamoDB, Perplexity, database
本文由 AI 辅助生成,内容为原文摘要与编辑点评,原文版权归原作者所有,欢迎点击上方链接阅读完整内容。
留下一点回声