Mermaid vs PlantUML 软件架构图:架构基线该选谁?

Simon Yu··Updated ·8 min read
mermaidplantumlsoftware-architecturearchitecture-diagramdeployment-diagramdiagram-as-code

只比较正式软件架构建模能力,PlantUML 更强,应作为架构基线的默认选择;Mermaid 适合服务地图和频繁变化的资源总览。 如果你需要整体工具对比,请看 Mermaid vs PlantUML 系列总览;如果只关心 C4 语法和成熟度,可以直接看 Mermaid C4 vs C4-PlantUML

本文的官方资料统一核验于 2026-07-22。这里的“架构基线”指要在评审、设计归档和跨团队沟通中长期维护的图,而不是每一张服务关系草图。需要 UML 专用的组件或部署表示法、共享样式、可复用 include 和长期治理时,应选 PlantUML;服务与资源关系随实现频繁调整时,Mermaid 更合适。

“软件架构图”范围很大,可能指简单服务地图、UML 组件图、部署拓扑,也可能指 C4 Context 或 Container 视图。不先说明视图类型,任何工具比较都会变得空泛。本文会把这些任务拆开。

核心结论

  • 架构基线优先 PlantUML:组件接口、部署节点和样式复用都有专用表达。
  • Mermaid Architecture Diagram 适合服务与资源总览,但不等同于 UML Deployment Diagram。
  • Mermaid 官网最新版已增加布局控制;本项目锁定的 11.6.0 不能直接使用 11.15.0、11.16.0 新增语法。
  • C4 关注抽象层级,时序图关注消息级交互,二者不应互相替代。

官方能力参考:

Mermaid vs PlantUML 软件架构图核心差异是什么?

架构任务MermaidPlantUML更好的默认选择
临时服务地图Flowchart 或 Architecture Diagram组件风格图Mermaid
系统上下文C4、Flowchart 或 Architecture DiagramC4-PlantUML 或组件图临时上下文说明选 Mermaid,架构基线选 C4-PlantUML
组件接口用 Architecture、Block、Flowchart 或 C4 近似内置 component、port 和 interface 语法PlantUML
部署拓扑Architecture 或 experimental C4 Deployment 可说明资源内置 node、artifact、database、queue 和嵌套部署元素PlantUML
云与资源总览Architecture Diagram 的 group、service、junction 和 icon部署图加标准库图标取决于所需细节和规范程度
共享图形规范主题和配置,部分图类型有边界include、宏、主题、stereotype 和 skinparamPlantUML
混合架构视图多种 Mermaid 图类型广泛 UML 图族与 C4 库统一表示法图集选 PlantUML

Mermaid Architecture Diagram 和 PlantUML Deployment Diagram 不是同一套标准。它们在展示服务与基础设施时有交集,但承诺不同:Mermaid 提供简洁的资源地图,PlantUML 提供更丰富的 UML 导向建模语言。

这张架构图究竟要回答什么问题?

选择语法之前,先说清楚架构问题:

  • 谁使用系统,哪些内容在边界之外? 使用 Context 视图。
  • 系统由哪些应用和数据存储组成? 使用 Container 或服务视图。
  • 哪些模块提供或消费接口? 使用 Component 视图。
  • 进程和构件运行在哪里? 使用 Deployment 视图。
  • 一次请求如何执行? 应该使用时序图,而不是再画一张方框地图。
  • 业务流程如何分支? 使用活动图

这样可以避免最常见的“万能架构图”问题:一页方框同时混入业务边界、源码模块、运行节点和请求顺序,却没有清楚回答任何一个问题。

Mermaid 什么时候适合服务与资源地图?

Mermaid Architecture Diagram 官方文档说明该图型从 11.1.0 起提供,并包含 group、service、edge 和 junction。官网最新版文档中,11.15.0 已提供 nodeSeparationidealEdgeLengthMultiplieredgeElasticitynumIter 与确定性 seed 等布局参数,11.16.0 再提供 align rowalign column。这些是最新版能力;本项目锁定 Mermaid 11.6.0,不能把它们当作当前可用语法。

architecture-beta
  group app(cloud)[Application]

  service web(internet)[Web App] in app
  service api(server)[API] in app
  service db(database)[Database] in app
  service queue(disk)[Job Queue] in app

  web:R --> L:api
  api:B --> T:db
  api:R --> L:queue

这张图只回答一个问题:核心资源之间如何通信。服务或资源关系变化时,可以直接更新对应节点和连线,而不混入组件契约或部署语义。

以下架构任务尤其适合 Mermaid:

  • 架构随代码频繁变化。
  • groupservicejunction 已足以表达所需资源关系。
  • 图的目标是展示当前服务地图,而不是定义组件接口或部署节点语义。
  • 简单依赖关系比明确的 port 或 UML 部署表示法更重要。

不要把所有架构问题都塞进这张图。如果同时加入团队、源码 package、Kubernetes node、请求步骤、数据库、队列和安全区域,任何语法都会得到过载模型。

PlantUML 更适合组件契约

组件图不只是用箭头连接方框。它可能需要提供与依赖接口、dependency、package、boundary、stereotype 和稳定命名规则。

@startuml
skinparam componentStyle uml2

