7小时,400美元,干掉每年50万的"技术债"
**先声明:**这不是一个AI取代程序员的故事,这是一个"微服务过度设计"被现场正法的案例。
当Nir Barak在周末刷到Cloudflare那篇《我们用AI一周内重写了Next.js》时,他手里的咖啡差点洒了。不是因为他们用了AI,而是因为那个方法论太眼熟了——拿测试套件当靶子,让AI一直打到全绿为止。
他看了一眼自己公司的账单:每年30万美元,就为了跑一堆JavaScript的JSONata表达式。更离谱的是,这些表达式运行在Kubernetes的Node.js Pod里,而调用它们的主服务是Go写的。
每查一个字段,数据要先跨网络走一圈RPC,序列化再反序列化,150微秒就这么没了。 简单到一个user.email == "admin"的判断,硬是被搞成了微服务架构。
昂贵的"语言边界"
Reco是一家搞SaaS安全的公司,每天处理几十亿条事件日志。他们的研究员需要写检测规则,于是选了JSONata——一种像jq但带Lambda的JSON查询语言。
问题是:官方实现是JavaScript,而他们的数据管道是Go。
于是出现了技术上最昂贵的"异地恋":Go服务通过网络RPC,调用跑在K8s里的Node.js进程。每个表达式都要经历"序列化-网络传输-反序列化-计算-再序列化-传回去"的全套流程。
13000行Go代码,1778个测试用例,总成本400美元
为了支撑业务量,他们一个集群就扩容到200多个Node.js副本,甚至触发了K8s的IP分配上限。Nir试过嵌入V8、试过输出缓存、试过用GJSON处理简单表达式,但都是在牛车上贴涡轮,根子上的架构错误没动。
直到那个周末,他决定让AI来动这个刀子。
抄作业:测试即真理
Cloudflare的方法简单粗暴:把官方测试套件搬过来,让AI实现代码直到所有测试通过。
Nir复制了这个套路。周一上班,他按下开始键。7小时后,gnata诞生了——纯Go实现的JSONata 2.x,13000行代码,1778个官方测试全过。
没有需求文档,没有架构设计评审,只有测试红绿之间的AI迭代。
成本?400美元的API调用费。对比之前每月2.5万美元的RPC集群账单,这个ROI算都不用算。
两层架构:在原始字节上跳舞
gnata不是简单的语言移植,它彻底改变了计算方式。
它搞了个双层评估架构:
快车道:对于简单的字段查找和比较(比如account.status = "active"),直接在原始JSON字节上操作,零堆内存分配,不解析整个文档。
慢车道:复杂表达式才走完整AST解析,但即使如此,也只解析需要的子树。
更狠的是流式评估层。当N个表达式要评估同一条事件时,系统会把所有字段路径合并成单次扫描。表达式数量不影响性能,原始数据只被读一次。
架构对比:从跨网络RPC到库内调用
结果很暴力:简单查询快了1000倍,复杂查询也快了25-90倍。不是Go比JS快,而是消除了RPC和网络序列化的 overhead。
影子模式:AI写的代码,敢用吗?
说实话,把AI生成的13000行代码直接扔上生产?没人敢。
Reco用了最保守的 rollout 策略:影子模式。
gnata并行运行一周,处理数十亿事件,但结果只用来对比,不实际采用。每天检查 mismatch,修边界情况。有趣的是,他们还真发现了jsonata-js本身的bug——官方实现没遵守自己规范的地方,gnata做对了。
第七天,连续三天零差异。gnata转正。
还有个意外收获:这是Reco第一次用AI Agent去审AI写的代码。Agent疯狂报错,从真正的并发问题到代码格式洁癖都有,团队不得不教它区分"要命"和"矫情"。这套流程后来成了他们AI代码审查的标准。
评论区吵翻
文章发出来,Hacker News的老哥们却不买账。
"这不是AI的奇迹,这是架构蠢货的救赎。"
最高赞评论一针见血:每年30万美元不是JSONata的错,是微服务架构病的代价。把本应该在进程内完成的计算硬拆成网络调用,这是2016年微服务 hype 留下的技术债。
更扎心的是:JSONata官方文档显示,早就有两个Go实现了。 为什么要花400美元让AI重写一个,而不是直接用现成的?
Nir没直接回应这点,但业内人士都懂:那两个实现要么功能不全,要么性能不达标,要么...就是不想用别人的代码。毕竟,"Not Invented Here"综合征在软件行业永远有市场。
另一个质疑更现实:现在你有13000行Go代码要维护,以前有开源社区帮你维护JS版本。这笔账算清楚了吗?
2026:手术刀时代
gnata砍掉了30万RPC成本,但故事没结束。
原来的规则引擎为了绕过JSONata的单条评估限制,搞出了数万Goroutine并发的畸形架构——内存爆炸,CPU争抢。现在gnata支持批量流式处理,他们重构了规则引擎,用请求合并和短缓存又砍掉了每年20万。
两周,50万美元,从账单上消失了。
Andrej Karpathy说,顶尖技术专家的杠杆效应因为AI被放大了。以前这种重构可能需要一个小团队两个月,现在一个人一个周末。
但gnata的真正启示不是AI能写代码,而是AI把"重构"这个以前不敢碰的禁区,变成了可以承受的风险。 当测试套件成为唯一真理,当实现成本降到几百美元,技术债务的偿还周期从季度变成了天。
不过话说回来,如果当初没搞那个跨语言RPC的"天才"架构,这50万是不是根本不用省?
有时候,最大的优化是承认:你不需要那么复杂的解决方案。
【kimi-k2.5锐评】:这不是AI编程的胜利,是微服务架构过度设计被现场抓包的社死现场,400美元买的不是代码是勇气。
参考链接:
https://www.reco.ai/blog/we-rewrote-jsonata-with-ai