当前位置: 首页 > news >正文

Mermaid学习第二部

Mermaid学习第二部

文章目录

  • Mermaid学习第二部
    • Mermaid简介
    • 基本结构
    • 常见图表类型
      • 1. 流程图(Flowchart)
        • 方向标识
        • 节点类型
        • 连接线:
      • 2. 时序图(Sequence Diagram)
      • 3. 甘特图(Gantt Chart)
      • 4. 饼图(Pie Chart)
      • 5. 用户旅程图(User Journey)
      • 6. 实体关系图(Entity Relationship Diagram)
      • 7. 需求图(Requirement Diagram)
      • 四、复杂案例实战
        • 案例一:多分支逻辑流程图
        • 案例二:系统架构图
        • 案例三:微服务架构图
      • 📝 五、高级技巧与最佳实践
        • 1. 使用子图(Subgraphs)
        • 2. 自定义样式
        • 3. 注释与分组
    • 复杂图
  • ZooKeeper 架构 Mermaid 图解详解
    • 🧱 一、整体结构概览
    • 🔁 二、流程图组成详解
      • 1. 节点定义(Nodes)
      • 2. 连接关系(Edges)
        • 客户端与集群连接:
        • 集群节点关系:
        • 节点通信:
      • 3. 子图(Subgraphs)
      • 4. ZNode 数据模型关联
      • 5. 样式设置(Style)
      • 6. 注释标签(Notes)
    • 🧪 三、运行效果预览
    • 📌 四、关键知识点总结
    • 📚 五、学习建议
    • ✅ 六、结语
    • 📚 五、学习建议
    • ✅ 六、结语

Mermaid简介

Mermaid 是一种基于文本的图表生成工具,支持多种类型的图表,包括流程图(flowchart)、时序图(sequence diagram)、甘特图(gantt)等。它广泛用于文档、博客、Wiki、笔记系统中(如 Typora、VS Code、Obsidian 等)。
Mermaid 使用简单的 Markdown 风格语法来定义图形,并通过 JavaScript 引擎渲染为 SVG 图像。

基本结构

Mermaid 图表以 graph 开头,后跟方向(如 TD 表示 Top Down),然后是节点和连接线。

graph TDA[开始] --> 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 LRA[开始] --> B{是否继续?}B -- 是 --> C[继续执行]B -- 否 --> D[结束]C --> E[下一步]D --> F((结束))
开始
是否继续?
继续执行
结束
下一步
结束

2. 时序图(Sequence Diagram)

用于表示对象之间的交互顺序。

关键元素:

  • 参与者(Actor)
  • 激活条(Activation)
  • 消息(Message)
sequenceDiagramparticipant Aliceparticipant BobAlice->>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)

用于项目管理和时间安排。

gantttitle Project TimelinedateFormat  YYYY-MM-DDsection Phase 1Task A        :a1, 2025-04-01, 30dTask B        :a2, after a1, 20dsection Phase 2Task C        :a3, after a2, 15dTask 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)

用于展示比例关系。

示例:

pietitle 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)

用于描述用户与系统的交互路径。

journeytitle My Working Daysection MorningWake up : 5Eat breakfast : 3section WorkCode : 6Meeting : 2section EveningDinner : 2Sleep : 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)

用于数据库设计。

