1. 架构的本质与常见误区
刚入行时我对"架构"这个词充满敬畏,总觉得是那些年薪百万的CTO才需要考虑的高深学问。直到自己负责的第一个系统因为设计缺陷半夜崩了三次,才真正理解架构不是挂在墙上的蓝图,而是每天在代码里呼吸的生命体。
架构最朴素的定义是"系统组件的组织结构及其相互关系",但这个教科书解释容易让人陷入三个典型误区:
- 误区一:认为架构必须宏大复杂(实际可能简单如一个Excel宏的模块划分)
- 误区二:把架构图当作架构本身(图纸只是思想的载体)
- 误区三:追求"完美架构"(所有架构都是权衡后的临时方案)
十年前我参与改造的电商订单系统就是个典型案例。原系统用单体架构硬撑了五年,高峰期经常出现"下单成功但库存未扣"的致命错误。当我们引入事件溯源架构时,不是因为它时髦,而是看中其能天然保证订单与库存的状态一致性——这就是架构解决实际问题的典型场景。
2. 架构思维的四个维度
2.1 结构维度:从代码到基础设施
好的架构像洋葱一样有清晰的分层:
- 代码层架构:包/模块的划分原则(比如按业务能力还是按技术组件)
- 应用层架构:单体/微服务/无服务等运行时形态
- 系统层架构:数据库选型、缓存策略、消息队列等组件的协作
- 物理层架构:机房部署、网络拓扑、灾备方案
以我主导设计的物联网平台为例:
- 代码层采用六边形架构隔离设备协议解析逻辑
- 应用层用微服务拆分设备管理、数据采集等业务域
- 系统层用Kafka处理设备事件洪峰
- 物理层在三个可用区部署集群
关键经验:永远从最内层开始设计,外层架构要为内层服务。见过太多团队跟风上微服务,结果连模块边界都没划清楚。
2.2 质量维度:非功能需求的博弈
架构设计本质是质量属性的权衡游戏,这张表格是我们技术评审的检查清单:
| 质量属性 | 具体指标 | 典型冲突项 |
|---|---|---|
| 可用性 | SLA 99.95% | 开发效率 |
| 性能 | 并发10000TPS | 成本 |
| 安全 | OWASP TOP10防护 | 用户体验 |
| 可维护性 | 新人上手时间≤3天 | 技术先进性 |
| 扩展性 | 业务增长10倍不改架构 | 系统复杂度 |
去年设计风控系统时,我们不得不在"实时性"和"准确性"之间妥协:完全实时的规则计算会导致超时,最终采用近实时计算+关键规则前置的混合架构。
2.3 演进维度:架构的生命周期
架构会经历三个典型阶段:
- 生存期(0-1阶段):怎么快怎么来,可能直接买SAAS
- 发展期(1-10阶段):开始引入分层、解耦等模式
- 重构期(10+阶段):架构腐化后的主动进化
最危险的是第二阶段。曾见过一个创业公司A轮后狂招工程师,每个新人都在系统里塞新模块,两年后代码成了没人能动的"屎山"。我的经验法则是:当修改一个bug平均引发两个新bug时,就该启动架构重构了。
2.4 认知维度:从模式到原则
新手架构师常犯的错误是机械套用模式:
- "我们要上中台!"(却不清楚业务共性)
- "必须用CQRS!"(其实CRUD就能满足)
- "全部容器化!"(结果连Pod网络都没搞明白)
我现在的做法是先吃透架构原则:
- 单一职责(一个模块只做一件事)
- 开闭原则(扩展开放修改关闭)
- 依赖倒置(细节依赖抽象)
- 最小惊讶(符合行业惯例)
最近评审的一个项目很有意思:团队用事件驱动架构处理订单流程,不是因为"时髦",而是发现业务方经常临时增加审批环节,事件架构能天然支持这种动态编排。
3. 架构设计的实操框架
3.1 四步设计法
我总结的架构设计工作流:
- 需求挖掘(找出真正的痛点)
- 和业务方喝咖啡比看文档更有效
- 用"五个为什么"分析法追问
- 约束分析(明确不可妥协的条件)
- 合规要求(如数据必须本地化)
- 固定技术栈(遗留系统限制)
- 模式选型(选择适合的架构风格)
- 分层架构(传统企业系统)
- 管道-过滤器(数据处理场景)
- 微内核(插件化系统)
- 验证迭代(用原型快速试错)
- 用Postman模拟关键流程
- 用混沌工程测试脆弱点
去年帮某券商改造交易系统时,我们发现原架构最大的问题不是性能,而是无法快速支持新金融产品上线。最终采用领域驱动设计划分业务上下文,配合模块化前端,使新产品上线周期从2周缩短到3天。
3.2 架构决策记录(ADR)模板
好的架构需要持续治理,这是我们团队使用的ADR模板:
# 决策标题:[简短描述] ## 状态 [提议|已采纳|已弃用] ## 背景 [问题描述、影响因素] ## 决策 [选择的方案] ## 权衡 [考虑过的其他方案及优缺点] ## 影响 [需要修改的组件、培训需求等] ## 相关决策 [其他关联的ADR]例如我们最近一个关于缓存策略的ADR:
- 背景:商品详情页访问量暴涨导致DB压力
- 决策:采用多级缓存(CDN+Redis+本地缓存)
- 权衡:考虑过纯Redis方案但担心单点故障
- 影响:需要改造商品服务接口
3.3 架构评审的红色警报
这些危险信号出现时就要警惕:
- 团队开始用"神奇补丁"(特殊条件处理代码)
- 核心表没有创建人/更新时间字段
- 日志系统不能按traceId串联请求
- 生产环境调试需要改代码配置
- 部署文档超过半年没更新
最夸张的一次经历:某系统用数据库存储过程实现了核心业务逻辑,结果DBA离职后没人敢动那些2000行的存储过程。最终我们花了三个月用领域模型重构,期间不得不保留双写机制。
4. 架构师的生存指南
4.1 技术雷达扫描法
我每季度会做技术雷达评估:
- 采用(正在使用的稳定技术)
- Spring Boot
- Redis Cluster
- 试验(小范围验证的新技术)
- GraalVM原生镜像
- 服务网格
- 暂缓(观望中的技术)
- WebAssembly后端
- 淘汰(逐步替换的旧技术)
- Struts2
- SOAP
关键是要建立评估标准:
- 社区活跃度(GitHub star趋势)
- 企业采用情况(LinkedIn招聘需求)
- 团队能力匹配度
- 与现有技术栈的整合成本
4.2 架构沟通技巧
如何让业务方理解技术决策:
- 用他们熟悉的领域打比方("数据库索引就像图书目录")
- 展示成本对比(自建vs云服务三年TCO)
- 制作可交互的原型(比PPT更有说服力)
- 预留逃生通道("如果三个月后效果不好我们回退")
最近说服CEO批准架构改造的秘诀是:用他们最关心的财务报表做类比——"现在的系统就像没有明细账的总账,查错成本越来越高"。
4.3 个人成长路径
从程序员到架构师的蜕变:
- 模块级(能设计可复用的组件)
- 系统级(掌握跨组件协作设计)
- 企业级(理解多系统治理)
- 生态级(参与行业标准制定)
每个阶段需要不同的能力:
- 初级:设计模式、UML绘图
- 中级:容量规划、故障预判
- 高级:技术战略、成本控制
- 专家:行业洞察、创新引领
我自己的转折点是负责首个百万级用户项目时,被迫��习如何用有限的服务器资源支撑突发流量。那段经历比任何架构认证都管用。