3 条主线 8 段代码:Mermaid.js 电信网络可视化实战与避坑指南
【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid
凌晨两点,扩容方案刚过评审,Wiki 里的拓扑图却还停在上一版——几十张手绘图集体过期。用 Mermaid.js 把网络架构、信令时序、排障流程写成文本代码,30 分钟跑通设计、协作、运维 3 条主线;读完本文,你能独立维护一套跟着变更走的电信网络文档。
为什么是它:4 个传统绘图工具绕不开的痛点
✅ 文本可版本化,图表不再是"冻结的截图"。你在传统绘图工具里导出的图是二进制文件,新图覆盖旧图之后,没人说得清改了什么。Mermaid 的图源是纯文本:可以 diff、可以 review、可以回滚,图和代码进同一个仓库,变更历史一目了然。
一处改动,全链更新。在绘图工具里加一个网元,你要拖框、对齐、重画连线再导出;在 Mermaid 里加一行PCF --> SMF,保存即生效。改图成本从分钟级降到秒级,这直接决定了你会不会愿意"顺手改图"。
协作有共同语言。你不再需要把文件"打回给设计同事"。工程师直接改文本,评审人看 diff,讨论聚焦在拓扑变更本身,而不是"这个框能不能挪一挪"。
同一份源码,随处渲染。同一段文本可以在网页、Wiki、CI 报告里渲染成 SVG,主题用统一配置控制,全文档几十张图的视觉风格自动一致。
能力全景:一张表看懂 8 种图表的电信用法
先给你一张速查表,再按生命周期分 3 条主线展开。每行是"图表类型 × 适用场景 × 一句话说明",遇到具体图表先查这里。
| 图表类型 | 典型电信场景 | 一句话说明 |
|---|---|---|
| flowchart 流程图 | 网络拓扑、排障 SOP | subgraph 圈定网元分组,菱形节点表达判断分支 |
| sequenceDiagram 时序图 | 跨网元信令、呼叫建立 | 每个网元一条生命线,消息按时间先后排列 |
| stateDiagram-v2 状态图 | 设备/协议状态机 | 用"状态 —事件→ 状态"表达流转,可挂注释 |
| gantt 甘特图 | 升级排期、维护窗口 | 任务条 + 日期轴,可用 excludes 自动避开周末 |
| pie 饼图 | 故障类型分布 | 各故障类别占比,一张图说清资源投向 |
| erDiagram ER 图 | 网元资源归属、配置建模 | 实体关系线表达"谁管谁、谁依赖谁" |
| classDiagram 类图 | 协议模块与接口设计 | 描述协议栈模块关系,与时序图配合看实现 |
| mindmap 思维导图 | 故障原因归类 | 辐射式列原因分支,适合复盘会现场发散 |
主线一(设计期):把网络拓扑与状态机写成文本
设计期你最先被催交的就是评审图:核心网逻辑架构、网元边界、连接关系,一张都不能少。
用子图表达 5G 核心网逻辑架构
下面这张图解决"把核心网评审图从 PPT 搬进仓库"的任务:外层 subgraph 划接入网/核心网边界,内层按功能分组,虚线表达服务发现这类弱连接。
最值得注意的写法是 subgraph 两层嵌套:图的分组和网络边界同构,后续新增网元只需把节点丢进对应子图,图的结构不会散。语法细节可对照 docs/syntax/flowchart.md。
用状态图描述基站切换过程
做故障复盘或协议分析时,你需要向别人解释:设备在什么状态下、被什么事件触发、流转到哪里。手绘状态机最大的麻烦是箭头一改、整页重画。
关键点:note能把运维备注直接挂在状态旁边,一张图同时当状态机说明文档用,复盘时不用另起一页 PPT。语法参考 docs/syntax/stateDiagram.md。
主线二(协议期):把跨网元信令写成时序与并行分支
进入协议期,评审对象从"结构"变成"过程":注册、会话建立、呼叫,每一步谁发消息给谁、顺序是什么。
VoLTE 呼叫建立时序图
这个例子解决"把 VoLTE 呼叫流程讲清楚"的任务:参与者用as给网元起业务名,autonumber让评审时可以直接说"第 7 步"。
值得注意:实线->>是请求、虚线-->>是应答,两种线型让"一问一答"在图上一目了然。时序图进阶语法见 docs/syntax/sequenceDiagram.md。
用 par 分支表达并行的策略与计费决策
计费场景里,策略点会同时向在线计费系统和策略决策点发起请求——用顺序画法会把并行画成串行,误导阅读。
par ... and ... end把并发分支画在同一时间带内,评审时不会再被问"这两步到底是先后还是同时"。
主线三(运维期):把排障 SOP 与维护排期写成文本
运维期图表的读者是值班工程师:图要能被照着执行,而不是只用来欣赏。
标准化排障流程图:从告警到关单
把排障 SOP 写成流程图后,新值班员工照着菱形节点一步步走,路径不会分叉到图外。
最关键的两处写法:判断节点全部用菱形{},"否"分支回到告警类型形成闭环——流程图里不允许有走不完的尾。
维护窗口甘特图与故障分布饼图
月度维护窗口排期和故障占比,是周会最常问的两张图。
甘特图里excludes weekends一行就把维护窗口自动避开周末,crit标出回退预案,排期评审不用口头解释。甘特图语法与excludedDays进阶用法见 docs/syntax/gantt.md,饼图见 docs/syntax/pie.md。
工程化落地:改一行文本,图跟着变 🚀
图表能进仓库只是第一步,让它自动出现在文档和网页里才是收益兑现。推荐的工作流:
- 图源放在
docs/diagrams/*.mmd,或直接内嵌在 markdown 里; - 文档站引入 mermaid 并开启 startOnLoad,页面里所有
pre.mermaid块加载即渲染; - CI 里批量渲染成 SVG 提交,评审时能看到图级别的变更。
下面是最小可运行的 HTML:改<pre>里的文本,刷新页面图就变,全程不碰任何绘图工具。
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <title>5G 核心网架构文档</title> <script src="/static/js/mermaid.min.js"></script> </head> <body> <h1>5G 核心网逻辑架构</h1> <pre class="mermaid"> flowchart TB gNB[5G 基站] --> AMF[接入和移动性管理] AMF --> SMF[会话管理] --> UPF[用户面功能] --> DN[外部数据网络] </pre> <script> mermaid.initialize({ startOnLoad: true, securityLevel: "strict" }); </script> </body> </html>如果文档站是 npm 工程,npm i mermaid后也可以只调用mermaid.render()手动渲染单个字符串,适合把图当接口输出。
避坑:5 个高频问题与排查思路 ⚠️
1. 中文写进标签,节点 ID 保持英文。5G基站[x]这类写法容易触发解析错误,正确姿势是gNB["5G 基站"];subgraph 标题含空格或特殊字符时同样加引号,如subgraph AN["接入网 Access"]。
2. subgraph 嵌套别超过三层。嵌套太深再叠加多处direction声明,布局很容易崩。图真的复杂就拆成两张,用文档串联,而不是一张图硬扛。
3. securityLevel 想清楚再配。loose会启用 HTML 标签和点击回调,适合本地工具;对外发布的文档站建议用strict,并且不要直接渲染不可信来源的文本。
4. 渲染失败先查 parse,再查样式。用mermaid.parse(text)先做校验,报错会指向具体行;高频原因是 subgraph 少了end、标签里的引号或括号不配对。常见问题排查见 docs/config/faq.md。
5. Gantt 的日期格式要对齐 dateFormat。dateFormat YYYY-MM-DD必须对应 `
【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考