Mermaid学习第二部

发布于:2025-06-24 ⋅ 阅读:(16) ⋅ 点赞:(0)

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
执行操作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!
Alice Bob Hello Bob, how are you? I am fine, thanks! Want to go for lunch? Sure! Alice Bob

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
2025-04-06 2025-04-13 2025-04-20 2025-04-27 2025-05-04 2025-05-11 2025-05-18 2025-05-25 2025-06-01 Task A Task B Task D Task C Phase 1 Phase 2 Project Timeline

4. 饼图(Pie Chart)

用于展示比例关系。

示例:

pie
    title Tasks Distribution
    "Task A" : 30
    "Task B" : 20
    "Task C" : 50
30% 20% 50% Tasks Distribution Task A Task B Task C

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
Morning
Morning
Wake up
Wake up
Eat breakfast
Eat breakfast
Work
Work
Code
Code
Meeting
Meeting
Evening
Evening
Dinner
Dinner
Sleep
Sleep
My Working Day

6. 实体关系图(Entity Relationship Diagram)

用于数据库设计。

erDiagram
    CUSTOMER ||--o{ ORDER : places
    ORDER ||--|{ LINE_ITEM : contains
    CUSTOMER }|..|{ DELIVERY : delivers
CUSTOMER ORDER LINE_ITEM DELIVERY places contains 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
<<Requirement>> test_req Id: 1 Text: the test shall pass Risk: High Verification: Test <<Element>> test_entity Type: simulation Doc Ref: None <<satisfies>>

四、复杂案例实战

案例一:多分支逻辑流程图
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[异步处理服务]

API调用
数据库查询
缓存
消息队列
前端
后端
MySQL
Redis
Kafka
异步处理服务
案例三:微服务架构图
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

Backend
Frontend
MongoDB
Node.js
Redux
React
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;
开始
步骤1
步骤2

复杂图

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 保证集群数据一致性

📚 五、学习建议

  1. 动手实践:在 Mermaid Live Editor 中修改节点、连线或样式,观察变化。
  2. 结合文档:查阅 Mermaid 官方文档 了解更高级用法。
  3. 模拟真实场景:尝试绘制 Kafka、Kubernetes 等系统的架构图,提升绘图能力。
  4. 加入注释和分组:提高图表可读性和专业度。

✅ 六、结语

通过本教程,你已经掌握了如何使用 Mermaid 描述复杂的系统架构图,并能理解 ZooKeeper 的基本工作原理。继续练习更多图表类型(如时序图、甘特图等),你将成为熟练的 Mermaid 编码高手!

如果你有任何问题,欢迎随时提问!🚀

Follower* | 参与选举和事务同步,提供读服务 |
| Observer | 提供额外读能力,不参与投票 |
| ZNode | 层次化数据模型,支持临时/持久节点 |
| Ensemble | ZooKeeper 集群的整体视图 |
| Heartbeat | 保持节点间连接活跃 |
| Transaction Sync | 保证集群数据一致性 |


📚 五、学习建议

  1. 动手实践:在 Mermaid Live Editor 中修改节点、连线或样式,观察变化。
  2. 结合文档:查阅 Mermaid 官方文档 了解更高级用法。
  3. 模拟真实场景:尝试绘制 Kafka、Kubernetes 等系统的架构图,提升绘图能力。
  4. 加入注释和分组:提高图表可读性和专业度。

✅ 六、结语

通过本教程,你已经掌握了如何使用 Mermaid 描述复杂的系统架构图,并能理解 ZooKeeper 的基本工作原理。继续练习更多图表类型(如时序图、甘特图等),你将成为熟练的 Mermaid 编码高手!

如果你有任何问题,欢迎随时提问!🚀


网站公告

今日签到

点亮在社区的每一天
去签到