erDiagramCUSTOMER ||--o{ ORDER : placesORDER ||--|{ LINE_ITEM : containsCUSTOMER }|..|{ DELIVERY : delivers
CUSTOMER ORDER LINE_ITEM DELIVERY places contains delivers

7. 需求图(Requirement Diagram)

用于需求管理。

requirementDiagramrequirement test_req {id: 1text: the test shall passrisk: highverifymethod: 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 TDA[开始] --> B{登录验证}B -- 成功 --> C[进入主页]B -- 失败 --> D[显示错误信息]D --> E[重新登录]C --> F[选择功能]F --> G{是否有权限?}G -- 是 --> H[执行操作]G -- 否 --> I[提示无权限]
成功
失败
开始
登录验证
进入主页
显示错误信息
重新登录
选择功能
是否有权限?
执行操作
提示无权限
案例二:系统架构图
graph TDA[前端] -->|API调用| B(后端)B -->|数据库查询| C[MySQL]B -->|缓存| D[Redis]B -->|消息队列| E[Kafka]E --> F[异步处理服务]
API调用
数据库查询
缓存
消息队列
前端
后端
MySQL
Redis
Kafka
异步处理服务
案例三:微服务架构图
graph LRA[网关] --> B[认证服务]A --> C[订单服务]A --> D[支付服务]B --> E[用户中心]C --> F[库存服务]D --> G[银行接口]F --> H[仓储系统]
网关
认证服务
订单服务
支付服务
用户中心
库存服务
银行接口
仓储系统

📝 五、高级技巧与最佳实践

1. 使用子图(Subgraphs)
graph TDsubgraph FrontendA[React] --> B[Redux]endsubgraph BackendC[Node.js] --> D[MongoDB]endB --> C
Backend
Frontend
MongoDB
Node.js
Redux
React
2. 自定义样式
classDef default fill:#f9f9f9,stroke:#333;
classDef highlight fill:#ffddbb,stroke:#f00;graph TDA[开始] --> B[处理]class A,B highlight;
开始
处理
3. 注释与分组
graph TD%% This is a commentA[开始] --> 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 --> HH --> CH --> DH --> EH --> F%% 集群节点关系B --> CB --> DB --> EB --> F%% 节点通信C -->|事务同步| DC -->|事务同步| ED -->|心跳响应| CE -->|心跳响应| C%% 子图定义subgraph "ZooKeeper集群"direction TBCDEFend%% 数据模型关联C -.-> GD -.-> GE -.-> GF -.-> G%% 样式定义style A fill:#f9f,stroke:#333,stroke-width:1pxstyle C fill:#0f0,stroke:#333,stroke-width:1pxstyle D fill:#0f0,stroke:#333,stroke-width:1pxstyle E fill:#0f0,stroke:#333,stroke-width:1pxstyle F fill:#ff0,stroke:#333,stroke-width:1pxstyle G fill:#88f,stroke:#333,stroke-width:1pxstyle H fill:#fff5b4,stroke:#333,stroke-width:1pxstyle B fill:#e6e6e6,stroke:#999,stroke-width:1px,font-weight:bold%% 注释标签(优化版)classDef noteStyle fill:#f8f8f8,stroke:#aaa,stroke-width:1px,font-size:12pxnote1([客户端通过Session连接集群,\n发送读写请求]):::noteStylenote2([主节点处理所有写请求,\n协调集群状态]):::noteStylenote3([从节点同步事务,参与选举]):::noteStylenote4([观察节点扩展读性能,\n不参与投票]):::noteStylenote5([树形数据结构,支持临时/持久节点,\n版本号保证数据一致性]):::noteStyle%% 注释定位note1 -->|1cm| Anote2 -->|1cm| Cnote3 -->|1cm| Dnote4 -->|1cm| Fnote5 -->|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 --> HH --> CH --> DH --> EH --> F%% 集群节点关系B --> CB --> DB --> EB --> F%% 节点通信C -->|事务同步| DC -->|事务同步| ED -->|心跳响应| CE -->|心跳响应| C%% 子图定义subgraph "ZooKeeper集群"direction TBCDEFend%% 数据模型关联C -.-> GD -.-> GE -.-> GF -.-> G%% 样式定义style A fill:#f9f,stroke:#333,stroke-width:1pxstyle C fill:#0f0,stroke:#333,stroke-width:1pxstyle D fill:#0f0,stroke:#333,stroke-width:1pxstyle E fill:#0f0,stroke:#333,stroke-width:1pxstyle F fill:#ff0,stroke:#333,stroke-width:1pxstyle G fill:#88f,stroke:#333,stroke-width:1pxstyle H fill:#fff5b4,stroke:#333,stroke-width:1pxstyle B fill:#e6e6e6,stroke:#999,stroke-width:1px,font-weight:bold%% 注释标签(优化版)classDef noteStyle fill:#f8f8f8,stroke:#aaa,stroke-width:1px,font-size:12pxnote1([客户端通过Session连接集群,\n发送读写请求]):::noteStylenote2([主节点处理所有写请求,\n协调集群状态]):::noteStylenote3([从节点同步事务,参与选举]):::noteStylenote4([观察节点扩展读性能,\n不参与投票]):::noteStylenote5([树形数据结构,支持临时/持久节点,\n版本号保证数据一致性]):::noteStyle%% 注释定位note1 -->|1cm| Anote2 -->|1cm| Cnote3 -->|1cm| Dnote4 -->|1cm| Fnote5 -->|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 TBCDEF
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层次化数据模型,支持临时/持久节点
EnsembleZooKeeper 集群的整体视图
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 编码高手!

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

相关文章:

  • vs2010怎么做网站前台/百度问答一天能赚100块吗
  • 做美女图片网站需要备案吗/什么软件可以优化关键词
  • 做网站 淘宝/深圳最新消息
  • 兴力网站建设/疫情防控最新信息
  • asp.net网站开发文档/seo站内优化技巧
  • 海珠区专业做网站公司/怎样在百度打广告
  • Unreal Engine附着组件调用区别
  • 【C语言】解决VScode中文乱码问题
  • C2远控篇PowerShell有无文件落地C#参数调用绕AMSIETW去混淆特征
  • JAVA框架有哪些?
  • Vue实现选中多张图片一起拖拽功能
  • 「Linux用户账号管理」组群管理
  • XML读取和设置例子
  • 人力资源紧张时,如何缓解项目推进瓶颈
  • Java的SpringAI+Deepseek大模型实战【二】
  • 飞往大厂梦之算法提升-7
  • Vue 列表过滤:语法与注意事项详解
  • Docker知识点汇总——AI教你学Docker
  • LINUX 623 FTP回顾
  • C++面向对象3——C++面向对象的权限、引用与指针
  • H5新增属性
  • logstash读取kafka日志写到oss归档存储180天
  • 2025年CSS最新高频面试题及核心解析
  • 边缘-云协同智能视觉系统:实时计算与云端智能的融合架构
  • Linux系统能ping通ip但无法ping通域名的解决方法
  • LeetCode热题100—— 160. 相交链表