架构师不是“写代码更少的高级开发者”,也不是专门画图的人。架构师负责识别影响系统长期结果的关键决策,组织团队 比较方案,并让已经采用的方案能够交付、验证和持续演进。
Table of contents
Open Table of contents
什么是架构
**软件架构(Software Architecture)**是系统的重要结构、这些结构之间的关系,以及团队选择它们的理由。这里的 “重要”不是由技术名词决定,而是由修改成本和业务影响决定。
例如,方法名通常可以在一次重构中修改;订单数据如何分片、服务之间如何认证,可能影响多个团队和数年数据。后两类 决策更接近架构决策。
你可以用三个问题识别架构问题:
- 这个决定会影响多少系统、团队或数据?
- 做错以后,恢复需要几小时、几个月,还是无法恢复?
- 它是否改变性能、安全、可用性、成本或交付速度?
三种角色的关注范围
角色之间没有高低分界,它们解决的问题尺度不同。小团队中,同一个人可能同时承担三种角色。
| 角色 | 主要问题 | 常见产出 | 时间范围 |
|---|---|---|---|
| 开发者 | 一个功能怎样正确实现 | 代码、测试、接口说明 | 天到周 |
| 技术负责人 | 一个模块怎样按计划交付 | 任务拆分、代码评审、风险清单 | 周到季度 |
| 架构师 | 多个系统怎样满足长期目标 | 架构方案、ADR、演进路线、治理规则 | 季度到数年 |
架构师仍然需要代码能力。你不一定编写最多代码,但必须能建立最小原型、读懂关键调用链,并判断方案能否实现。
架构师承担的五项责任
这五项责任共同组成一个闭环。缺少任何一项,设计都容易停留在文档中。
- 定义问题:把“系统要快”转换成可验证目标,例如“正常流量下,下单接口 P99 小于 300 ms”。
- 识别约束:确认预算、时间、法规、团队能力、遗留系统和数据边界。
- 比较方案:至少保留两个可行选项,说明收益、代价、风险和退出路径。
- 推动落地:与研发、测试、运维、安全和业务负责人确定责任与里程碑。
- 验证结果:用测试、指标、故障演练和业务结果检查假设,并更新决策。
P99 表示 99% 的请求耗时不超过该数值。它比平均耗时更能暴露少量慢请求对用户体验的影响。
不属于架构师的工作
明确边界能减少架构师成为团队瓶颈。架构师不应替所有人做决定,也不应绕过责任人直接修改每个模块。
- 不垄断设计:模块负责人需要拥有本模块的决策权。
- 不用个人偏好替代证据:熟悉某个框架不等于它适合当前约束。
- 不承诺无法验证的结果:没有容量模型时,不应声称系统能承受“亿级流量”。
- 不把治理变成审批队列:可自动检查的规则应放入测试和 CI。
四个常见误区
先识别误区,可以避免把学习时间花在错误目标上。
误区一:背会更多中间件就是架构师
中间件是工具。架构能力体现在你能否说明为何选择、如何验证、失败后怎样恢复,以及何时不应使用。
误区二:架构图越复杂越专业
一张图只服务一种沟通目的。给业务负责人看系统上下文,给开发者看组件和时序,给运维人员看部署和故障域。
误区三:架构师不需要参与交付
无法交付的设计没有价值。架构师要跟踪关键风险、验证原型,并在现实约束改变时更新方案。
误区四:架构一旦确定就不能改变
架构是持续演进的决策集合。业务量、团队结构和技术能力变化后,旧结论可能不再成立。
完成一次角色练习
选择你熟悉的一个功能,用 30 分钟完成下面的练习。答案不需要复杂,但必须具体。
- 写出该功能服务的用户和业务目标。
- 写出一个性能目标、一个可用性目标和一个安全约束。
- 列出两个可行方案,以及每个方案最大的风险。
- 写出验证方案所需的一条测试或一个指标。
- 标记谁负责决定、实现、验证和上线。
如果你只能描述技术组件,不能描述目标、约束和证据,就先回到问题定义,不要继续画架构图。
下一步
阅读架构能力模型与自测表,把角色要求转换成 可观察的能力证据,并建立自己的学习基线。