Mermaid学习第二部
Mermaid简介
Mermaid 是一种基于文本的图表生成工具,支持多种类型的图表,包括流程图(flowchart)、时序图(sequence diagram)、甘特图(gantt)等。它广泛用于文档、博客、Wiki、笔记系统中(如 Typora、VS Code、Obsidian 等)。
Mermaid 使用简单的 Markdown 风格语法来定义图形,并通过 JavaScript 引擎渲染为 SVG 图像。
基本结构
Mermaid 图表以 graph 开头,后跟方向(如 TD 表示 Top Down),然后是节点和连接线。
graph TD
A[开始] --> B{条件判断}
B -- 是 --> C[执行操作1]
B -- 否 --> D[执行操作2]
常见图表类型
1. 流程图(Flowchart)
方向标识
- TB:Top to Bottom(默认)
- TD:Top Down
- LR:Left to Right
- RL:Right to Left
节点类型
类型 | 语法 | 示例 |
---|---|---|
圆角矩形 | (text) | A(Start) |
矩形 | [text] | B[Process] |
圆形 | ((text)) | C((Decision)) |
子流程 | {text} | D{Subroutine} |
六边形 | [[text]] | E[[Database]] |
连接线:
类型 | 语法 | 示例 |
---|---|---|
箭头 | –> | A --> B |
带文字箭头 | – text --> | A – Yes --> B |
实线 | — | A — B |
虚线 | -.- | A -.- B |
粗线 | === | A === B |
示例
graph LR
A[开始] --> B{是否继续?}
B -- 是 --> C[继续执行]
B -- 否 --> D[结束]
C --> E[下一步]
D --> F((结束))
2. 时序图(Sequence Diagram)
用于表示对象之间的交互顺序。
关键元素:
- 参与者(Actor)
- 激活条(Activation)
- 消息(Message)
sequenceDiagram
participant Alice
participant Bob
Alice->>Bob: Hello Bob, how are you?
Bob-->>Alice: I am fine, thanks!
Alice->>Bob: Want to go for lunch?
Bob-->>Alice: Sure!
3. 甘特图(Gantt Chart)
用于项目管理和时间安排。
gantt
title Project Timeline
dateFormat YYYY-MM-DD
section Phase 1
Task A :a1, 2025-04-01, 30d
Task B :a2, after a1, 20d
section Phase 2
Task C :a3, after a2, 15d
Task D :a4, 2025-05-01, 10d
4. 饼图(Pie Chart)
用于展示比例关系。
示例:
pie
title Tasks Distribution
"Task A" : 30
"Task B" : 20
"Task C" : 50
5. 用户旅程图(User Journey)
用于描述用户与系统的交互路径。
journey
title My Working Day
section Morning
Wake up : 5
Eat breakfast : 3
section Work
Code : 6
Meeting : 2
section Evening
Dinner : 2
Sleep : 6
6. 实体关系图(Entity Relationship Diagram)
用于数据库设计。
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE_ITEM : contains
CUSTOMER }|..|{ DELIVERY : delivers
7. 需求图(Requirement Diagram)
用于需求管理。
requirementDiagram
requirement test_req {
id: 1
text: the test shall pass
risk: high
verifymethod: test
}
element test_entity {
type: simulation
}
test_entity - satisfies -> test_req
四、复杂案例实战
案例一:多分支逻辑流程图
graph TD
A[开始] --> B{登录验证}
B -- 成功 --> C[进入主页]
B -- 失败 --> D[显示错误信息]
D --> E[重新登录]
C --> F[选择功能]
F --> G{是否有权限?}
G -- 是 --> H[执行操作]
G -- 否 --> I[提示无权限]
案例二:系统架构图
graph TD
A[前端] -->|API调用| B(后端)
B -->|数据库查询| C[MySQL]
B -->|缓存| D[Redis]
B -->|消息队列| E[Kafka]
E --> F[异步处理服务]
案例三:微服务架构图
graph LR
A[网关] --> B[认证服务]
A --> C[订单服务]
A --> D[支付服务]
B --> E[用户中心]
C --> F[库存服务]
D --> G[银行接口]
F --> H[仓储系统]
📝 五、高级技巧与最佳实践
1. 使用子图(Subgraphs)
graph TD
subgraph Frontend
A[React] --> B[Redux]
end
subgraph Backend
C[Node.js] --> D[MongoDB]
end
B --> C
2. 自定义样式
classDef default fill:#f9f9f9,stroke:#333;
classDef highlight fill:#ffddbb,stroke:#f00;
graph TD
A[开始] --> B[处理]
class A,B highlight;
3. 注释与分组
graph TD
%% This is a comment
A[开始] --> B[步骤1]
B --> C[步骤2]
style C fill:#f00,color:#fff;
复杂图
graph TD
%% 定义节点
A[Client]
H[Session]
C[Leader]
D[Follower 1]
E[Follower 2]
F[Observer]
B[ZooKeeper<br>Ensemble]
G[(ZNode<br>树形数据模型)]
%% 客户端与集群连接
A --> H
H --> C
H --> D
H --> E
H --> F
%% 集群节点关系
B --> C
B --> D
B --> E
B --> F
%% 节点通信
C -->|事务同步| D
C -->|事务同步| E
D -->|心跳响应| C
E -->|心跳响应| C
%% 子图定义
subgraph "ZooKeeper集群"
direction TB
C
D
E
F
end
%% 数据模型关联
C -.-> G
D -.-> G
E -.-> G
F -.-> G
%% 样式定义
style A fill:#f9f,stroke:#333,stroke-width:1px
style C fill:#0f0,stroke:#333,stroke-width:1px
style D fill:#0f0,stroke:#333,stroke-width:1px
style E fill:#0f0,stroke:#333,stroke-width:1px
style F fill:#ff0,stroke:#333,stroke-width:1px
style G fill:#88f,stroke:#333,stroke-width:1px
style H fill:#fff5b4,stroke:#333,stroke-width:1px
style B fill:#e6e6e6,stroke:#999,stroke-width:1px,font-weight:bold
%% 注释标签(优化版)
classDef noteStyle fill:#f8f8f8,stroke:#aaa,stroke-width:1px,font-size:12px
note1([客户端通过Session连接集群,\n发送读写请求]):::noteStyle
note2([主节点处理所有写请求,\n协调集群状态]):::noteStyle
note3([从节点同步事务,参与选举]):::noteStyle
note4([观察节点扩展读性能,\n不参与投票]):::noteStyle
note5([树形数据结构,支持临时/持久节点,\n版本号保证数据一致性]):::noteStyle
%% 注释定位
note1 -->|1cm| A
note2 -->|1cm| C
note3 -->|1cm| D
note4 -->|1cm| F
note5 -->|1cm| G
graph TD
%% 定义节点
A[Client]
H[Session]
C[Leader]
D[Follower 1]
E[Follower 2]
F[Observer]
B[ZooKeeper<br>Ensemble]
G[(ZNode<br>树形数据模型)]
%% 客户端与集群连接
A --> H
H --> C
H --> D
H --> E
H --> F
%% 集群节点关系
B --> C
B --> D
B --> E
B --> F
%% 节点通信
C -->|事务同步| D
C -->|事务同步| E
D -->|心跳响应| C
E -->|心跳响应| C
%% 子图定义
subgraph "ZooKeeper集群"
direction TB
C
D
E
F
end
%% 数据模型关联
C -.-> G
D -.-> G
E -.-> G
F -.-> G
%% 样式定义
style A fill:#f9f,stroke:#333,stroke-width:1px
style C fill:#0f0,stroke:#333,stroke-width:1px
style D fill:#0f0,stroke:#333,stroke-width:1px
style E fill:#0f0,stroke:#333,stroke-width:1px
style F fill:#ff0,stroke:#333,stroke-width:1px
style G fill:#88f,stroke:#333,stroke-width:1px
style H fill:#fff5b4,stroke:#333,stroke-width:1px
style B fill:#e6e6e6,stroke:#999,stroke-width:1px,font-weight:bold
%% 注释标签(优化版)
classDef noteStyle fill:#f8f8f8,stroke:#aaa,stroke-width:1px,font-size:12px
note1([客户端通过Session连接集群,\n发送读写请求]):::noteStyle
note2([主节点处理所有写请求,\n协调集群状态]):::noteStyle
note3([从节点同步事务,参与选举]):::noteStyle
note4([观察节点扩展读性能,\n不参与投票]):::noteStyle
note5([树形数据结构,支持临时/持久节点,\n版本号保证数据一致性]):::noteStyle
%% 注释定位
note1 -->|1cm| A
note2 -->|1cm| C
note3 -->|1cm| D
note4 -->|1cm| F
note5 -->|1cm| G
ZooKeeper 架构 Mermaid 图解详解
以下是对提供的 Mermaid 流程图代码的详细解析,帮助你逐步理解其结构、逻辑和可视化效果。
🧱 一、整体结构概览
该 Mermaid 图描述了一个 ZooKeeper 集群架构,包括客户端连接、集群节点角色(Leader、Follower、Observer)、数据模型(ZNode)以及各组件之间的交互关系。
🔁 二、流程图组成详解
1. 节点定义(Nodes)
节点 | 含义 |
---|---|
A[Client] |
客户端,发起读写请求 |
H[Session] |
会话,表示客户端与集群之间的连接 |
C[Leader] |
主节点,负责处理写请求并协调事务同步 |
D[Follower 1] , E[Follower 2] |
从节点,参与投票和事务同步 |
F[Observer] |
观察者节点,不参与投票,仅用于扩展读性能 |
B[ZooKeeper<br>Ensemble] |
集群容器,包含所有节点 |
G[(ZNode<br>树形数据模型)] |
数据模型,存储 ZooKeeper 的层次化数据 |
2. 连接关系(Edges)
客户端与集群连接:
A --> H
H --> C
H --> D
H --> E
H --> F
- 客户端通过 Session 建立连接。
- Session 可以连接到 Leader、Follower 或 Observer。
- 实际上,客户端通常只连接一个节点,由该节点转发请求。
集群节点关系:
B --> C
B --> D
B --> E
B --> F
- 表示这些节点属于同一个 ZooKeeper 集群(Ensemble)。
节点通信:
C -->|事务同步| D
C -->|事务同步| E
D -->|心跳响应| C
E -->|心跳响应| C
- Leader 向 Follower 推送事务日志(Proposal)。
- Follower 向 Leader 发送心跳和事务确认(Ack)。
3. 子图(Subgraphs)
subgraph "ZooKeeper集群"
direction TB
C
D
E
F
end
- 使用子图将 Leader、Follower 和 Observer 归类为一个“ZooKeeper集群”模块。
direction TB
表示子图内的布局方向为 Top to Bottom。
4. ZNode 数据模型关联
C -.-> G
D -.-> G
E -.-> G
F -.-> G
- 所有节点都访问共享的数据模型 ZNode。
- 虚线表示这是一种数据访问或引用关系。
5. 样式设置(Style)
使用 style
指令为不同节点设置颜色、边框等样式,增强可读性:
节点 | 样式说明 |
---|---|
A (Client) |
粉色背景 |
C~E (Leader/Follower) |
绿色背景 |
F (Observer) |
黄色背景 |
G (ZNode) |
蓝紫色背景 |
H (Session) |
浅黄色背景 |
B (Ensemble) |
灰色背景,加粗字体 |
6. 注释标签(Notes)
定义了多个注释标签,解释每个节点的功能:
classDef noteStyle fill:#f8f8f8,stroke:#aaa,stroke-width:1px,font-size:12px
note1([客户端通过Session连接集群,\n发送读写请求]):::noteStyle
...
note1 -->|1cm| A
- 使用
classDef
自定义注释样式。 - 每个注释通过虚线连接到对应的节点,帮助快速定位和理解。
🧪 三、运行效果预览
你可以将此 Mermaid 代码粘贴到 Mermaid Live Editor 中查看图形化效果。
生成的图表将清晰展示:
- 客户端如何通过 Session 与集群建立连接;
- 集群中各个角色(Leader、Follower、Observer)的关系;
- 节点之间的事务同步和心跳机制;
- 数据模型 ZNode 的共享访问;
- 每个节点功能的简要说明(通过注释)。
📌 四、关键知识点总结
模块 | 功能 |
---|---|
Client | 发起请求,与集群建立 Session |
Session | 维护客户端与服务端的连接状态 |
Leader | 处理所有写请求,协调事务同步 |
Follower | 参与选举和事务同步,提供读服务 |
Observer | 提供额外读能力,不参与投票 |
ZNode | 层次化数据模型,支持临时/持久节点 |
Ensemble | ZooKeeper 集群的整体视图 |
Heartbeat | 保持节点间连接活跃 |
Transaction Sync | 保证集群数据一致性 |
📚 五、学习建议
- 动手实践:在 Mermaid Live Editor 中修改节点、连线或样式,观察变化。
- 结合文档:查阅 Mermaid 官方文档 了解更高级用法。
- 模拟真实场景:尝试绘制 Kafka、Kubernetes 等系统的架构图,提升绘图能力。
- 加入注释和分组:提高图表可读性和专业度。
✅ 六、结语
通过本教程,你已经掌握了如何使用 Mermaid 描述复杂的系统架构图,并能理解 ZooKeeper 的基本工作原理。继续练习更多图表类型(如时序图、甘特图等),你将成为熟练的 Mermaid 编码高手!
如果你有任何问题,欢迎随时提问!🚀
Follower* | 参与选举和事务同步,提供读服务 |
| Observer | 提供额外读能力,不参与投票 |
| ZNode | 层次化数据模型,支持临时/持久节点 |
| Ensemble | ZooKeeper 集群的整体视图 |
| Heartbeat | 保持节点间连接活跃 |
| Transaction Sync | 保证集群数据一致性 |
📚 五、学习建议
- 动手实践:在 Mermaid Live Editor 中修改节点、连线或样式,观察变化。
- 结合文档:查阅 Mermaid 官方文档 了解更高级用法。
- 模拟真实场景:尝试绘制 Kafka、Kubernetes 等系统的架构图,提升绘图能力。
- 加入注释和分组:提高图表可读性和专业度。
✅ 六、结语
通过本教程,你已经掌握了如何使用 Mermaid 描述复杂的系统架构图,并能理解 ZooKeeper 的基本工作原理。继续练习更多图表类型(如时序图、甘特图等),你将成为熟练的 Mermaid 编码高手!
如果你有任何问题,欢迎随时提问!🚀