1. 先别急着打开画图工具,把这件事想明白
很多人问过我"架构图怎么画",我第一反应通常是反问一句:你打算给谁看?
这不是抬杠。画架构图这事儿,百分之八十的问题不是出在工具不熟、模板不够、配色难看,而是出在动手之前没想清楚这张图到底要干什么。我见过太多人打开画图软件就开始拖方框,拖到一半发现方向不对,推倒重来,一上午就没了。还有人画完一张自认为非常完整的架构图,发到群里,结果同事回复一句"这图画的是啥?"
问题不在手,在脑子。
架构图本质上是一种表达工具,它是你把脑子里的系统认知,用一种别人能看懂的方式传递出去。既然是表达,就需要先有内容,再有形式。就像写文章之前要先有提纲,画架构图之前也要先有一个"脑内的图",工具只是把你脑内那张图落到画布上而已。
如果你脑子里对系统结构本身还是一团浆糊,那不管你用多贵的工具、套多好看的模板,画出来的东西依然是浆糊。反过来,如果你对系统理解得很清楚,哪怕用Windows自带的画图,也能画出一张让别人秒懂的架构图。
所以这篇文章我不打算只跟你聊工具和模板。我要聊的是画架构图的完整思考链路:先想清楚给谁看,再决定画什么类型,然后才是怎么布局、用什么工具、怎么标注。最后我会用几个高频场景——微服务架构、大数据平台、AI智能体——把整套方法走一遍。
这对谁有用?如果你是刚开始画架构图的开发工程师、刚转岗需要写设计文档的技术人员,或者经常要做PPT汇报但没有系统学过画图方法的人,这篇文章基本就是给你准备的。如果你已经是老手,也可以跳着看看后面的踩坑记录,说不定有你没注意到的细节。
2. 架构图有哪些类型?别把组织架构图当成软件架构图
关于架构图,大家搜索的时候会出现一个很有意思的现象:有人搜的是组织架构图(比如某公司、某单位的管理层级),有人搜的是系统架构图、软件架构图,还有人搜的是微服务架构图、大数据架构图。这些名字里都带"架构图"三个字,但它们要表达的东西完全不同。
这就回到第一件事:画之前先对齐语境。你拿着画系统架构图的方法去画组织架构图,肯定画不对;你拿着公司组织架构图的模板去画微服务调用关系,那就是灾难。
我这里主要讲的是技术类架构图,也就是软件、系统、平台这一类的架构图。但为了让你心里有个谱,我把几种常见的架构图类型放一起对比一下:
| 类型 | 表达的核心内容 | 典型读者 | 关键元素 |
|---|---|---|---|
| 业务架构图 | 业务流程、角色、业务模块 | 产品、业务方、管理层 | 角色、流程节点、单据/数据流 |
| 组织架构图 | 组织层级、汇报关系 | 管理层、HR | 部门/岗位框、上下级连线 |
| 系统/应用架构图 | 系统模块、服务划分、依赖关系 | 开发、测试、架构师 | 模块框、依赖线、调用箭头 |
| 部署架构图 | 服务器、网络、容器、节点分布 | 运维、SRE、DevOps | 主机/容器、网络分区、负载均衡 |
| 数据架构图 | 数据流向、存储、处理链路 | 数据工程师、后端 | 数据源、存储、处理节点、数据线 |
这些图之间不是互斥的,一个系统可以同时有系统架构图、部署架构图和数据架构图,它们是从不同视角看同一个系统。真正的高手不是把所有这些视角塞进一张图里,而是知道每张图该画什么、该藏什么。
我记得有一次评审会上,有人把系统架构图、部署架构图和时序图揉成一张巨图,打印出来字都看不清。当时评审组长只说了一句话:"这图我数了一下,有四十多个框,六十多条线,你们谁能五分钟之内给我讲清楚它是干嘛的?"全场沉默。
这就是典型的一张图想干所有事,结果一件事都没干成。
所以在动手之前,务必先问自己一个问题:这张图是给谁看的,希望他看完之后做什么?是让领导确认技术选型方向?是让新同事知道系统有什么模块?是让运维知道服务部署在哪台机器上?不同的答案,对应的图完全不一样。
3. 一张架构图的五大构成要素,以及最容易翻车的地方
3.1 框和层级:先分清楚"层"再画框
画架构图最基础的元素就是"框"。但框不是随便放的,框的位置本身就传达信息。
最常见的结构是分层。所谓分层,就是把系统按职责从纵向上切开,比如经典的四层结构:接入层、应用层、数据层、基础设施层。每一层是一个或多个框,层与层之间用横线或大片留白隔开。
这里有一个非常重要的细节:层与层的顺序要符合调用方向。比如用户请求从上往下走,那你画图的时候接入层就必须在顶部,数据层在底部。反过来,如果依赖关系是自下而上的,那底层模块画在下方就对了。这个"方向感"是很多人不重视、但看的人非常敏感的东西。
另外,同一层内的框要水平对齐,不同层的框不要穿插。我看到过一张图,应用层的服务框跑到了数据层下面,看的人得靠连线猜归属,体验极差。对齐是架构图美感的底线,不管是左对齐、居中对齐还是网格对齐,至少要让人第一眼能看出"这是一个整体"。
3.2 箭头不是装饰:方向、实线、虚线、颜色各有含义
很多人画架构图时把箭头当装饰,随手一拉,完全不去想箭头的方向代表什么。这是架构图里最容易被忽略、也最影响理解的问题。
箭头方向在技术架构图里通常代表依赖方向或调用方向,而且同一个图里只能有一种约定。比如你约定"箭头从调用方指向被调用方",那全图所有箭头都得遵守这个约定。最怕的是有人一半画调用方向,一半画数据流向,读者看的时候脑子要不停地切换,非常累。
我自己的习惯是:
- 实线箭头:表示同步调用或强依赖,比如服务A调服务B的接口
- 虚线箭头:表示异步通知、消息事件或弱依赖,比如服务A发消息到MQ,MQ异步推给服务B
- 无箭头连线:表示静态配置关系或关联关系,比如配置中心管理某服务的配置
颜色也是语义的一部分。我建议同一个图里,颜色不要超过三种:一种表示层的底色(比如统一用浅灰),一种表示高亮重点模块(比如你这次要重点讲的那一个服务),一种表示异常或特殊状态(比如正在重构的模块)。颜色一旦复杂,读者就会开始纠结"这个颜色是不是有什么特殊含义",反而分散注意力。
3.3 最小信息量原则:不是把所有细节都放上去
画架构图最大的坑,就是什么都想往图上放。
你辛辛苦苦写的代码、做的模块划分,你觉得每一个细节都值得展示,于是把所有服务、所有表、所有配置项全部铺到图上。结果就是图上一团乱麻,谁也不愿意看。
正确的做法是只放这个视角下需要出现的东西。如果你是画系统架构图给新同事介绍模块划分,那只需要画出服务名、服务之间的调用关系、关键中间件,不需要画出数据库里的每一张表。如果你是画部署架构图,那核心是机器、网络、端口,而不是服务内部的类结构。
这里有一个很实用的判断标准:如果删掉这个框,看图的人会不会产生误解?如果不会,那就删掉。直到你删到"不能再删"为止,架构图的表达效率才是最高的。
提示:一张架构图的信息密度,应该控制在"一屏看完,30秒能讲清楚主线"的程度。超过这个密度,要么拆分视图,要么精简内容。
4. 实操走一遍:从空白画布到一张合格的系统架构图
前面讲了很多原则,现在我用一个实际的例子,把完整流程走一遍。
背景是这样的:有一个电商后台系统,包含用户服务、订单服务、商品服务、支付服务四个核心微服务,服务间通过HTTP调用,订单和支付之间通过MQ做异步解耦,所有服务注册到Nacos,配置放在Nacos配置中心,数据库用MySQL,缓存用Redis,前端通过网关统一接入。现在需要画一张"微服务系统架构图"。
4.1 确认读者与目标:你的图是给"谁"看的
这一步虽然不产生任何图形,但它决定了整张图的取舍。
假设这张图是给"刚入职的后端工程师"看的,目标是让他快速了解系统有哪些服务、服务之间怎么调用、数据存在哪里。那这张图的核心就是服务划分 + 服务间关系,不需要画出具体的表结构,也不需要画出K8s集群里的每个Pod。
假设这张图是给"运维同学"看的,目标是让他知道服务部署了哪些节点、端口、网络如何打通。那这张图核心就是部署拓扑,服务的逻辑划分反而是次要的。
同一个系统,两种目标,画出来的是两张完全不同的图。
4.2 列出模块清单:先写文字,再画框
在拖第一个框之前,先在纸上(或文档里)把要画的模块列出来。
我通常会分成三组:
- 接入层:网关
- 应用层:用户服务、订单服务、商品服务、支付服务
- 数据层:MySQL、Redis、MQ
中间件单独列出来,看它属于哪个层:Nacos属于基础设施/注册中心,MQ属于应用层与数据层之间的消息通道。画的时候可以把Nacos放在应用层侧边,用虚线表示"注册与配置关系"。
这个清单列完之后,其实架构图的基本骨架就已经出来了:三层结构,每层有哪几个框,清清楚楚。
4.3 从草稿到成图:不要一上来就用工具
这一步非常关键,但我发现很少有人这么做:先用纸笔画一遍。
纸笔画草图有三个好处:第一,纸笔没有格式负担,你可以随意写写画画,不会陷入"对齐格子"这种细节;第二,草图阶段你可以快速调整布局,把模块的位置理顺了再上工具,效率反而更高;第三,纸笔的尺幅天然约束你的信息量,逼着你想清楚什么该画、什么不该画。
草图只需要画到能看清"哪几个框在一层、箭头怎么连"即可。等你把布局调整到舒服了,再打开工具,照着草图"誊写"一遍,半小时就能出图。很多人是一上来就打开工具,拖了删、删了拖,半天时间都在跟对齐做斗争,这就是典型的流程不对。
4.4 字体、配色与导出:这些细节决定了别人愿不愿意看
图的内容对了,剩下就是"体面"的问题。
我的经验是:字体统一、字号分层、配色克制。
- 字体:统一用一种无衬线字体(比如PingFang SC、微软雅黑、Arial),框内用普通字重,图标题和层名称用加粗
- 字号:层名称用14~16号,模块框内名称用12~14号,备注说明用10~11号。全图最多三级字号,不要出现第N种字号
- 配色:层底色用低饱和度的浅色(浅灰、浅蓝、浅绿),模块框用白色底+深色边框,重点模块用强调色(比如橙色边框)。同一个层内的模块,底色务必一致,不要每个模块一个颜色
- 导出:尽量导出SVG或PDF,保证放大不模糊。如果必须贴到文档里,导出PNG时把分辨率拉到2x以上
这些细节单独看都不起眼,但合在一起,直接影响别人看图的耐心。我见过不少内容很扎实的图,就因为字体难看或者配色花哨,在评审会上被领导一句"这图看着不专业"给否了。
5. 工具怎么选:别在工具上内耗
工具这块,我只说一句核心观点:工具是手段,不是目的。
我见过很多人在选工具这件事上纠结到天荒地老,今天听说A工具好,明天听B工具香,画图本身没花多少时间,全用来折腾工具了。真没必要。
5.1 主流绘图工具对比
我把市面上常用的画架构图工具做了一张对比表,你可以直接按场景选:
| 工具 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| draw.io(diagrams.net) | 通用架构图 | 免费、开源、支持本地文件 | 界面朴素,协作弱 |
| Excalidraw | 草图、快速示意 | 手写风格、上手极快 | 不适合严谨规范图 |
| ProcessOn | 国内团队协作 | 模板多、中文友好 | 免费版有数量限制 |
| PlantUML | 代码生成图 | 适合放代码仓库、版本管理 | 学习曲线,样式受限 |
| Mermaid | Markdown内嵌图 | 与文档同源、极轻量 | 复杂布局画不了 |
| Visio | 企业规范图 | 功能全、老牌 | 贵、笨重、协作差 |
| Figma/即时设计 | UI稿级精细图 | 可做出很精致的图 | 不适合快速画草图,偏重 |
如果让我给一句话建议:个人画图用draw.io,快速示意用Excalidraw,团队协作国内用ProcessOn,要嵌在代码仓库里用Mermaid或PlantUML。
5.2 代码类绘图工具到底适不适合画架构图
这里多说两句Mermaid和PlantUML这类"写代码画图"的工具。它们在开发圈子里有一定声量,但我的真实体验是:适合画简单的流程图和时序图,画复杂架构图非常吃力。
为什么?因为架构图的核心是"布局"。你希望"用户服务"在左上角、"订单服务"在右边、"MQ"在中间下方,这种精确的位置控制在代码类工具里实现起来非常痛苦。而布局恰恰是架构图表达的重要维度——就像前面说的,分层关系靠位置就传达了一大半。
那代码类工具就没有用了吗?不是。它的价值在于可以作为文档的一部分存在,因为图和代码在同一个Markdown文件里,改起来方便,不会出现"图已经更新了但文档里还是旧图"的情况。我一般只会在README里用Mermaid画非常简单的系统关系图,正式的架构评审还是会用draw.io。
所以你要认清工具的使用场景边界:临时说明用Mermaid,正式输出用可视化工具。两条腿走路,别拿一种工具解决所有问题。
6. 三种高频场景的实战画法:微服务、大数据、AI智能体
6.1 微服务架构图怎么画:别画成一张蜘蛛网
微服务架构图是出现频率最高、翻车率也最高的图型。主要原因在于:微服务一多,服务间互相调用,画出来就像一张蜘蛛网,线绕来绕去,根本看不清。
画微服务架构图,我建议你用"分层 + 入口 + 关键链路"的框架:
- 第一层:接入层(网关、负载均衡、前端)
- 第二层:服务层(核心微服务)
- 第三层:中间件层(注册中心、配置中心、消息队列)
- 第四层:数据层(数据库、缓存、对象存储)
服务之间的调用关系,只画关键链路,不要把所有调用都画出来。比如订单服务和支付服务是核心链路,必须画;但用户服务调了一个很边缘的短信服务,且当前讨论不涉及,可以不画。不是省略事实,而是控制信息密度。
另外,服务间的箭头从调用方指向被调用方,这一点要全图统一。注册中心、配置中心与各个服务之间的关系用虚线表示,因为那是"注册/配置关系",不是业务调用关系。这两种关系混在一张图里时,务必用线条样式区分开。
6.2 大数据架构图怎么画:跟着数据流走
大数据平台架构图的核心不是"模块关系",而是数据流向。
画大数据架构图,先梳理数据从哪来、经过什么处理、最终到哪里去。通常可以按这样的链路来画:
- 数据源层:业务数据库、日志、埋点数据
- 采集层:CDC、日志采集、消息队列Kafka
- 计算层:实时计算(Flink)、离线计算(Spark/Hive)
- 存储层:数仓、数据湖、OLAP引擎
- 应用层:报表、大屏、数据接口、机器学习平台
画的时候,主链路用粗实线箭头从数据源指向最终应用,处理节点在主链路上,旁边可以画辅助系统(调度系统、元数据管理、权限管理),用浅色或者独立区域表示。
大数据架构图最忌讳的是一上来就画一堆组件(Hadoop、Spark、Flink、Kafka、Hive、HBase、ClickHouse全堆上去),组件之间的数据流没有主线,图显得很大,但看的人完全抓不住重点。正确做法是:主线先画出来,辅助组件按需要补充,除非这张图本身就是为了展示全量技术栈。
6.3 AI智能体功能架构图怎么画:按"能力模块"组织
这两年AI智能体火起来之后,"智能体功能架构图"变成了高频词。这类架构图跟传统系统架构图不太一样,它更偏"功能"而不是"部署",所以画法上也有些区别。
画智能体功能架构图,我建议按以下分层来组织:
- 交互层:用户输入、多模态接入(文本/语音/图片)
- 能力层:意图识别、上下文管理、工具调用(Function Call)、记忆模块、知识库检索
- 模型层:主模型、微调模型、多模型路由
- 基础层:向量数据库、外部API、工具集、日志追踪
智能体架构图的关键在于表达"能力的组合关系",而不是依赖关系。比如"记忆模块"和"知识库检索"都会影响"上下文管理",这种关系用虚线箭头表示"影响/读取"会比实线调用更贴切。另外,智能体是一个新型系统,画图时不要死守传统三层结构,按功能域划分区块往往更清晰。
7. 常见问题与排查技巧实录:画架构图最容易踩的坑
7.1 问题速查表
我梳理了一下这些年踩过的、以及帮别人review图时看到的高频问题,整理成一张排查表:
| 问题现象 | 根因 | 解决方案 |
|---|---|---|
| 别人看完不知道重点在哪 | 没有主线,所有模块同等强调 | 用颜色或加粗强调1~2个核心模块 |
| 图上全是交叉线 | 布局没规划,框的位置不合理 | 先分层,层内左右排布,跨层连线尽量走两侧 |
| 箭头方向看不懂 | 同一张图混用了多种方向约定 | 统一约定"箭头从调用方指向被调用方" |
| 图和PPT文字对不上 | 画图时没和文档同步 | 图定稿前先对照文档确认术语一致 |
| 图一放大就糊 | 导出的位图分辨率不足 | 导出SVG,或PNG至少2x |
| 中文字体显示异常 | 工具不支持中文字体 | 统一用系统字体,避免特殊字体 |
| 层与层之间归属不清 | 框的位置没有对齐 | 同一层模块严格水平对齐,层间留白 |
| 把部署细节画进了业务图 | 没有区分视图层级 | 先明确图类型,部署细节另开一张部署图 |
| 服务名写简称别人看不懂 | 没有把术语对齐 | 第一次出现写全称并括注简称 |
| 一张图画了50个框 | 没有做信息裁剪 | 按"能不能删"逐框审查,删到不能再删 |
这张表你可以直接打印出来,画图之前扫一遍,基本能避开80%的常见问题。
7.2 几个我记了很久的教训
最后分享几个偏个人经验的东西。
教训一:画完图之后,一定找一个人"过一遍"。以前我画完图就直接发出去,后来发现"自己看着很顺"的图,别人看完全是另一个理解。我现在习惯把图发给一个不太了解这个系统的人,让他讲一遍他看到了什么。如果他讲的和你想要表达的意思差了十万八千里,这图多半得改。这是成本最低的评审方式。
教训二:批量画图之前,先定好"图层规范"。如果你要为一个系统画一组架构图(系统架构图、部署架构图、数据架构图),一定要先统一规范:同一种颜色代表什么、同一个服务在每张图里用什么表达方式、字体字号如何统一。否则你会发现,三张图各画各的,放在一起就像三个不同人画的。
教训三:别为了美观牺牲信息准确性。我见过一些画得很好看的架构图,颜色协调、排版精美,但仔细一看:服务A明明调用服务B,箭头上却写着"HTTP"而且方向画反了。这样的图再好看也是废图。架构图不是海报,"准确"永远排在"美观"前面。
教训四:关键依赖不要画成"一条线带过"。有时候为了图面简洁,我会把"订单服务依赖支付服务、依赖用户服务、依赖MQ"画成一根总线和多个分支,后来发现这样会让新来的同事误以为这三个依赖是同一种性质。现在我会在关键依赖线上加简短的注释,比如标上"HTTP同步"、"MQ异步",用几个字把依赖性质说清楚。这个细节在评审时非常加分,因为别人一眼就能看出调用链路上的"同步阻塞点"和"异步解耦点"在哪里。
我在实际画图过程中还有一个习惯:每张图都留一个版本号和日期,放在图的右下角。架构图是活的,系统一迭代图就要更新,没有版本管理的架构图,时间一长就会变成"薛定谔的图"——没人知道它画的是现在的系统还是三个月前的系统。加上时间和版本号,至少能让看的人有个判断依据。
这个习惯救过我不少次。有一次用户反馈某个模块已经没有了我还画在上面,我翻了一下版本记录,发现是三个月前的图一直没更新。从那以后,凡是项目里要长期维护的架构图,我都会在图的角落写上"最后更新时间",每次更新时顺手改一下。别小看这一行字,它能帮你避免很多"图上画着有,代码里已经没了"的尴尬。