全部文章

技能之锤

本文另有英文译文 · 阅读英文版 →

不用怀疑,这个结论必须来自墨尔本的程序员。(就,我怎么也得多写几篇跟我最爱的墨尔本的咖啡有关的文章)

在墨尔本,咖啡是一种信仰,是融入每日生活的必备元素。所有的咖啡馆里,咖啡师精准称量咖啡粉,微调水温与研磨度;几米之外的程序员(说的就是正在排队等咖啡的我)正对着 Grafana 仪表盘,盯着 CPU 曲线、延迟指标、线程池,就突然让我感觉,我跟咖啡师在做着同一件事:为“稳定”而偏执地打磨每一个变量。

墨尔本咖啡馆里的咖啡与工程日常

好吧,如果把一杯好咖啡比作一个高可用服务,那 SRE(Site Reliability Engineering)就是那个每天站在“萃取阈值”边缘、守护系统稳定性的咖啡师。

Espresso 是系统内核 —— 要准、要快、不能错

Espresso 与系统内核的类比

Espresso 是所有意式咖啡的基础,高温高压,25秒左右萃取出大概 30ml 的浓缩咖啡。误差超过 2 秒、气压波动、咖啡粉压实不均,都会让整杯失败。但凡你喝到的不好喝的咖啡,除了咖啡豆本身可能有的问题,基本上都是这个环节没做到位。这不就是我们平时用的服务稳定性指标吗:低延迟、高精度、无容错余地。(小知识:expresso上面那层油脂是咖啡的精华)

资深咖啡师会直接倒掉做失败的咖啡,我们也一样,在用户上报production incident之前,SRE提前介入——“手速快过事故”保住了大家奖金和用户的信任。

SRE 们不止看响应时间,更看 P99 延迟趋势、峰值偏离 和 SLA 提前报警阈值(SLO burn rate)。他们知道,等用户来“投诉”就晚了。

拿铁像微服务架构 —— 分层清晰

拿铁分层与微服务架构的类比

拿铁咖啡本身就是一个高度结构化的系统:底层是浓缩,中间是加热牛奶,顶端是奶泡。每一层都必须配比得当,温度精准,才算一杯“合格交付”。这不正是微服务架构的设计理想吗?

订单服务、支付服务、库存服务……模块拆分后的系统如同拿铁:结构清晰,但协作复杂

问题也由此而来。牛奶一旦温度不对,全杯拿铁就变得水水的;微服务系统中,某一个 API 响应超时,就可能导致整个交易链路断裂。

优秀的咖啡师在打奶泡的时候,通过手感知温度,听声音来分辨火候,不断调整位置来保证细腻的奶泡,才能得到「最佳出杯时间窗口」;成熟的 SRE 团队会在系统中配置 熔断机制(circuit breaker)请求超时控制降级策略,避免单点失败。

毕竟根据木桶理论:整个系统的稳定性,等于最脆弱那一环的抗压性。

手冲是技术债预警系统 —— 每一滴都要计算

手冲咖啡与技术债预警的类比

手冲咖啡讲究“控制力”:水温、水流速率、粉层高度、粉水比例。冲太快,萃取不足;冲太慢,风味苦涩;不稳,前调后调全乱。这不就是系统里的“技术债”呀,表面运行正常,实则处处埋雷。

程序员为了赶进度,跳过 Code Review、测试不到位、依赖版本乱用、日志难以排查……几个月后系统宕机,谁都想不起最初那笔“技术债”是怎么埋下的。这就是所谓的 Operational Latency(运维时延):你当下节省的是开发时间,但未来要花 10 倍去补救稳定性。

SRE 最怕那种“表面运行正常、埋点乱七八糟”的系统,就像喝一杯看起来正常但风味杂乱的咖啡——再喝一口只会更焦虑。

冰滴是长期稳定性的典范

冰滴(Cold Drip)或者叫冷萃,是最讲究耐心的咖啡工艺之一。用冷水慢慢萃取,时间通常 6~12 小时。每滴水流速必须恒定,否则风味偏差极大。

之前喝过一家冰滴风味惊艳的咖啡,我问他们有啥诀窍,店主说:“清洗不偷懒,校准要坚持。”

作为经常on call的程序员,我是真的理解到:真正的系统稳定,靠的从不是某一次修复或大版本优化,而是持续可观测性、指标自动校准、流程规范、基础设施健康巡检这些看起来“很无聊”的动作。

就像冰滴需要每日擦洗器具、每周换滤芯、每月测流速,SRE 也有属于他们的“仪式感”:日志审计、故障演练、容量评估、SLO 检查、Runbook 更新。

我们说平台稳定性是“工程级可靠性”,不是没有bug,而是出 bug 时能够迅速得到通知,并在用户发现前修复。稳定性,从来不是靠反应力,而是靠 慢而稳定的系统性建设

拉花 ≠ 用户体验的全部

墨尔本的咖啡师喜欢在拿铁上拉出天鹅、心形、郁金香,哪怕耗时十几秒,依旧追求完美。不过他们也很清楚:拉花再美,咖啡不好喝也是白搭。尤其是外卖的咖啡,确实不用拉花。当然了,要是我坐在店里,他们给我上来一杯没有拉花的咖啡,我可能会纠结怎么打分。拉花是墨尔本咖啡师对用户的尊重。

拉花之美与系统稳定性之间的取舍

不过我相信大家都用过看上去很美的UI,但是各种不工作,各种bug,这就像我喝到一杯拉花极美但萃取失败的拿铁,就默默的把这家店拉上了黑名单。

真正的用户体验,从来不是“美化”出来的,而是“支撑”出来的。

SRE 在系统设计中经常强调的一点是:不要只看 Happy Path(理想路径)的体验,而要先保证 Unhappy Path(异常路径)下系统也不崩。这个逻辑对于咖啡也同样适用:就风味再高级,如果温度不对、萃取偏移,拉花也救不回来。

写在最后

一杯咖啡的终极目标是让人愿意天天喝,而作为一个程序员,我知道的是:代码的终点不是技术炫技,而是能让人放心用。

所以,下次你调整参数前,不妨想想咖啡师怎么对待他的磨豆机——不是调得多花哨,而是调得够稳定。一个优秀的 SRE/程序员,不需要拉花般的炫技,但一定会在风味背后,留下可以日复一日的信赖。

小伙伴们有机会来墨尔本,我请大家喝咖啡☕️。