我有一支技术全面、经验丰富的小型团队,专注高效交付中等规模外包项目,有需要外包项目的可以联系我
一出关于"选了不合时宜的技术"的黑色喜剧。
周一我还有工牌。
周二我的工牌成了杯垫。
罪名?我把一个叫 "Billing-Quotes" 的、波澜不惊的 Java 微服务(13 个上游)用 Rust 重写了。p95 更瘦 了、CPU 更冷静 、内存更低,基础设施账单开始像小冰箱数字那样往下掉。然后 CTO 叫我带个箱子来。
这是一份技术正确、政治错误、文化核污染的事后剖析。
如果你也曾在凌晨两点盯着 JVM 火焰图,幻想着交付一个干净利落的 Rust 单一二进制 ------这就是你的带人头数的爱情喜剧。
现场:看上去"有罪"的服务
- 
患者 :Spring Boot 3.x,Java 21;双副本;每个 2 vCPU / 4 GB RAM 
- 
SLO :p95 < 120 ms;可用性四个 9(和我健身卡一样"立志") 
- 
流量 :午间尖峰------批量刷新 + 用户像"打了浓缩咖啡的啄木鸟"一样猛点 Get Quote 
- 
性能异味:JSON 瞬时高峰引发 GC 打嗝;"DTO 的 DTO"善意设计把分配量吹胀 
- 
额外阻力:一个"为一致性"而触一切的网关跳转;以及负责鉴权、指标、零食(?) 的 sidecar 
不是不能跑------只是穿着羽绒服去健身。
痒点:为什么伸手去拿 Rust
三个信号在喊"上系统语言":
- 
高扇出 I/O:内部 gRPC + 话多的支付适配器 
- 
炙热 JSON 路径:每一次多余分配都会折返到 p99 身上 
- 
尾延迟比吞吐更重要:长尾在咬收入 
我搞了个 spike:Axum、Tokio、serde、reqwest(gRPC 用 tonic)、sqlx 接 Postgres、tracing + OpenTelemetry 。 镜像了每个 endpoint 与错误契约 ,像博物馆藏品一样保留了 header,用可灰度的 strangler 做壳,从 1% → 10% → 50% → 100% 切,不惊动 Security。
两周金丝雀,同样的流量结构:
- 
p95:118 ms → 94 ms(稳) 
- 
p99:由刺儿变顺滑(短且少的尖 spikes) 
- 
峰值 CPU / RPS:降约 30% 
- 
稳态内存:降约 45% 
- 
基础设施账单:个位数百分比下降(不是电影桥段,但 CFO 会笑) 
- 
启动时间"眨眼即绪",产物小巧,仪表盘无聊到刚刚好 
我有图表。我有 README。我有笑容。很快,我没有工作。
那场让我"丢剧情"的评审会
开头是乐观的:
- 
SRE:"数字很好看。" 
- 
DevOps:"二进制体量可爱。" 
- 
经理:"值班轮换能接住吗?" 
- 
安全:"威胁建模在哪儿?" 
- 
CTO:"我们对 语言蔓延(language creep)的政策是什么?" 
语言蔓延 。我追的是毫秒 ;他们担的是治理 ------让公司可预测的安静胶水。
眉头的潜台词:
- 
值班素养 :我们的 Playbook 是 JVM 型 :JFR、heap dump、熟悉的告警。Rust 需要新肌肉。 
- 
招聘与覆盖 :凌晨三点,谁能安全下手 ?我们的板凳深度在 Java。 
- 
安全流水线 :SBOM、SAST、许可证校验------全为 JVM 调了味 。Rust 很棒,我们的链路没准备好。 
- 
平台一致性 :千百个局部胜利 ,扛不住一个组织级异类。 
- 
变更周期:我们削了延迟,却加了几周的跨团队工作。 
我的技术胜利 ,成了社会性退步 。我把尾巴 收好了,却把地图炸了。
四个把"升职"写成"离场"的错误
1) 优化了错误的 KPI
死盯 p95,领导层在乎交付速度 与人员跨服务机动性。我的图没动他们的图。
2) 低估了"平均解释时间"
复盘靠共享语言与共享工具 。我在一句话中途,引入了新方言。
3) 把工具链债务当"以后再说"
工程师把 toil 当谜题;组织把 toil 当风险。我的谜题,是他们的呼叫器。
4) 把"更快更省更稳"误以为"更可预测"
用新语言重写一个服务 ,是穿着"局部重构"的外衣在宣布一项战略。
Rust 到底改变了什么(和没改变什么)
真的改变了:
- 
堆内戏码 → 所有权清晰:炙热的 JSON 路径不再像肥皂剧一样分配。 
- 
尾延迟:更少的 GC 方差;更少"p99 在尖叫"的时刻。 
- 
启动与空转足迹 :冷启动与scale-to-zero 的游戏更轻松。 
没改变(抱歉):
- 
数据库 :如果你的瓶颈是 Java 里的 Postgres,换 Rust 后它还是 Postgres ------只是生命周期干净了。 
- 
跨团队牵引 :新栈 → 新工具 → 新人要训练。 
- 
功能上线速度 :如果是产品逻辑 占大头,语言速度不等于出货速度。 
好笑的部分
财务刚发来账单变好 的喜讯,安全就问谁批准了新 SBOM 流水线 。 PM 问这会不会影响 Q4 促销 。 SRE 问 eBPF 闹脾气 时怎么 on-box 调试。 CTO 问还有多少服务会"受益于 Rust"。
实话实说:"大概一把手,五个以内 。" 他点头:"我爱工艺,我不爱先例。"
事实证明:先例 的分量,比二进制还重。 周五,我的工牌滴------红了。
更好的路线图(我本该这么干)
如果你对 Rust 手痒 (有时值得),请按这套无聊但正确的顺序来:
- 
申请一条"运行时例外"通道 一页纸、一个季度、一个服务。准入标准:量化 SLO 痛点、可隔离的热路径、成熟库、可回滚计划、以及达不到就日落的条款。 
- 
先上 sidecar,不要重写 把一个热路径(序列化、加密、图像处理)剥离成同机 Rust sidecar ,Java 仍是老大 。同仪表盘测尾部改善。 
- 
让平台团队拥有工具链 争取小额立项:SBOM、SAST、签名、追踪规范、崩溃捕获、仪表盘 。平台点了头,你是公民 ,不是游击。 
- 
把可观测性当"契约" 写代码前,先锁定日志格式、Trace ID、错误分类、仪表盘 。**"看起来一样,跑得更好"**才是容易过会的叙事。 
- 
Strangler + 业务级开关 从一个 endpoint 起步。用开关或 Envoy 路由前滚/回滚 。回滚要以分钟计 ,而不是开会计。 
- 
Day 1 就发布"删除计划" 能删 是实验的灵魂。出生证明上就写上讣告草稿。 
没行话的复盘
What Went Well(做得好)
- 
金丝雀干净 、度量清晰 、可逆切换 
- 
真实可复现的尾部改善 
- 
文档解释形态而不仅是语法 
What Went Badly(做坏了)
- 
性能 压过了可预测性 
- 
未融资的工具与培训债 
- 
把治理当作"别人的 Jira" 
Next Time(下次要这样)
- 
先 sidecar,后重写(也许永不) 
- 
平台拥有安全与 SBOM 后再落代码 
- 
先要政策 ,不要在 PR 里偷带战略 
一个袖珍 Go/No-Go 清单(拿走就用)
- 
SLO 痛点已量化 且业务可见 
- 
热路径可被开关隔离 
- 
平台已买入:SBOM / SAST / 签名 / 追踪 
- 
值班素养:至少 4 人 能在凌晨三点安全排障 
- 
分钟级回滚 
- 
删除计划已批准 
把它贴在键盘边。对不齐就先去调 GC 、修 N+1 ,把英雄披风留到万圣节。
盒子、车站、尾声
HR 很温柔;安全很高效。我坐上公交------讽刺轻装上阵 。 路上,一个 Rust-first 创业公司发来消息:"看过你去年的演讲。我们在招。我们喜欢你的数字。"
不英雄的结论:我依然喜欢 Java,也依然爱 Rust 。我更爱公司 ------因为他们给二者付钱 。工具容易鼓吹;由人组成的系统很难改变 。更好的工程师不是跑赢基准的人,而是在不惊动组织结构图的前提下交付改进的人。
如果你手里握着"重写冲动",做不性感的事 :写备忘录、从比自尊更小 的范围开刀,数清 你让值班在凌晨三点要学的新工具。 如果账算得过,我为你的尾巴 喝彩;如果不,去炫耀一个更重要的图:time-to-change。
全栈AI·探索:涵盖动效、React Hooks、Vue 技巧、LLM 应用、Python 脚本等专栏,案例驱动实战学习,点击二维码了解更多详情。

最后: