不会画架构图被领导嫌弃?从零开始画出专业级系统架构图的完整指南
场景:周一早会,你打开PPT展示系统架构图,领导皱着眉头说"这图画的是啥?重画。"——如果你经历过这种社死时刻,这篇文章就是写给你的。
一、先搞清楚:架构图不是画给技术人看的
很多人画架构图的第一个错误,就是站在技术视角自嗨。
你画了一堆 Kafka 集群、Redis 哨兵模式、Nginx 负载均衡,技术同事看了频频点头,但领导和业务方一脸懵——他们只想知道:这个系统解决了什么问题?花了多少钱?有没有风险?
架构图的第一个原则:先确定读者。
| 读者类型 | 他们想看什么 | 你该画什么 |
|---|---|---|
| 技术负责人 | 系统边界、技术选型、数据流向 | 完整技术架构,含中间件和基础设施 |
| 业务方/产品 | 业务能力、功能边界 | 业务架构图,按业务域划分 |
| 领导/老板 | 投入产出、风险点、核心能力 | 精简版,突出核心链路和关键指标 |
| 新入职同事 | 快速理解系统全貌 | 分层架构,从上到下逐层展开 |
一个实战建议:同一套系统,准备三张图——给领导的看"价值",给技术的看"细节",给新人的看"全景"。别试图用一张图讨好所有人。
二、架构图的标准分层结构
一张专业级架构图,通常包含 4-5 层,从上到下依次是:
分层时的三个坑
坑1:层次太多。 超过5层,图就没人看了。如果系统确实复杂,拆成多张图,而不是一张图塞满。
坑2:跨层连线。 接入层直接连数据层?说明你的应用层形同虚设。每一条跨层连线都意味着架构设计有漏洞。
坑3:层次混乱。 把消息队列放在数据层还是应用层?取决于它的角色——如果是业务逻辑的一部分(如订单异步处理),放应用层;如果是纯基础设施(如日志收集),放基础设施层。
三、形状和连线:别乱用,它们有固定语义
架构图里每个形状都有明确含义,乱用会让内行一眼看出你不专业。
3.1 常用形状语义
| 形状 | 含义 | 使用场景 |
|---|---|---|
| 矩形 | 模块/服务/组件 | 微服务、功能模块 |
| 圆角矩形 | 外部系统/第三方 | 支付网关、短信平台 |
| 圆柱体 | 数据存储 | 数据库、缓存、消息队列 |
| 菱形 | 判断/决策节点 | 流程图中的分支 |
| 云形 | 外部网络/互联网 | 用户接入、CDN |
| 箭头线 | 数据流向/调用关系 | A调用B,数据从A到B |
| 虚线 | 异步/间接关系 | 事件通知、异步消息 |
| 双向箭头 | 双向同步 | 数据库主从同步 |
3.2 连线规范
最重要的一条:连线不是装饰品,每一条线代表一个承诺。
- 同步调用用实线箭头
- 异步消息用虚线箭头
- 双向同步用双向实线
- 不要画交叉线——如果两条线交叉,说明布局有问题,重新排列
实战技巧:画完之后,给每条线标注协议和频率(如"HTTP/REST,QPS 500"),让看图的人立刻知道这条链路的负载情况。
四、颜色规范:三色克制原则
架构图不是调色盘。颜色越多,信息越混乱。
4.1 三色法则
| 角色 | 建议颜色 | 用途 |
|---|---|---|
| 主色 | 蓝色系 | 核心业务模块、主链路 |
| 对比色 | 橙色/红色 | 异常链路、风险点、重点标注 |
| 中性色 | 灰色系 | 基础设施、辅助模块 |
为什么不用更多颜色? 因为颜色的唯一作用是控制视觉权重。你需要让读者第一眼看到核心模块,第二眼看到异常点,第三眼看到基础设施。三色足够了。
4.2 颜色使用的反面教材
- 用红色标注正常模块(读者会误以为是风险)
- 用绿色标注数据库(和实际语义冲突)
- 五颜六色像彩虹(视觉噪音,找不到重点)
- 背景用深色(打印出来全是黑块)
五、画图工具选择:在线绘制 vs 本地软件
5.1 在线画图工具推荐
| 工具 | 免费程度 | 适合画什么 | 优势 | 劣势 |
|---|---|---|---|---|
| Draw.io (diagrams.net) | 完全免费 | 架构图、流程图、网络拓扑 | 开源、无广告、支持离线 | 界面略简陋 |
| Excalidraw | 完全免费 | 手绘风格架构图、白板脑暴 | 手绘风格、适合早期讨论 | 不适合正式文档 |
| ProcessOn | 免费版够用 | 各类图表 | 中文友好、模板丰富 | 高级功能需付费 |
| 墨刀 | 免费版够用 | 产品原型、交互设计 | 组件库丰富、上手快 | 偏原型设计 |
| Figma | 免费版够用 | UI设计、高保真图表 | 协作能力强 | 学习成本较高 |
| Canva | 免费版够用 | 演示型架构图 | 模板精美、配色专业 | 不适合复杂架构 |
5.2 选工具的三个原则
- 看场景选工具:内部讨论用 Excalidraw(手绘风格降低正式感,方便修改);正式文档用 Draw.io(导出清晰、格式规范);给领导汇报用 Canva(颜值高、配色专业)。
- 看团队选工具:如果团队需要多人协作,优先选支持实时协作的(Figma、ProcessOn);如果只是个人使用,Draw.io 完全够用。
- 别迷信付费工具:90%的架构图需求,免费工具都能满足。付费工具的优势在于模板和协作,不是画图能力本身。
六、从零画一张架构图:完整实操步骤
以一个"电商订单系统"为例,手把手走一遍流程。
Step 1:列出所有模块
先在纸上或文档里列出系统涉及的所有模块:
- 用户端(APP、Web)
- API网关
- 订单服务、商品服务、用户服务、支付服务
- 消息队列(Kafka)
- MySQL(订单库、商品库、用户库)
- Redis(缓存)
- ES(搜索)
- 监控系统
Step 2:分层归类
把模块归入对应层级:
- 接入层:APP、Web、API网关
- 应用层:订单服务、商品服务、用户服务、支付服务
- 数据层:MySQL × 3、Redis、ES
- 基础设施层:Kafka、监控系统
Step 3:画框架,先摆位置
打开 Draw.io,先画4个横向分层区域,把模块摆进去。这一步不要画线,只管位置和层次。
Step 4:连线,标注关系
从上往下连:
- APP/Web → API网关(实线箭头,HTTP)
- API网关 → 各服务(实线箭头,HTTP/REST)
- 订单服务 → MySQL订单库(实线箭头,JDBC)
- 订单服务 → Kafka(虚线箭头,异步消息)
- Kafka → 支付服务(虚线箭头,异步消费)
- 各服务 → Redis(实线箭头,缓存读写)
- 各服务 → 监控系统(虚线箭头,指标上报)
Step 5:调色,控制视觉权重
- 订单服务(核心):蓝色填充
- 支付服务(风险点):橙色边框
- 其他服务:浅灰色
- 基础设施:白色+灰边
Step 6:标注关键信息
在关键连线上标注:
- 协议类型(HTTP、gRPC、MQ)
- 调用频率(QPS 500)
- 数据量级(日均10万订单)
Step 7:写一句话总结
在图的最上方或最下方写一句话:"用户下单 → 订单服务落库 → 异步通知支付 → 支付完成回调更新订单状态。核心链路3个节点,支付环节为高风险点。"
如果你写不出这句话,说明你自己都没想清楚系统全貌。
七、架构图自检清单
画完之后,用这份清单逐项检查:
- 确定了读者是谁?图的内容是否匹配读者需求?
- 层次是否在5层以内?超过的考虑拆分多张图
- 每个形状的语义是否正确?圆柱体只用于存储?
- 有没有交叉线?有的话重新排列布局
- 同步用实线,异步用虚线,双向用双箭头?
- 颜色是否在3种以内?主色/对比色/中性色是否各司其职?
- 关键链路是否标注了协议和频率?
- 能不能用一句话总结这张图的核心信息?
- 给一个不懂技术的人看,他能不能30秒内理解核心链路?
八、总结
架构图不是"画得好看"就行,它的本质是信息翻译——把复杂的系统逻辑,翻译成不同受众能快速理解的视觉语言。
记住三句话:
- 先想清楚给谁看,再动手画。
- 连线和颜色都有语义,不是装饰品。
- 如果你不能一句话总结这张图,说明你还不够理解这个系统。
好的架构图,是花10分钟想清楚,5分钟画出来。而不是花1小时画了一堆框框,最后自己都看不懂。
