系统架构图怎么画?以供应链系统为例拆解模块边界与绘制步骤

发布时间:2026/10/8 9:42:38
系统架构图怎么画?以供应链系统为例拆解模块边界与绘制步骤 写架构图之前先想清楚一个问题你是为了“交付一张图”还是为了“讲明白一个系统”。我见过太多人对着白板画了一下午最后产出一张谁也看不懂的方框连线图问题就出在没想清楚架构图到底解决什么问题。这篇文章用供应链系统当例子把从零到一画出一张合格系统架构图的完整思路、步骤、坑一次讲透。1. 系统架构图是什么到底在画什么1.1 先搞清楚架构图的服务对象系统架构图不是给自己看的也不是给技术总监一个人看的。它服务的对象至少有四类人开发团队要拿它对齐模块边界和依赖关系运维要拿它理解部署形态和故障影响面产品经理要拿它确认业务流程和技术方案的匹配度新入职的同事要拿它快速建立对系统的整体认知。每一类人对架构图的关注点完全不同你不可能用一张图满足所有人所以动手之前先问一句这张图主要给谁看要支撑什么决策。这个问题不解决后面所有的方框和连线都是白画。我自己的经验是架构图至少要分成两个版本一个是面向业务方和管理的“逻辑架构图”重点表达系统有哪些能力、这些能力怎么支撑业务流程另一个是面向研发和运维的“部署架构图”重点表达服务怎么拆分、进程怎么部署、数据怎么流转。供应链系统尤其需要这种区分因为它的业务链路长、参与方多逻辑视图和物理视图往往是两套完全不同的结构。1.2 架构图的核心要素不是方框和线而是边界与关系很多人画架构图喜欢堆砌技术名词这边画一个Nginx那边画一个Redis再把MQ、ES、Kafka全部塞进去最后图上一堆框谁也看不懂。真正的架构图核心要素只有三个边界、组件、关系。边界解决的是“系统到哪里为止”的问题比如供应商系统、仓储系统、订单系统哪些属于当前架构范围内哪些属于外部依赖组件解决的是“系统内部有哪些模块或服务”的问题关系解决的是“组件之间怎么协作”的问题是同步调用、异步消息、还是文件传输。这三个要素里“边界”最容易被忽略。我见过太多架构图把外部系统的接口也画进来把整个页面画成了一个巨大的蜘蛛网。供应链系统的边界尤其容易含糊因为它的上下游系统特别多比如供应商、客户、物流公司、财务系统如果把所有外部交互都画成平级组件图面立刻失控。正确做法是先画一个清晰的外圈把外部系统统一表述为“外部依赖”只在数据交互的关键路径上标注接口关系。1.3 合格架构图的四个检验标准判断一张架构图是否合格我总结过四个标准你可以用来检查自己的图。第一是完整性核心模块有没有遗漏和业务流程的关键节点是否一一对应第二是准确性组件之间的连线表达的关系是否符合真实代码里的调用关系有没有自创一个并不存在的依赖第三是一致性图的命名、颜色、线条样式在整个图中是否统一读者不会产生歧义第四是可读性图面在A4纸或一屏内能不能看完整不需要读者放大拖拽才能看清。这四个标准里准确性问题最致命。架构图一旦出现“图上画的依赖和代码里的依赖对不上”轻则误导新人重则导致后续架构决策失误。所以我在画完图之后一定会做一件事拿图去和核心模块的负责人逐条过一遍尤其是那些跨模块的调用关系必须逐条确认。2. 画图前的准备没有业务认知架构图就是空中楼阁2.1 从业务流程开始而不是从技术栈开始供应链系统的业务链路长从采购、入库、库存、订单、履约、结算每一个环节都有自己独立的业务逻辑和状态流转。如果你一上来就画技术组件画到一半一定会发现很多模块划分是拍脑袋想出来的和真实的业务割裂。正确起点是先画一张业务流程图把核心业务节点、角色、单据、状态过一遍。以供应链系统为例核心业务链路至少包含供应商在主数据系统里完成资质审核和合同签订采购员创建采购订单仓库根据采购订单收货质检完成后入库库存系统更新可用库存下游销售订单产生后库存系统锁定库存仓储系统下发拣货指令物流系统承运最终客户签收后触发结算流程。这张业务流程图画完你会发现系统模块的边界其实已经隐隐浮现了主数据、采购、仓储、库存、订单、物流、结算每个业务节点对应一个或一组系统能力。2.2 识别核心实体与状态流转业务流程图画完之后第二步是梳理核心实体和实体的状态流转。供应链系统最核心的几个实体无非是采购单、入库单、库存记录、销售订单、出库单、结算单。每个实体都有自己完整的生命周期比如采购单从草稿、审批中、已确认、部分到货、已完成到最终关闭。你不需要把这些状态全部画在架构图上但必须在画图前心里有数因为实体的状态流转决定了模块之间需要哪些交互接口。举个实际例子采购订单确认之后仓储系统才能执行收货收货完成后库存系统才会增加可用库存。这个流程里“订单状态”就是两个模块协作的关键约束。如果你画架构图时忽略了状态流转的时序约束就很容易把采购系统和仓储系统之间的依赖关系画成简单的“同步调用”但实际上可能是“采购系统发消息、仓储系统异步消费、再回调更新状态”这样一套更复杂的关系。2.3 明确系统的上下游边界与外部依赖供应链系统几乎没有纯内部系统它天然要和一堆外部系统交互供应商可能有自己的SRM门户也可能用EDI传输采购订单物流公司有独立的TMS系统需要回传轨迹和签收状态财务系统有自己的预算和核算逻辑需要接收结算单数据。把外部依赖梳理清楚是防止架构图画成“无边界巨兽”的关键。实际落地时我会在图上把所有外部系统统一放在一个明确的区域内比如顶部一行或者右侧一列用统一的颜色和标签标注“外部系统”并且只画出必须的数据接口。内部系统之间的连线用实线和外部系统的交互用虚线这样读者一眼就能分清内外。在供应链系统的架构图里我通常把供应商平台、电商平台、物流平台、财务系统、银行支付通道这五类外部依赖画在边界上每个标一个交互协议比如HTTP API、消息队列、文件传输。3. 供应链系统架构图的分层拆解与模块划分3.1 经典的分层思路从业务能力到技术组件架构图最常见的组织方式就是分层。分层不是技术栈的简单堆叠而是按“职责”划清层次边界。供应链系统我会分成五层接入层、业务服务层、领域服务层、基础服务层和数据层。接入层解决“谁来用系统”的问题包括内部运营后台、供应商门户、移动端应用、开放API业务服务层解决“业务流程怎么编排”的问题比如采购服务、销售服务、履约服务领域服务层解决“核心业务规则在哪”的问题比如库存领域服务、价格领域服务、结算领域服务基础服务层解决“通用能力从哪来”的问题比如组织权限、消息通知、文件服务、工作流引擎数据层负责存储和检索包括业务库、缓存、搜索引擎、数据仓库。这种分层方式的优势是每一层职责清晰修改某一层时影响面可控。供应链业务最忌惮的是一旦改库存规则订单、结算、采购代码全要跟着动分层就是用来隔离这种风险的。曾经有一个客户系统业务逻辑没有分层采购、库存、订单三个模块共用了同一个数据表加一个库存字段要改四处代码。后来重构时我们用分层重新梳理边界领域服务层统一封装库存规则业务服务层只关心编排改动量立刻下降了60%以上。3.2 供应链系统的模块地图每个模块的职责与关键接口画分层架构图的时候每个模块的职责说明比模块本身更重要。供应链系统的模块地图我会这样拆主数据模块负责供应商、商品、客户三类基础数据的统一维护采购模块负责采购订单的创建、审批、跟踪和供应商协同仓储模块负责入库、出库、盘点、库位管理库存模块负责可用库存、在途库存、锁定库存的管理以及库存预占和释放订单模块负责销售订单的接收、拆分、审核和状态同步履约模块负责订单下发、拣货、打包、发货到签收的全链路调度结算模块负责对账、账单生成、发票管理和付款申请。每个模块之间的接口是架构图上连线的内容。采购模块产生的到货信息通知仓储模块仓储模块的入库结果更新库存模块的可用库存订单模块的锁定请求调用库存模块的预占接口结算模块从订单和仓储两侧获取计费数据。这些接口关系如果不标注读者只能看到一堆孤立的方框完全无法理解系统是怎么运作的。我画图时会强制要求每个连线上都写一句话注释比如“入库结果更新可用库存”哪怕这句话长一点也比一个无标签的箭头强得多。3.3 技术选型与中间件在一张架构图中的合理位置很多架构图把MQ、Redis、MySQL、ES画了一堆却完全没说明它们在系统中承担什么职责这张图本质上只是一个技术清单不是架构图。中间件必须在业务组件的语境下出现才有意义比如“订单状态变更通过MQ异步通知仓储系统和结算系统”这句话里MQ承担的是解耦和削峰的作用再比如“库存查询走Redis缓存库存扣减走MySQL事务”这里Redis和MySQL是数据层的不同存储策略。对于供应链系统这种典型的事务密集型系统数据一致性是最大的技术挑战所以图里要体现“同步事务”和“异步最终一致”的边界在哪里。凡是涉及库存扣减、订单状态变更这类强一致操作必须是同步事务处理凡是涉及通知、对账、报表同步这类可以容忍延迟的操作用异步消息或者定时任务。架构图里要能直接读出这个边界而不是让读者看图之后还要猜。4. 从草图到成图一张供应链架构图的绘制流程4.1 第一步先画容器图再画组件图动笔的第一原则是从粗到细。我建议先画一张系统上下文图把供应链系统看成一个整体画出它和供应商、客户、物流、财务这些外部系统的关系然后再进入系统内部画出主要容器也就是应用服务、数据库、消息队列这些部署单位最后深入到关键容器内部画出组件和接口。这个过程就像拍照先拍全景再拉近拍特写逐级放大。很多新手上来就画组件图结果被细节淹没画到一半发现整体结构不对推翻重来。我踩过这个坑不止一次所以现在强制自己先用白板画上下文图和容器图和团队确认整体结构没问题之后再细化到组件级别。供应链系统的上下文图尤其重要因为参与方多外部依赖复杂先画清楚整体交互后面细化内部结构时才不会偏。4.2 第二步识别关键路径优先画核心链路架构图不要追求一次画全先把核心链路画出来。供应链系统的核心链路就是商品从供应商到客户的全过程采购、到货、入库、库存、下单、出库、签收、结算。这条链路走通了架构图的主干就立住了其他辅助能力比如权限、报表、消息通知都是挂在这条主干上的分支。我画图时会用一根高亮粗线把核心链路标出来然后围绕这条线把上下游模块挂上去。这样读者看图的时候第一眼看到的是系统的主脉络而不是一堆平铺的模块。有一次评审架构图业务方看完全图后直接说“这个图我能看懂主链路了”这就是好架构图的标准。4.3 第三步标注关键接口协议与数据流向模块之间的连线只有在标注了协议和数据方向之后才有信息量。供应链系统里常见的情况是订单模块通过HTTP接口同步调用库存模块预占库存仓储模块通过MQ订阅订单创建消息来触发拣货任务结算模块通过定时任务从订单和物流侧拉取数据生成对账单。这三种关系在图上必须用不同的符号区分同步调用用实线箭头异步消息用虚线箭头定时任务用带时钟标识的箭头不同颜色也可以辅助区分。数据流向是架构图最容易画错的地方。画之前必须想清楚数据是哪边产生的、哪边消费的、谁先谁后。比如库存变动数据仓储的入库单是产生方库存模块是消费方但后续对账与报表又从库存模块往外读。一张图里如果同一个数据有多个流向建议直接标注数据表名或消息主题否则读者无法判断“这条数据到底是同步的还是异步的”。5. 架构图的几个常见坑和排查方法5.1 常见坑层次混乱、关系错标、信息过载节奏混乱的典型症状是一张图里既画了机房拓扑又画了应用模块还把业务流程的状态机塞了进去。解决方法是拆图部署架构归部署架构业务架构归业务架构流程图归流程图不要试图用一张图表达所有信息。关系错标最典型的场景是没有区分同步与异步。供应链这类重异步协作的系统如果把MQ异步链路画成同步链路读者会误解接口的可用性一旦真的按图排查问题会走很大弯路。信息过载则是最难解决的因为取舍标准很难把握。我的建议是架构图的“主图”只画核心模块和核心链路而那些细节性的接口参数、数据表结构、缓存策略放到配套的说明文档里用编号和主图关联。比如主图上写着“采购域 → 仓储域到货通知”详细接口定义放到文档里编号“IF-AP-WMS-001”这样主图干净信息又不丢。5.2 排查方法把架构图当代码来review架构图和代码一样需要review。每次画完架构图我会组织一个简单的评审会参与人是各模块的技术负责人流程和代码review一样逐模块过职责逐连线过关系。评审时会重点问三个问题这个模块的职责边界清楚吗这条关系的协议和方向真实吗这个接口还有没有其他调用方没画出来这三个问题能检查出大部分问题。还有一个很实用的排查技巧叫“故事线检查法”。拿着架构图从供应链系统的核心场景走一遍比如“供应商发货了系统会发生什么”沿着图上的连线走物流轨迹推送、仓储到货通知、质检结果回写、库存增加、结算单生成任何一个环节在图上找不到对应的模块或连线那就说明图有缺失。这个方法用一年多了至少帮我发现了十来处图实不符的问题。5.3 架构图需要持续维护而不是一成不变的交付物架构图最大的天敌是“画完就丢”。软件系统每周都在演进架构图上个月还是对的这个月可能就过时了。我建议把架构图纳入版本管理和代码一起提交模块负责人每次迭代涉及架构变动时同步更新架构图。这个看起来很简单的要求做起来非常难因为人的天性是不愿意做文档工作但如果不坚持一年之后那张图基本就成了废纸。我自己的做法是在CI流水线里加一个检查提醒凡是检测到核心接口定义变更就自动在团队群里提醒“注意检查架构图是否需要更新”。这个机制帮我省了很多反复沟通的成本也保证了架构图在大多数时候是可靠的。6. 画图工具有什么推荐的以及我的选型建议6.1 工具选择的基础逻辑画架构图的工具没有绝对好坏关键看你的使用场景。如果是个人快速画个草图或者和团队在白板上头脑风暴draw.io、Excalidraw这类轻量工具最合适上手快、免费、能导出通用格式如果是需要多人协同、长期维护一套架构文档专业工具比如PlantUML、Mermaid、Structurizr、企业级的Archimate工具都是可选方向核心是能版本化、能Diff、能生成文档。我在供应链架构项目里的组合是探索阶段用Excalidraw画草图定稿后用Structurizr DSL维护正式版本。Structurizr最大的优势是架构图用代码描述模块和关系的增删改可以走代码评审流程和团队用Git协作的方式天然一致彻底解决了“架构图无法Diff”的老大难问题。如果你觉得DSL有学习成本直接全部用draw.io手动维护也行但坚持“图随代码变”的原则不能放松。6.2 供应链系统架构图的具体绘制规范我对架构图的绘制规范有一套固定要求分享出来供参考。配色不用花哨最多三到四种颜色用于区分业务模块层级线条要区分线型实线表示同步调用虚线表示异步消息点线表示定时任务方框命名统一用“模块名-职责”不要单独写一个不知所云的缩写箭头方向永远指向数据流向而不是调用方向的反向。这套规范执行了两年多基本成了团队内部的架构图画图约定新人上手也更快。画供应链系统的大架构图时我还会额外在图上画一个“数据流关键路径”的标注区把最容易出问题的三个数据一致性点标出来比如库存预占与释放、订单状态推进、结算对账这部分信息业务方和技术方都极其关注放在显著位置有助于评审时聚焦讨论。6.3 从架构图到架构治理一张图如何驱动项目认知架构图的最终价值不在图本身而在于它能不能成为团队对系统认知的统一语言。供应链系统几千个类、几十张表、十几个微服务任何人都不可能靠读代码快速建立整体认知架构图是花最少时间建立全局观的有效载体。我曾经带过几个新人给他们完整过一遍架构图之后再派任务他们问问题的角度明显更聚焦不会出现“这个功能该改哪个服务”这种基础问题。所以我最后的建议是不要为了画图而画图要把画图当成一次系统思考的过程。每次画架构图你都在强迫自己回答“系统的边界在哪、核心模块是什么、模块之间怎么协作”这些问题想透了架构图的成品质量不会差你的项目认知也会同步上一个台阶。画完图之后记得把它贴到团队文档里标注好日期和版本让它在接下来一两个月里真正成为所有人的共同参考。