简介:本资源是一套面向企业架构师、IT系统规划人员及数字化转型从业者的平台级架构设计参考材料,聚焦智慧城市、物流、铁路、能源等多行业综合运营平台的顶层架构设计与落地实践。内含15张专业级PPT架构图,覆盖混合云平台层、业务应用层、中台能力层(数据中台、技术中台、业务中台)、安全防护体系及运维监控大屏等核心模块,图示清晰呈现大数据、AI、IoT、区块链、容器化等技术在实际业务场景中的集成路径与分层逻辑。资源为单个1.22MB的pptx文件,结构完整、可直接用于汇报、方案宣讲或内部培训。目前已有164人学习下载,内容具备强工程落地性——不仅展示标准分层模型,更包含订单中心、运力调度、能耗管控、安防监控等典型业务子系统与外部系统(如12306、95306、CFCA)的接口集成示意,便于读者快速理解复杂平台的模块划分、数据流向与技术选型依据。
1. 平台架构图与产品架构图:不是两张PPT,而是系统演进的“双轨仪表盘”
很多刚接手老系统的工程师第一次被要求“画个平台架构图”,下意识打开PPT拖几个方框、连几条线,交上去后被反问:“这个图能回答‘新功能上线要改哪几个服务?’‘数据库慢查询影响了哪些下游?’‘第三方SDK升级会不会波及支付链路?’——它不能,那它就不是架构图,只是拓扑快照。”
平台架构图和产品架构图本质是同一套系统在两个维度上的可执行说明书:前者回答“系统由哪些技术组件构成、如何协同、边界在哪”,后者回答“用户看到的功能模块如何映射到这些组件、业务流程如何穿越它们”。二者不互斥,但混淆必翻车——把产品功能堆砌进平台图,会导致运维无法定位故障域;把中间件细节塞进产品图,会让产品经理对着“Kafka Topic 分区数”发呆。本文面向已跑通单体服务、正面临微服务拆分或中台化改造的团队,聚焦如何用最小成本产出真正能指导开发、运维、测试协同的双架构图,不讲抽象理论,只拆解从白板草稿到Confluence可维护文档的每一步动作、每个参数取舍、每个协作陷阱。
2. 先立住逻辑:为什么必须区分平台与产品架构图?——从一次支付超时排查说起
2.1 一张图救不了故障,但两张图能锁死根因范围
某次线上支付超时告警持续15分钟,SRE团队按常规路径查:网关QPS正常、订单服务CPU平稳、数据库慢SQL无新增……卡在“看起来都健康”的黑匣子状态。直到有人调出平台架构图,发现支付服务依赖的风控校验模块实际部署在独立集群,且该集群的Redis连接池配置被误设为50(其他服务均为200);再对照产品架构图,确认“风控校验”仅在“下单成功后、扣款前”这一个业务节点触发——立刻锁定问题不在主链路,而在于风控模块的资源瓶颈。若只有一张混搭图,风控模块可能被归类为“支付子系统”而忽略其独立部署属性,排查会陷入全链路压测的泥潭。
提示:平台架构图的核心价值是暴露技术契约边界(如服务间通信协议、数据存储归属、基础设施依赖),产品架构图的核心价值是显性化业务流经路径(如用户点击“立即支付”后,请求依次触达哪些功能模块)。二者叠加,才能形成“技术-业务”双向追溯能力。
2.2 两类架构图的本质差异:对象、粒度、维护者、更新频率
| 维度 | 平台架构图 | 产品架构图 |
|---|---|---|
| 核心对象 | 服务、组件、中间件、基础设施(如K8s集群、消息队列、CDN) | 功能模块、业务流程、用户角色、外部系统(如银行网关、短信平台) |
| 典型粒度 | 服务级(OrderService)、实例级(order-service-v2.3.1)、网络域(DMZ区、内网VPC) | 功能级(购物车、优惠券、订单中心)、流程级(下单流程、退款流程)、角色级(买家、卖家、审核员) |
| 主要维护者 | SRE、基础架构组、后端负责人 | 产品经理、业务架构师、前端负责人 |
| 更新触发条件 | 服务拆分/合并、中间件升级、机房迁移、安全策略变更 | 新功能上线、业务流程重构、第三方系统接入/下线、权限模型调整 |
| 高频错误 | 把“用户管理”写成一个方框(应拆为Auth Service + User DB + LDAP Sync Job) | 把“Redis缓存”画进产品图(这是技术实现,非用户可见功能) |
2.3 不画图的代价:当“架构图缺失”成为技术债的加速器
某团队曾因长期未更新平台架构图,导致三次关键事故:
- 事件1:新接入的物流服务商要求HTTPS双向认证,但架构图未标注网关层TLS终止点,开发误在应用层配置证书,引发全量请求失败;
- 事件2:数据库分库后,产品图仍显示“统一订单库”,导致营销活动查询跨库JOIN,性能暴跌;
- 事件3:安全审计要求隔离敏感数据,因平台图未标识“用户身份证号”字段的加密服务调用链,整改时遗漏了日志脱敏模块。
这些都不是代码缺陷,而是架构信息断层——当系统复杂度超过人脑短期记忆阈值(约7±2个实体),没有结构化图谱,协作必然退化为试错式沟通。
3. 落地第一步:用Mermaid快速生成可维护的双架构图骨架
3.1 为什么选Mermaid?——告别PPT手动画图的三大血泪经验
- 经验1:版本控制失效:PPT文件无法git diff,两人同时修改后合并=手动重画;Mermaid文本可直接commit,
git log -p清晰看到“第3行:将Redis从订单服务旁移至风控服务下方”; - 经验2:一致性灾难:PPT里“用户服务”有时叫UserService、有时叫UserCenter、有时带图标有时不带,Mermaid通过变量定义(
$user_service = "UserService")全局替换; - 经验3:动态生成难:当需要按环境(dev/staging/prod)生成不同架构图时,Mermaid可结合CI脚本注入变量,PPT只能人工复制三份。
注意:Mermaid不是终极方案,而是最小可行起点。它解决“有没有”,后续再迁移到Archimate或C4 Model等专业工具。当前目标:让第一版图在2小时内产出并被团队认可。
3.2 平台架构图:用graph TD定义技术组件与通信关系
graph TD A[API Gateway] --> B[Order Service] A --> C[Payment Service] A --> D[Inventory Service] B --> E[(Order DB)] C --> F[(Payment DB)] C --> G[Third-Party Bank API] D --> H[(Inventory DB)] B --> I[Redis Cache] C --> I I --> J[Cache Cluster: redis-cluster-prod] classDef service fill:#4CAF50,stroke:#388E3C,color:white; classDef db fill:#2196F3,stroke:#1565C0,color:white; classDef external fill:#FF9800,stroke:#EF6C00,color:black; classDef cache fill:#9C27B0,stroke:#7B1FA2,color:white; class A,B,C,D service; class E,F,H db; class G external; class I,J cache;逻辑说明与参数说明:
graph TD表示从上到下布局(Top-Down),符合阅读习惯;若需横向展开(如数据流),改用graph LR;- 方括号
[]表示服务/应用,圆括号()表示数据库,方括号加斜杠[/ /]表示外部系统; classDef定义样式类,避免重复写颜色属性;class X,Y,Z 类名批量应用;- 关键参数:
stroke-width:2px可加粗边框突出核心链路,font-size:14px保证导出PDF时文字清晰。
3.3 产品架构图:用graph LR刻画业务流程与功能模块
graph LR U[用户端] --> V[Web App] U --> W[Mobile App] V --> X[购物车模块] V --> Y[商品详情模块] W --> X W --> Y X --> Z[订单中心] Y --> Z Z --> AA[支付模块] Z --> AB[物流模块] AA --> AC[银行网关] AB --> AD[快递公司API] classDef module fill:#03A9F4,stroke:#0288D1,color:white; classDef external fill:#FF5722,stroke:#E64A19,color:white; class X,Y,Z,AA,AB module; class AC,AD external;逻辑说明与参数说明:
graph LR(Left-Right)更适配业务流程从左(用户入口)到右(外部系统)的流向;- 模块命名必须与PRD/需求文档一致(如“订单中心”而非“Order Center”),避免术语割裂;
- 外部系统用
external类标红,提醒团队该环节不可控,需重点设计降级策略; - 若某模块涉及多角色(如“订单中心”供买家查单、卖家发货、客服处理),用
subgraph分组:subgraph 订单中心 BA[买家视图] BB[卖家视图] BC[客服视图] end
4. 避坑指南:画架构图时最常踩的5个坑,以及我的后悔药清单
4.1 坑1:把“技术选型列表”当架构图——现象:图中堆满“Spring Boot 2.7.18”“MySQL 8.0.33”等版本号
- 现象:评审会上被问“这个图能指导我部署吗?”,答“能,你看版本都写了”,结果运维发现图中MySQL版本与生产环境不符,且未标注主从配置。
- 原因:混淆了架构图与部署清单。架构图关注组件间关系,版本号属于部署细节,应放在Ansible Playbook或Helm Chart中。
- 解决:架构图中只保留技术栈类型(如“MySQL集群”“PostgreSQL读写分离”),版本号用注释
%% MySQL 8.0.33 (prod)轻量标注,且仅限关键差异点(如生产用8.0,测试用5.7)。
4.2 坑2:用箭头表示“调用方向”,却忽略“数据流向”——现象:支付服务→风控服务画了实线,但未标“同步校验”或“异步通知”
- 现象:开发按图实现同步HTTP调用,但风控团队实际提供的是Kafka消息,导致接口超时。
- 原因:未区分通信模式(同步RPC/异步MQ/定时任务)和数据语义(实时校验/批量对账/事件通知)。
- 解决:在箭头旁强制添加标签:
-- HTTP POST /v1/risk/check -->(同步)-. Kafka Topic: risk_event .->(异步)== Cron: 0 0 * * * ==>(定时)
4.3 坑3:隐藏“灰色地带”组件——现象:图中所有服务都有明确归属,但实际存在3个由外包团队维护的Python脚本,无人知晓其逻辑
- 现象:某次数据库迁移后,订单数据异常,排查2天才发现是外包脚本直连旧库未更新。
- 原因:架构图追求“理想态”,刻意忽略临时脚本、手工ETL、监控Agent等非核心但关键的组件。
- 解决:设立
%% LEGACY注释区块,用虚线框-. .->连接,并标注维护方:“[DataSync Script] -. .-> [Legacy DB] %% 维护方:外包A团队,联系人:xxx@xxx.com”。
4.4 坑4:产品图中混入技术决策——现象:“优惠券模块”下画出“Redis缓存策略”“MySQL分表键”,产品经理要求删掉
- 现象:产品图被退回重画,理由是“看不懂,且与需求无关”。
- 原因:产品架构图的读者是业务方,他们关心“优惠券能否叠加使用”,不关心“缓存穿透怎么防”。
- 解决:严格遵循“用户可见即画,用户不可见即藏”原则。技术实现细节放入平台图对应模块的
note中:note right of Coupon Service 缓存策略:本地Caffeine + Redis两级<br> 分表键:user_id % 16 end note
4.5 坑5:图一更新,另一图就过期——现象:平台图新增了“风控服务”,但产品图仍显示“支付服务直连银行”,导致新功能联调失败
- 现象:跨团队协作时,开发按平台图对接风控服务,测试按产品图验证支付直连,双方坚持自己没错。
- 原因:双图无关联机制,更新不同步。
- 解决:建立双图锚点映射表(放在Confluence页面底部):
平台图组件 产品图模块 业务场景 最后更新人 RiskService 风控校验模块 下单前实时校验 @zhangsan PaymentService 支付模块 用户点击支付按钮后 @lisi 更新任一图,必须同步更新此表,否则PR不被合并。
5. 进阶实战:让架构图从“静态文档”变成“活的协作中枢”
5.1 用Mermaid + GitHub Actions实现架构图自动更新
当代码仓库发生特定变更时,自动触发架构图重建,确保图与代码同源。以Spring Boot服务为例:
- 触发条件:
pom.xml中<artifactId>变更,或application.yml新增spring.cloud.stream.bindings配置; - Action脚本逻辑:
- 解析
pom.xml提取服务名(如order-service); - 扫描
src/main/resources/application.yml,提取spring.redis.host、spring.kafka.bootstrap-servers等配置; - 根据预设模板(
platform-template.mmd)填充服务名、依赖中间件,生成新Mermaid代码; - 调用
mermaid-cli渲染为PNG,覆盖docs/arch/platform.png; - 提交变更并推送。
- 解析
我的血泪经验:初期用Python脚本解析YAML,但遇到缩进空格不一致就崩溃;后来改用
yq命令行工具(yq e '.spring.redis.host' application.yml),稳定率提升90%。不要自己造轮子,用成熟CLI。
5.2 在Confluence中嵌入可交互的架构图
Mermaid原生支持Confluence,但默认渲染为静态图。要实现点击跳转,需启用HTML宏:
- 在Confluence页面插入
{html}宏; - 粘贴以下代码(以平台图为例):
<div class="mermaid"> graph TD A[API Gateway] -->|Click to see API Spec| B[Order Service] B -->|Click to see DB Schema| C[(Order DB)] click A "https://api-docs.example.com/gateway" "API Gateway Docs" click B "https://api-docs.example.com/order" "Order Service API" click C "https://db-schema.example.com/order" "Order DB Schema" </div>click X "URL" "Tooltip"实现点击跳转,URL指向Swagger、DB Schema等真实文档;- Tooltip文字必须简洁(≤20字),避免遮挡图形;
- 测试时务必用无痕窗口,确认SSO登录态不影响跳转。
5.3 架构图驱动的Code Review Checklist
将架构图约束转化为CR检查项,让规范落地到每一行代码:
| 检查项 | 触发场景 | 自动化方式 |
|---|---|---|
| 服务间调用是否符合平台图协议 | PR中新增RestTemplate调用 | SonarQube规则:`if (url.contains("http://") && !url.matches("https?://(gateway |
| 新功能是否在产品图中有对应模块 | PR标题含“新增XX功能” | GitHub Action扫描PR标题,匹配产品图Mermaid文本,未命中则阻断合并 |
| 敏感数据流向是否合规 | PR修改涉及id_card、phone字段 | 正则扫描代码,若字段出现在@FeignClient接口中,强制要求添加@Encrypt注解 |
我的习惯:每周五下午花15分钟,打开Confluence双架构图页面,对照本周合并的PR列表,随机抽查3个变更点。不是为了挑错,而是确认“图是否还在呼吸”——如果连续两周没发现图与代码的偏差,反而要警惕:是不是图太僵化,或者团队已放弃维护?希望帮到你。
本文还有配套的精品资源,点击获取