做了五年架构师之后,我逐渐意识到一个事实:技术上的挑战往往不是最难的部分。真正困难的是如何让一个团队对「什么是好的架构」达成共识。这篇文章尝试从系统论和复杂性科学的角度,重新审视架构师的工作方式。
架构师不是高级程序员
很多公司在晋升到「架构师」这个职级时,默认的评判标准还是技术深度:你对某个领域的源码理解有多深?你能不能设计出高并发的系统?你熟不熟悉各种中间件?
这些能力当然重要,但它们描述的是「高级工程师」,不是「架构师」。
一个高级工程师解决的问题是:怎么把这个功能做好?
一个架构师解决的问题是:这个系统应该长什么样?为什么?
两者的区别在于:工程师在约束内寻找最优解,架构师定义约束本身。
工程师思维:
"我们需要一个消息队列来解耦。Kafka 和 RocketMQ 哪个更好?"
→ 在已知选项中选择最优解
架构师思维:
"我们真的需要消息队列吗?如果用事件溯源,是否可以从根本上消除对 MQ 的依赖?"
→ 重新定义问题和约束
系统是一个复杂自适应系统(CAS)
复杂自适应系统(Complex Adaptive System, CAS)是圣塔菲研究所的核心研究对象。一个软件系统——包括它的代码、基础设施、开发团队、用户——本质上就是一个 CAS。
CAS 的四个核心特征:
1. 由大量自主主体组成
主体:微服务、开发者、团队、用户
每个主体有自己的目标和行为规则
2. 主体之间相互作用
服务之间的 API 调用
团队之间的沟通协调
用户与系统的交互
3. 涌现(Emergence)
宏观行为无法从微观行为简单推导
例:每个服务都是高可用的,但整个系统却可能因为级联故障而宕机
4. 自适应(Adaptation)
系统会根据环境变化调整自身行为
例:自动扩缩容、熔断降级、团队根据事故复盘调整流程
理解了 CAS 的特性,就会明白为什么架构设计不能是「自上而下的完全规划」:
-
涌现不可预测:你无法预知所有微服务组合在一起后会产生什么样的宏观行为。这就是为什么混沌工程(Chaos Engineering)如此重要——你需要在生产环境中主动注入故障,观察系统的涌现行为。
-
过度控制会扼杀适应性:如果你把每一个服务的实现细节都规定死了,团队就失去了根据实际情况做调整的能力。好的架构应该定义边界和接口,而不是规定实现。
康威定律的工程解读
康威定律:
"设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。"
—— Melvin Conway, 1967
这不是一句口号,而是一个被反复验证的工程事实。
反例 1:单体团队做微服务
组织架构:一个 50 人的大团队,所有人向同一个 leader 汇报
技术架构:虽然拆分了 20 个微服务,但因为沟通无障碍,服务之间的耦合越来越多
结果:分布式单体(Distributed Monolith)——有微服务的所有缺点,没有微服务的任何优点
反例 2:跨团队共享数据库
组织架构:三个独立的业务团队
技术架构:三个团队共用同一个数据库
结果:任何一个团队的 Schema 变更都会影响其他团队,沟通成本随团队数量指数增长
正确的做法是让组织架构和技术架构对齐: