创建简单在线食品订购系统UML部署图的全面指南

1. UML部署图的目的

一个部署图展示了系统的物理/运行时架构

  • 硬件节点(服务器、设备、云实例)
  • 部署在这些节点上的软件构件
  • 执行环境(容器、运行时)
  • 节点之间的通信路径(协议、连接)

对于一个简单在线食品订购系统,它展示了如何:

  • 客户和餐厅的Web界面是如何提供的
  • 业务逻辑如何运行
  • 数据如何存储
  • 外部服务(支付、通知)如何集成

它帮助开发人员、DevOps团队和利益相关者理解部署拓扑、扩展点、安全边界和依赖关系。

2. 部署图中的关键UML元素

元素 UML表示法(PlantUML) 含义/使用场景 构造型示例
节点 node “名称” 可托管构件的计算资源(物理或虚拟) <<设备>>, <<云>>
设备 节点“名称” <<设备>> 物理或虚拟硬件(服务器、移动设备、路由器) <<设备>>, <<服务器>>
执行环境 节点“名称” <<执行环境>> 软件运行时/容器(Tomcat、Node.js、Docker、JVM) <<执行环境>>, <<容器>>
工件 工件“filename.war” 可部署单元(可执行文件、.jar、.js捆绑包、数据库模式、配置文件) <<可执行文件>>, <<文件>>, <<数据库>>
组件 组件“名称” 逻辑软件单元(在部署图中可选;通常由工件实现) <<Web>>, <<服务>>
通信路径 –, –>, ..> 节点之间的网络连接(可带有协议标签) HTTP/HTTPS、WebSocket、RMI
依赖/调用 ..>, –> 使用/依赖(例如:前端调用后端) <<调用>>, <<访问>>
表现/实现 ..> 带有 <<实现>> 或 ..> 工件实现/被部署为组件 <<实现>>, <<表现>>
外部系统 节点“名称” <<外部>> 您无法控制的第三方服务 <<外部>>, <<SaaS>>

3. 部署图的最佳实践(尤其适用于网络系统)

  • 保持简洁且易于阅读简单且可读 — 避免过于拥挤;每个主要环境(开发/预发布/生产,可选)使用一张图
  • 使用有意义的节点分组(将节点嵌套在节点内)以显示集群/云区域
  • 优先使用简洁的表示法 — 仅在相关时显示文件名/配置;跳过冗余的构造型
  • 清晰地显示边界 — 内部云与外部服务之间的界限
  • 在路径上标注协议(HTTP/HTTPS、WebSocket、TCP等)
  • 使用从左到右的方向用于网络系统(客户端 → 服务器 → 数据库的流向感觉更自然)
  • 区分设备(硬件)与运行环境(运行时)
  • 仅在有实际价值时展示实现关系(仅当有实际价值时,例如构件 → 组件)
  • 使用皮肤参数在 PlantUML 中以获得更好的颜色/可读性
  • 适用于小型/中型系统:最多 4–8 个节点

4. 简单在线点餐系统的推荐架构

此系统的简洁现代布局:

  • 客户端 → 浏览器(隐式)与Web 服务器/CDN
  • Web 服务器/CDN托管客户网站和餐厅面板的静态资源及 SPA 资产
  • API 服务器(执行环境)运行后端逻辑
  • 数据库服务器托管 PostgreSQL
  • 外部支付与通知服务

典型节点:

  1. Web 服务器 / CDN <<设备>>
  2. API 服务器 <<执行环境>>
  3. 数据库服务器 <<执行环境>>
  4. 支付网关 <<外部>>
  5. 通知服务 <<外部>>

5. 由 Visual Paradigm AI 聊天机器人生成的图表

优化并清理后的 PlantUML 代码(附解释)

@startuml

title 简单在线点餐系统 – 部署图

从左到右方向

skinparam {
箭头颜色 #424242
箭头字体颜色 #424242
默认字体大小 14
阴影 false
构造型C背景颜色 #ADD1B2
构造型I背景颜色 #ADD1B2
}

‘ ── 节点 ────────────────────────────────────────────────

节点 “Web 服务器 / CDN” <<设备>> 作为 WebServer {
[客户网站 HTML/JS/CSS] #..# (客户 SPA)
[餐厅管理面板 HTML/JS/CSS] #..# (餐厅 SPA)
}

节点 “云后端” <<设备>> 作为 Cloud {
节点 “API 服务器” <<执行环境>> 作为 APIServer {
构件 “backend-api.jar / main.exe” 作为 BackendArtifact
}

节点 “PostgreSQL 服务器” <<执行环境>> 作为 DBServer {
数据库 “PostgreSQL 数据库” 作为 Postgres <<数据库>>
}
}

节点 “支付网关” <<外部>> 作为 Payment {
[支付 API] 作为 PaymentAPI
}

节点 “通知服务” <<外部>> 作为 Notification {
[WebSocket / 推送 API] 作为 NotifyAPI
}

‘ ── 关系 ─────────────────────────────────────────

WebServer –> Cloud : HTTPS (API 调用)

Cloud –> Payment : HTTPS (结账)

Cloud –> Notification : WebSocket / HTTPS (状态更新)

‘ 构件 → 组件实现 (可选但清晰)
(客户 SPA) ..> BackendArtifact : <<调用>>
(餐厅SPA) ..> 后端构件 : <<调用>>

后端构件 –> Postgres : <<JDBC / SQL>>

后端构件 –> 支付API : <<HTTPS调用>>

后端构件 –> 通知API : <<WebSocket / HTTPS>>

‘ 可选:如果你想,可以在数据库上显示协议
‘ 后端构件 -右-> Postgres : <<JDBC>>

note right of Cloud
典型的小型/中型部署:
• 单个虚拟机或小型集群
• API + 数据库可以部署在同一台机器上(为简化起见)
或分开部署以实现更好的扩展性
end note

@enduml

6. 逐步指南:如何构建您自己的部署图

  1. 列出所有执行目标(服务器、容器、外部服务)
  2. 列出可部署构件(实际运行的内容:.js包、.jar、数据库)
  3. 分组为节点(在逻辑上嵌套——例如,API + 数据库在同一个云节点中)
  4. 确定方向(从左到右对 web → API → DB 非常有效)
  5. 添加通信路径并添加协议标签
  6. 添加关键依赖(<<调用>>,<<访问>>)
  7. 应用皮肤参数用于颜色/可读性
  8. 添加注释用于重要决策(单实例与多实例,扩展性备注)
  9. 验证: DevOps工程师能否理解每个组件应部署在何处?

概要 – 简单食品订购部署快速参考

部分 典型节点类型 构件示例 通过以下方式连接
客户界面 Web服务器/CDN <<设备>> SPA捆绑包(HTML/JS) HTTPS → API
餐厅仪表板 Web服务器/CDN <<设备>> 管理SPA捆绑包 HTTPS → API
业务逻辑 API服务器 <<执行环境>> backend-api.jar / 可执行文件 JDBC → 数据库,HTTPS → 外部
数据存储 PostgreSQL <<执行环境>> PostgreSQL数据文件 + 模式
支付 外部 <<SaaS>> 支付API端点 HTTPS
实时更新 外部 <<SaaS>> WebSocket / FCM / APNs WebSocket / HTTPS

这种结构对于MVP或中小型部署(1–3台服务器 + 云数据库 + Stripe/PayPal + Firebase/Pusher)是现实可行的。

当系统扩展时,可自由调整嵌套结构、协议,或添加扩展说明(例如负载均衡器、副本等)。

🔗 参考列表(Markdown 格式)