
做图这件事看着是个工具活其实更多是个思路活。我在带团队和评审方案的时候经常发现一个现象同样的系统架构有的人画出来一眼就懂有的人画出来满屏箭头和框看完更晕。差别不在工具用得熟不熟而在设计图形的人有没有一套清晰的表达逻辑。今天不聊单点软件教程我想把 diagram-design 这件事拆开从选型、结构、规范到实战把一套经过多次项目验证的图形设计方案分享出来。无论是程序员画架构图、产品经理梳理业务流程图还是测试同学画系统时序图这套方法都能直接用上。1. 内容整体设计与思路拆解1.1 为什么你的图总让人看不懂很多人画图失败不是不会用软件而是从一开始就走错了方向。最常见的问题是先把方框拖到画布上再想这个框代表什么。正确思路应该完全反过来先想清楚这张图要表达什么决策、什么流程、什么关系再动手画。比如画架构图本质是在回答三个问题系统有哪些组成部分、这些部分之间怎么通信、数据流向是怎样的。如果这三个问题没想明白画出来的架构图必然是一团乱麻。我从实际经验中总结出一个一图一问原则一张图只回答一个核心问题。如果这个问题太复杂那就拆成多张图每张图聚焦一个层面。比如微服务架构图可以拆成部署架构图、调用链路图、数据模型图三张独立图形而不是强行塞到一张图里。这里要强调一个概念diagram-design 不是简单的画框连线而是信息设计的一种。好的图是用视觉语言降低读者的认知成本。反过来差的图就是制造认知障碍。读者看图需要超过30秒还没看懂这张图就是失败的。1.2 图形设计的四个核心层级在画任何图之前我会先在脑子里过一遍这四个层级这决定了图形的最终质量。第一层是语义层也就是每个图形元素代表什么。方框代表模块箭头代表依赖方向菱形代表判断这个必须全图统一不能一会儿方框代表模块一会儿又代表数据存储。第二层是结构层也就是元素之间怎么布局。相关的东西要放在一起无关的东西要拉开距离。布局本质上是在传递哪些东西属于一个系统的信息。第三层是视觉层包括颜色、字体、图标。这一层最容易被忽视但恰恰是决定图面是否专业的关键。同一张图里颜色不要超过3种主色字体不超过2种图标风格保持一致。第四层是叙事层也就是图要引导读者按什么顺序看。人眼看图有天然顺序先看左上角再沿着对角线扫视。设计图的时候要顺应这个规律把起点放在左上角把重点放在视觉中心。1.3 从需求到图形的完整设计流程我画一张正式的设计图通常走五个步骤。第一步收集信息把相关模块、角色、规则都列出来这一步只求全面不求结构。第二步确定关系找出所有元素之间的依赖、调用、包含关系这一步可以用文字描述代替不急着画。第三步是设计布局根据关系类型选择图形类型。有层级关系用树形有流程关系用流程图有调用关系用时序图。第四步是绘制草图用简笔画在草稿纸上完成草稿这个阶段要快速迭代不要陷入工具细节。最后一步才是用工具精修完成配色、对齐、标注。有人会觉得这五个步骤太繁琐。但对于稍微复杂的图形跳过前面几步直接用工具画一定会陷入画了删、删了画的无限循环。草图阶段解决问题成本极低在工具里改一笔可能就要调整全图布局差距就在这里。2. 图形设计中的审美与规范细节2.1 配色体系搭建三色原则与色彩语义diagram-design 的配色我强烈建议执行三色原则一个主色一个辅色再加一个强调色。主色用于正常元素填充辅色用于分组背景或次要元素强调色只用于特殊情况比如异常路径、警告状态、当前高亮。我曾经画过一张分布式系统架构图一开始用了彩虹配色每个服务一个颜色结果整张图花里胡哨根本看不出哪两个服务属于同一组。后来全部改成灰度底加深蓝强调只有主链路用橙色标识整张图瞬间清晰了。色彩语义要遵循行业习惯。蓝色系代表稳定、中性适合作为主色。红色系代表错误、告警不能乱用。绿色系代表成功、正常。黄色系代表警告。如果图形涉及运行状态这些语义色必须严格遵守类交通灯的规则。实际设计表格参考配色角色推荐色值使用场景禁忌主色#4A6CF7 或 #2D3748正常模块填充、主标题不要超过2种相近色混用辅色#E2E8F0 或 #F7FAFC背景底色、分组区域避免大面积高饱和色强调色#F59E0B 或 #EF4444重点链路、异常节点一图最多2处多则无效成功/正常#10B981正常状态、健康节点不能用于异常标识失败/错误#EF4444错误状态、异常路径不能用于普通强调2.2 字体、间距与对齐细节中的专业感字体选择上中文场景推荐思源黑体或微软雅黑英文字体推荐Inter或Helvetica。避免使用花体字和衬线体做标注架构图不是设计海报清晰易读永远排在第一位。字号设置建议形成梯度体系。大标题用20到24号模块内文字用14到16号标注说明用12号。这个梯度要保持一致不能有的模块用18号有的用14号。字体层级直接反映信息层级读者看到大字就知道这个重要。间距是很多人的盲区。我见过太多图模块与模块之间距离忽远忽近看起来就像一个个孤岛。优秀的设计方案中同一层级模块之间的间距必须相等不同层级的间距要有明显差距。推荐统一使用8像素的倍数作为间距基准模块内边距8模块间距16分组间距24。这个规则让图面自带秩序感。对齐是性价比最高的美化手段。所有的框、线、文字都要保持对齐哪怕是顶对齐、居中、左对齐只要全图一致视觉质量立刻上一个档次。我的经验是画完图以后花两分钟把全图元素选中检查一遍对齐状态这比加任何装饰都有效。2.3 布局结构怎么排才顺眼且高效布局是第一眼印象也是信息结构的直观体现。最稳妥的布局方式是从上到下分层布局按入口、处理、出口的逻辑排列读者视线从上往下扫阅读流畅度最高。当图形是调用关系或依赖关系时推荐使用从左到右布局把被依赖方放在左侧调用方放在右侧箭头的方向自然指向右侧符合阅读习惯。数据流向复杂的场景用从左到右布局比从下到上直观得多。树形结构适用于组织架构和继承关系星形结构适用于一个中心节点与多个边缘节点的关系环形结构适用于状态流转这种循环逻辑。选对结构类型图形的信息传达效率能翻一倍。3. 主流工具选型解析按场景做选择3.1 轻量快速型Excalidraw 与 draw.ioExcalidraw 是我目前日常使用频率最高的工具。它的最大优势是手绘风格天然给人一种草图的心理暗示。这种风格反而适合早期方案讨论因为所有人看到手绘风格的第一反应是这个方案还可以调整而不是这已经是最终方案了。draw.io现在叫 diagrams.net则是免费开源工具里功能最全的。支持离线使用、多种格式导出、Git 集成资源库丰富不管是画架构图、流程图、ER图都能胜任。团队没有预算的情况下我首选推荐 draw.io。这两个工具都支持快捷键操作和模板市场适合快速验证想法。轻量工具的核心价值就是快速试错不要在这个阶段花费过多时间追求美观。有想法就快速画出来不合适就删掉重来效率才是重点。3.2 专业建模型PlantUML 与 MermaidPlantUML 是代码驱动图形设计的典型代表。它最大的优势是版本可控图完全由文本描述生成Git 可以追踪每一次变更非常适合团队协作中代码评审图形变更的场景。Mermaid 则是目前生态最活跃的文本转图工具兼容 Markdown 语法在 GitHub、Notion、Obsidian 中都能直接渲染。写技术文档时嵌入 Mermaid 代码块文档和图形同步维护不会出现文档改了几版但图还是旧的的尴尬。这两种工具都是以码生图的思路用代码描述图形。优点是容易维护、容易对比版本、容易复用缺点是布局由渲染引擎自动完成复杂图形无法精细排版。所以文本图形工具适合展示流程、结构不适合做高保真架构图。对比参考表工具名称适用场景学习曲线协作能力版本控制draw.io架构图、ER图、完整设计低良好可共享编辑支持 Git 集成Excalidraw快速发散、方案讨论极低良好支持实时协作需手动保存PlantUMLUML、时序图、部署图中优秀文本驱动天然支持 GitMermaidMarkdown文档、流程图低优秀天然支持 GitFigma高保真UI、原型图中高极强设计系统完善自带版本历史3.3 协作展示型Figma 与在线白板工具Figma 已经不仅仅是 UI 设计工具了用它来绘制高保真架构图也是一个很好的选择。组件化设计让模块可以复用一套组件改样式全图同步更新适合对视觉有高要求的对外汇报场景。在线协作白板工具如 Miro、BoardMix、tldraw 等则适合远程讨论场景。团队成员可以在同一个画布上自由书写、拖拽快速搭建流程草稿。这类工具最大的价值是多人同步操作而不是图形本身的美观度。如果你在选型时拿不准主意我给你一个经验法则单人快速验证用 Excalidraw团队协作和文档集成用 Mermaid 或 draw.io对外高保真展示用 Figma远程头脑风暴用白板工具。按场景选工具而不是按工具定场景。4. 实操过程与核心环节实现4.1 从零开始绘制一张清晰的系统架构图徒手画一张中等复杂度的系统架构图我来完整演示一遍设计过程。假设我们要画一个用户登录认证体系的架构图这个场景够典型覆盖面从浏览器到后端服务。第一步还是收集元素。列出所有参与者用户、浏览器、Nginx、认证服务、用户服务、数据库、Redis。然后确定它们之间关系用户发起请求到浏览器浏览器请求NginxNginx转发到认证服务认证服务读取用户服务的数据用户服务查询数据库并写入Redis。我习惯先画一张无样式信息图只用黑白方框和箭头表示逻辑关系。这个时候别管美观只关注逻辑分支是否闭合调用链是否完整。确认无误以后再来设计布局。布局上采用三层结构顶层放客户端层中间放接入层底层放服务层与数据层。每层内部间距一致层与层之间留出足够空间放置箭头。这个设计和系统架构的自然分层完全对应看图的人一下子就能理解整个链路。配色上客户端层用浅蓝色填充表示入口接入层用灰色系表示基础设施服务层和数据库用深蓝色系表示核心业务。Redis、MySQL这类存储组件用圆角方形区别普通服务模块。所有模块字体统一14号层标题统一16号加粗图例加上分说明。最后一步是加注释。在关键链路上用小字标注协议类型比如用户请求标注HTTPS认证服务调用用户服务标注gRPC。注释用灰色12号字与正文拉开层次。4.2 用 Mermaid 快速生成流程图并嵌入文档在技术文档里嵌入 Mermaid 是我目前最推荐的图形方案。代码块写进 Markdown渲染出来就是完整图形修改代码图形自动更新。用过一次就回不去了。比如画一个密码重置流程 Mermaid 语法写出来是这样的graph TD A[用户点击忘记密码] -- B[输入注册邮箱] B -- C{邮箱是否注册} C --|未注册| D[提示邮箱不存在] C --|已注册| E[发送重置链接] E -- F[用户点击链接] F -- G{链接是否有效} G --|超过有效期| H[提示链接失效] G --|有效| I[设置新密码]这段代码渲染出来的流程完整清晰分支条件一目了然。Mermaid 还支持状态图、时序图、类图、甘特图大部分常见图形都能覆盖。写 Mermaid 时要注意几个点。第一节点ID建议使用有意义的英文字母不要用A、B这种无意义编号修改时容易混淆。第二分支条件用竖线标注在连线上语义更清楚。第三语法版本兼容性要注意不同平台的 Mermaid 渲染内核版本不完全一致会出现本地渲染正常但 GitHub 显示异常的情况。我建议在本地装一个 Mermaid CLI 做渲染验证或者用官方 Live Editor 在线预览确认无误后再嵌入文档。4.3 用 PlantUML 绘制时序图记录调用链排查线上问题、梳理接口调用链用 PlantUML 画时序图是最高效的方式。时序图和流程图最大的不同在于时序图强调整体调用的时间顺序。画时序图我总结了一个简化流程。写代码之前先确认参与的角色时序图的泳道就是这些角色。接下来按时间顺序写出每个调用动作包括同步调用返回、异步消息通知、事件订阅。最后才是写成代码让工具自动渲染。PlantUML 绘制时序图的参考代码startuml actor 用户 as user participant 浏览器 as browser participant API网关 as gateway participant 订单服务 as order database 数据库 as db user - browser: 点击提交订单 browser - gateway: POST /api/orders gateway - order: 调用创建订单接口 order - db: INSERT orders db -- order: 返回订单ID order -- gateway: 返回订单创建成功 gateway -- browser: 201 Created browser -- user: 展示订单成功页 enduml这段代码渲染出来就是一张标准的垂直时序图从上到下自然形成时间维度的阅读流。PlantUML 的核心优势是修改成本低增加一个调用就加一行代码而不是手动拖拽一条线并重新对齐。提示画时序图时参与角色不要超过8个超过就尝试拆分子图。角色太多图面会非常混乱读者根本分不清主流程和旁支流程。5. 动态演进从静态图到持续更新的活文档5.1 图形即文档让设计与时俱进图形最大的敌人是过期。线上环境早已迭代了好几轮架构图还停留在半年前的老版本这种情况实在太常见了。解决思路只有一个把图形当作代码、当作文档一样纳入日常维护体系。我的做法是将图形文件纳入 Git 仓库。如果是 draw.io 图使用它的 XML 格式文件直接入库如果是 PlantUML 或 Mermaid就是纯文本文件天然支持差异对比。关键组件变更的代码评审里必须包含对应的图形变更这样图形就不会和系统脱节。这个习惯需要团队达成共识。具体执行时在项目文档根目录下建一个 diagrams 文件夹按模块划分子目录图形文件命名遵循模块名-图形类型-用途的规则。比如 login-auth-arch.puml 表示登录认证模块的架构图。都用这个约定团队里任何人要找图都能快速定位。5.2 版本演进中的图形变更管理系统架构演进过程中图形至少会经历四个阶段。初始设计阶段图形是目标架构标注的是计划中的状态。落地实现阶段图形更新为实际架构把目标架构调整成真实部署状态。运行演进阶段图形继续变化新增的依赖、调整的链路都要同步更新。架构复盘阶段图形则会增加各种标注包括问题点、优化建议。每次变更图形我建议遵循三条纪律。第一条只改必须改的部分不要把整张图推倒重来否则无法对比变更前后差异。第二条变更时使用不同颜色标注新增、删除、修改的元素新增用绿色删除用红色修改用橙色这样评审人一眼就能定位变化。第三条提交记录里写清楚变更原因和背景避免三个月后没人知道当时为什么这样改。5.3 团队协作中的图形 Review 机制把图形纳入评审流程可以大幅提升图形质量。我在团队里推行的机制是图形自审交叉互审。自审阶段作者检查语义一致性、布局合理性、颜色语义是否正确。互审阶段请熟悉业务的同事帮忙检查信息是否完整不熟悉业务的同事帮忙检查是否易懂。互审时重点关注三件事第一有没有多余的装饰元素干扰信息传递。第二有没有缺失关键信息导致看不懂。第三图形的阅读流畅度能不能一次看完不回头。这三个问题都能通过这张图基本就成熟了。还有一个容易忽略的点图形的可访问性。色弱、色盲的同事可能无法依靠颜色区分元素所以在设计关键信息时不能只靠颜色还要同时使用不同形状、文字标签来区分。6. 常见问题与排查技巧实录6.1 常见设计错误速查图形设计总会在细节上出问题。我整理了三个高频错误以及解决方案。第一个是箭头混乱问题双向箭头、单向箭头混用读者分不清数据流向。解决方案是全图统一箭头语义规定一个方向只代表一种关系。如果是依赖关系箭头指向被依赖方。如果是数据流向箭头指向目标方向。一张图只保留一种箭头语义。第二个是信息过载问题一张图塞了太多内容密度极高。读者很容易迷失在图里。解决方案是拆分图形。按照架构总览、核心链路、细节展开三个粒度拆分总览图只放模块和关键连接细节图再展开具体字段和协议。第三个是标注缺失问题模块缩写只有作者自己知道图例也没有读者全靠猜。解决方案是强制要求复杂图形必须配图例表列出所有缩写、颜色、线型的含义。6.2 实际排障过程记录有一次排查用户反馈偶发登录超时的问题我从系统架构图开始分析了完整链路。架构图显示请求链路是浏览器到Nginx再到认证服务再到用户服务再到Redis。流程图和时序图帮了大忙。时序图显示认证服务在调用用户服务时没有设置超时时间而用户服务在Redis连接异常时默认等待无限久。这个潜在风险仅靠看代码非常隐蔽但在时序图里一眼就暴露了。最终修复是为用户服务加上连接超时和读超时配置并将Redis连接断开时快速失败而不是无限等待。整个过程从看时序图到定位问题花了不到半小时。这件事让我更确信graphic 不仅是给外人看的说明书更是自己排查问题的思维地图。6.3 维护与更新图形质量的生命线图形设计最后较量的是坚持维护的耐力。我这里有几个实战心得给图形文件加上最后更新时间标注放在图右下角提醒读者和自己在看之前确认版本。定期做全量清理每季度检查所有图形删除失效图更新过期图合并重复图。新成员入职培训时要求他们阅读核心图形读不懂的地方就是图形需要优化的地方这种以读者反馈驱动图形迭代的方式比作者闭门造车高效得多。注意维护图形的第一原则是图宁愿少不要旧。一张过期的图比没有图更危险因为参考它做决策通常会走向错误方向。7. 写在最后图形设计的长期收益这个 diagram-design 的内容我真正想传递的不只是工具和方法。做到最后图形设计已经成为我的一种思维方式。拿到一个复杂问题先画出来把抽象概念落成可视化结构很多模糊之处就自动清晰了。现在我建议所有工程师、产品经理、技术管理者都刻意练习图形表达能力。从一周画一张简单的流程图开始坚持三个月你会发现自己的逻辑表达、方案沟通、甚至代码设计能力都会同步提升。画图的核心价值是理清思维而不是把图画得漂亮。最后再分享一个好用的设计习惯。每次完成一张图我都会对着这张图用最短的一句话介绍它。如果这句话说不出来说明这张图还不够聚焦。能说出来的话整张图的核心信息也就出来了。这个习惯帮我反复审视图的质量最后沉淀下来的都是真正用得上的好图。