我用 Rust 重写了一个 Java 微服务,然后丢了工作

我有一支技术全面、经验丰富的小型团队,专注高效交付中等规模外包项目,有需要外包项目的可以联系我

一出关于"选了不合时宜的技术"的黑色喜剧。

周一我还有工牌。

周二我的工牌成了杯垫。

罪名?我把一个叫 "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

三个信号在喊"上系统语言":

  1. 高扇出 I/O:内部 gRPC + 话多的支付适配器

  2. 炙热 JSON 路径:每一次多余分配都会折返到 p99 身上

  3. 尾延迟比吞吐更重要:长尾在咬收入

我搞了个 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 手痒 (有时值得),请按这套无聊但正确的顺序来:

  1. 申请一条"运行时例外"通道 一页纸、一个季度、一个服务。准入标准:量化 SLO 痛点、可隔离的热路径、成熟库、可回滚计划、以及达不到就日落的条款

  2. 先上 sidecar,不要重写 把一个热路径(序列化、加密、图像处理)剥离成同机 Rust sidecar ,Java 仍是老大同仪表盘测尾部改善。

  3. 让平台团队拥有工具链 争取小额立项:SBOM、SAST、签名、追踪规范、崩溃捕获、仪表盘 。平台点了头,你是公民 ,不是游击

  4. 把可观测性当"契约" 写代码前,先锁定日志格式、Trace ID、错误分类、仪表盘 。**"看起来一样,跑得更好"**才是容易过会的叙事。

  5. Strangler + 业务级开关一个 endpoint 起步。用开关或 Envoy 路由前滚/回滚 。回滚要以分钟计 ,而不是开会计

  6. 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 脚本等专栏,案例驱动实战学习,点击二维码了解更多详情。

最后:

Vue 设计模式实战指南

20个前端开发者必备的响应式布局

深入React:从基础到最佳实践完整攻略

python 技巧精讲

React Hook 深入浅出

CSS技巧与案例详解

vue2与vue3技巧合集

相关推荐
MeowRain6 小时前
G1新生代跨代引用
后端
沐怡旸6 小时前
【计算机通识】认识 RESTful API
后端·restful
青鱼入云7 小时前
介绍一下Ribbon
后端·spring cloud·ribbon
himobrinehacken7 小时前
c语言宏注意事项
c语言·开发语言
一个努力的小码农7 小时前
Rust中if let与while let语法糖的工程哲学
前端·rust
雾岛听风来7 小时前
Android开发中常用高效数据结构
前端·javascript·后端
IT_陈寒7 小时前
Vue 3性能优化实战:这5个Composition API技巧让你的应用快30%
前端·人工智能·后端
自在极意功。7 小时前
Java static关键字深度解析
java·开发语言·面向对象·static
菜鸟的迷茫7 小时前
Feign 超时 + 重试引发雪崩:一次线上事故复盘
java·后端