架构的终极使命,是让所有故事都不发生

80%的系统死在过度设计,不是死在性能瓶颈。真正的好架构不是最炫的那个,而是最无聊的那个——因为它让所有'事故'都变成了'无事发生'。

一场选型会的典型剧本

会议室里,PPT 翻到第 17 页,架构图已经画到了第四层。

微服务拆分方案、事件驱动总线、CQRS + Event Sourcing、Service Mesh 全栈治理——每多一个组件,在场的人就多兴奋一分。技术负责人激情四射,仿佛不是在搭系统,而是在指挥一场交响乐。

三年后回头看,活下来的系统往往是最无聊的那套:单体应用、关系型数据库、同步调用。

这不是段子。这是过去十年里,反复上演的一幕。

80% 的系统,死在过度设计

先厘清一个事实:绝大多数项目不是死于性能瓶颈,而是死于复杂度失控。

过度设计的典型症状:

症状 表面原因 真实原因
新人入职三个月还不能独立提交代码 业务复杂 架构自嗨,分层过多
一次发布要改六个服务 微服务拆分 边界划分失败,拆了等于没拆
排查一个问题要跳五个中间件 可观测性 引入的组件比业务逻辑还多
系统跑了一年没人敢动 核心链路复杂 只有创始人能解释的设计

业务根本不需要这些。

日活不到十万的系统,用 Kafka 做消息总线,相当于用高铁送外卖。数据量不到千万级就上 ClickHouse,相当于买个仓库只放一双鞋。

不是说这些技术不好,是业务阶段不配。

无聊架构的三条铁律

铁律一:新人第一天就能看懂

真正的高手搭出来的架构,有一个朴素的标准——新人入职第一天就能看懂代码结构

没有炫技的分层,没有自创的中间件,没有只有创始人能解释的部署拓扑。请求从哪进来,数据存到哪,业务逻辑在哪,一目了然。

反观那些"高大上"的架构:

  • 一个用户注册请求,经过 API Gateway → 用户服务 → 事件总线 → 通知服务 → 邮件 Worker → 审计日志 Collector,六跳。
  • 出了问题?你得先搞懂哪一跳出了问题,然后再搞懂为什么那一跳会出问题。

有句话说得好:代码是写给人看的,顺便让机器执行。架构也一样。

铁律二:无聊意味着可预测

无聊不是贬义词,在工程领域它是最高赞美。

可预测意味着:

  • 输入 A,一定得到输出 B
  • 出了问题,能在五分钟内定位
  • 凌晨三点,不会被告警叫醒

那些"有趣"的架构呢?异步事件满天飞,数据最终一致但不保证顺序,重试机制叠了三层还是偶尔丢消息。每次出问题都像在破案,而且是那种没有监控录像的悬案。

凌晨三点的告警,是对架构最真实的审判。

铁律三:最好的架构是隐形的

一个好的架构不会出现在技术分享会上,不会成为晋升答辩的亮点,不会写进年终总结的"技术突破"那一栏。

但它让团队三年没出过 P0 事故。

“有趣"架构 “无聊"架构
技术分享会的主角 从不上台
晋升答辩的核心亮点 写不出技术突破
出了问题全员排查 出了问题五分钟修复
核心人离职后无人敢动 任何人接手都能跑
三年后开始还技术债 三年后还是那套代码

三个血泪教训

教训一:微服务拆得太早

某创业团队,日活三千,拆了十二个微服务。每个服务独立部署、独立数据库、独立监控。听起来很规范。

结果呢?

  • 一次下单操作要调用四个服务,延迟从 200ms 变成 1.2s
  • 数据库事务变成了分布式事务,Saga 模式写了一千行补偿代码
  • 团队只有六个人,每人要维护两三个服务,精力严重分散

六个人用十二个微服务,不是架构先进,是给自己找活干。

后来全部合并回单体,用模块化分包的方式组织代码。上线速度快了三倍,Bug 少了七成。

教训二:消息队列滥用

一个内部管理系统,日操作量不到一万。架构师引入了 Kafka 做事件驱动。

“解耦!异步!削峰!“选型会上说得很美。

实际上呢?系统从来没有遇到过需要削的峰,从来没有超过 QPS 500 的并发。Kafka 的三个 Broker 常年 CPU 使用率 2%,消息积压为零。

但引入的代价是实实在在的:

  • 消息丢失了要排查 Consumer Group 的 Offset
  • 消息重复了要做幂等处理
  • 消息顺序乱了要加排序逻辑

为了解决一个不存在的问题,引入了三个真实的问题。

教训三:中台化陷阱

某公司花一年搭数据中台,接了八条业务线。理想很丰满:统一口径、统一指标、统一服务。

现实很骨感:

  • 每条业务线的指标定义都不一样,统一不了
  • 中台团队响应速度跟不上业务节奏,业务线开始绕过中台自己搞
  • 中台变成了"瓶颈台”,所有人的请求都排队等它处理

一年后,中台团队从 30 人缩到 5 人,维护一个谁都不用的统一报表系统。

什么时候该用"有趣"的架构?

当然,不是说永远不要用复杂架构。关键判断标准很简单:

当你不用它就真的扛不住的时候。

场景 该用什么 不该用什么
日活 < 10万 单体 + 关系型数据库 微服务 + 分布式数据库
日活 10万-500万 模块化单体或粗粒度服务 细粒度微服务 + Service Mesh
日活 > 500万 微服务 + 消息队列 + 分库分表 继续单体硬扛
峰值 QPS < 1000 同步调用 事件驱动 + 异步补偿
数据量 < 1亿条 MySQL / PostgreSQL ClickHouse / TiDB

架构的复杂度应该跟着业务的复杂度长,而不是跟着技术人的野心长。

一个反直觉的真相

技术人最容易犯的错误,是把架构当成了作品。

作品要表达自我,要展示能力,要让同行觉得"这哥们水平真高”。但架构不是艺术品,它是基础设施。基础设施的最高境界是——你根本意识不到它的存在

你每天走在平坦的马路上,不会觉得路面设计有多厉害。但如果路上每隔十米就有一个减速带、一个环岛、一个立交桥,你会疯掉。

架构也是如此。好的架构就是那条平坦的马路,让你把全部注意力放在目的地上,而不是路上。

把精力留给真正值得兴奋的地方

选无聊的架构,不是因为技术人不应该有追求。而是因为技术人最大的追求,应该是解决真正的业务问题。

  • 用户的留存率为什么在下降?
  • 新功能上线两周了,使用率不到 10%?
  • 竞品的某个功能为什么做得比你好?

这些问题,比 CQRS 怎么实现、Service Mesh 怎么配置、分布式事务怎么补偿——重要一万倍

架构的终极使命,不是让技术人兴奋,而是让所有故事都不发生。没有故障、没有事故、没有凌晨三点的夺命连环 call。

然后你终于可以安心地想一些真正重要的事。

广告
广告位预留中 (728x90)

📚 关注公众号,免费获取技术材料

扫码关注公众号,回复「资料」领取:

  • 📘 企业架构设计模板
  • 📗 数据治理实施指南
  • 📙 工业软件技术白皮书
公众号二维码

长按或扫描二维码