package "OnUML Platform" {
  [Web App] as Web
  [Diagram API] as API
  [Render Service] as Renderer
  database "Project Store" as DB

  interface "Diagram Commands" as Commands
  interface "Render Requests" as RenderRequests

  Web - Commands
  Commands - API
  API - RenderRequests
  RenderRequests - Renderer
  API --> DB : reads and writes
}
@enduml

Mermaid 可以使用 Flowchart、Block Diagram、Architecture Diagram 或 C4 Component 近似表达这类结构,用于说明时可能已经够用。如果接口与依赖本身就是评审契约,而不只是线条标签,PlantUML 更合适。

如果重点是对象结构、继承、组合和方法级建模,请看专门的 Mermaid vs PlantUML 类图对比。类图不应该承担服务边界,组件图也不应该列出每一个类。

部署视图为什么是 PlantUML 明显拉开差距的地方?

部署视图回答软件运行在哪里。PlantUML 可以嵌套 node、execution environment、artifact、database、queue、storage 和其他运行元素。

@startuml
node "Edge Network" as Edge {
  artifact "Next.js Web App" as Web
  artifact "API Routes" as API
}

cloud "Managed Services" as Cloud {
  database "PostgreSQL" as DB
  queue "Render Queue" as Queue
  node "Render Worker" as Worker
}

Web --> API : HTTPS
API --> DB : SQL
API --> Queue : enqueue
Queue --> Worker : deliver job
Worker --> DB : store result
@enduml

Mermaid Architecture Diagram 可以画出类似资源拓扑,Mermaid C4 也提供 Deployment 视图。需要明确的嵌套运行环境、artifact、节点类型、可复用基础设施样式,或者需要一整套相关 UML 图时,PlantUML 仍然更强。

更重要的是保持语义诚实:

  • Mermaid Architecture Diagram 可以是一张很好的部署总览。
  • 不能因此把它描述成完全等价的 UML Deployment Diagram。
  • PlantUML Deployment Diagram 也可以只保留必要节点;UML 专用表示法不要求把所有运行细节塞进一张图。

C4 与时序图应该放在架构文档的哪里?

C4 把架构组织成 Context、Container、Component 和 Code 四个核心静态层级。它决定展示哪个抽象层级,Mermaid 或 PlantUML 决定如何描述和渲染;C4 Dynamic 说明静态模型元素在一个用例中的协作,时序图则用于消息级顺序与调用语义。

需要正式 C4 文档时,详细比较与语法边界请看 Mermaid C4 vs C4-PlantUML。需要解释一次请求的消息级交互,请改用 Mermaid vs PlantUML 时序图,不要在架构地图中塞入调用先后。

实用的混合策略

所有图统一一种语法可以简化工具链,但不一定是最低维护成本。一个实用分法是:

文档层级建议格式原因
服务依赖总览Mermaid Architecture 或 Flowchart直接表达服务、资源和连接关系
API 交互Mermaid 或 PlantUML Sequence根据交互复杂度选择
架构基线PlantUML 或 C4-PlantUML共享规范和复用能力更强
组件契约PlantUML接口语义更完整
部署拓扑PlantUML运行环境和节点建模更丰富

同时使用两种语法的前提是每张图都有负责人和明确目的。否则同一架构会被重复维护,增加文档漂移风险。

应该怎么选软件架构图工具?

以下情况选择 Mermaid:

  • 需要频繁跟随服务或资源关系变化。
  • 主要用于说明服务、资源或较小的系统边界。
  • 不要求组件接口、嵌套部署节点或跨图样式复用。

以下情况选择 PlantUML:

  • 图属于长期维护的架构基线。
  • 需要 UML 组件或部署语义。
  • 共享 include、宏、stereotype、theme 或 icon 很重要。
  • 多种架构视图需要统一渲染流程。

频繁变化的服务地图与治理型架构资产有不同负责人和更新节奏时,可以同时使用两者。

FAQ

Mermaid 足够画软件架构图吗?

如果图用于解释服务关系、系统边界或资源总览,通常足够。评审依赖明确的组件 port 和 interface、嵌套部署节点、高级复用或严格视觉规范时,PlantUML 更合适。

Mermaid 能画部署图吗?

Mermaid 可以用 Architecture Diagram,或者目前仍属于 experimental 的 C4 Deployment 语法表达部署导向视图。它们能够说明云资源和运行拓扑,但不等同于 PlantUML 的 UML 部署表示法;PlantUML 提供了更丰富的部署专用元素。

所有架构图都应该使用 C4 吗?

不需要。多个抽象层级能帮助读者理解系统时,C4 很有价值。小型服务可能只需要一张依赖图和一张时序图。只维护真正能回答问题的最小视图集合。

微服务架构应该选哪个?

频繁更新的服务地图通常更适合 Mermaid;治理型架构基线通常更适合 PlantUML 或 C4-PlantUML。要表达一次请求经过哪些微服务,时序图会比两种架构地图都更清楚。

最后总结:Mermaid 让服务地图贴近日常工程工作;PlantUML 为组件和部署文档提供更明确的表示法、复用和控制能力。为每一张图先确定问题,再决定语法,能减少文档漂移。