随笔 · 架构
做了五年后端,关于系统设计我学到的五件事
技术会过时,框架会换,但有些东西五年里一次次被验证。它们不是具体的"怎么写", 而是怎么想。下面五件,是真正塑造我做系统的方式的原则。
1先搞清楚"现在的问题是什么",再谈方案
我见过太多"提前焦虑":系统才日活几百,就按百万 QPS 设计,引入一堆中间件,结果维护成本把自己压垮。
💡 原则:架构跟随痛点演进,而非预测。当前不痛,就别为想象中的未来买单。等到真实瓶颈出现,再有的放矢地解决——那时你已有数据、有上下文,方案会准得多。
2简单能跑,胜过聪明但脆弱
刚入行喜欢炫技:一个接口塞满设计模式、用最"高级"的并发模型。后来才懂,能让人一眼看懂的代码,故障率最低。
- 少即是多:能同步就别异步,能单体就别分布式;
- 显式优于隐式: Magic 越少,Debug 越轻松;
- 可读性不是"给新手看的",是"给三个月后的自己看的"。
// 与其写一段"巧妙"的链式反射,不如: if (order == null) return emptyResult(); // 一眼看懂
3任何依赖都可能挂,设计要假设失败
单体时代,调用失败≈写个 bug。分布式时代,网络、下游、数据库随时会抽风,失败是常态而非异常。
- 超时:不设置超时的调用,会把线程池拖死;
- 重试:必须幂等,否则重试变灾难;
- 降级:依赖不可用时,主流程还能喘气;
- 隔离:一个慢下游不该拖垮整个线程池(舱壁模式)。
💡 把"它会失败"写进设计,而不是等告警响了再补。容错不是事后补救,是默认前提。
4可观测性不是奢侈品,是地基
没有日志、没有指标、没有链路,系统就是个黑盒。出了事只能靠"猜"。
一次线上抖动,我靠 traceId 串起全链路 + P99 指标,10 分钟定位到一个被忽视的慢 SQL;而三个月前同样的问题,我们查了整整一下午。
- 日志要能检索、带上下文(traceId、关键参数);
- 指标要有关键 SLO(延迟、错误率、饱和度);
- 告警要"能行动",而非"狼来了"。
5沟通成本随团队规模指数上升
技术问题的尽头,常常是人的问题。接口契约没对齐、需求理解有偏差、owner 不清,比代码 bug 更贵。
- 用文档和契约降低口头对不齐的风险(API 先定义、Schema 先行);
- 清楚的边界与 owner,比完美的架构更重要;
- 让协作接口"显式化":谁调用、谁负责、失败谁兜底,写下来。
6写在最后
五年里换过语言、框架、公司,但这五条几乎没变:跟着痛点走、宁可简单、假设会失败、把系统照亮、把人理顺。 技术会老,这些思维方式不会。与其追下一个新框架,不如先把这几件做扎实——它们会陪你走更远的路。
© 2026 JokerChou's Blog · 用 ❤️ 与 ☕ 制作 · 返回博客首页