How to Create System Design Diagrams using Python

TL;DR · AI 摘要
How to Create System Design Diagrams using Python October 8, 2026 / Python Zaira Hira Creating system architecture desig...
核心要点
- 主题聚焦:How to Create System Design Diagrams using Pytho
- 来源:freeCodeCamp.org,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
如何使用Python创建系统设计图
2026年10月8日
/
#Python
Zaira Hira
创建系统架构设计图是技术文档的重要组成部分。随着系统复杂性的增加,团队内部的清晰沟通变得尤为重要。
但使用类似画布的工具从零开始创建图表并不总是高效的方式。
幸运的是,我们可以采用代码生成图表的方法来创建图表。在这种方法中,你通过预定义的语法来描述图表组件,而不是手动绘制它们。
目录
- 代码生成图表的优势
- 先决条件与安装
- 什么是 Diagrams?
- 你的第一个图表
- 如何连接节点和数据流
- 数据流分组
- 节点集群
- 边缘连接
- 总结
代码生成图表的优势:
- 通过版本控制跟踪更改。
- 节省时间,因为手动绘制或使用工具需要耗费大量时间进行格式调整。
- 大多数代码生成图表工具支持标准技术图标,如数据库、存储桶、负载均衡器等。
- 可以通过代码在 CI/CD 管道或文档构建过程中自动生成图表。
先决条件与安装
在本教程中,你将学习如何使用 Python Diagrams 库绘制图表。基本先决条件包括:
- Python 3.7+
- 用于安装 Python 包的 pip
- 在操作系统上安装 Graphviz 以渲染输出图像
- Python 包:
pip install diagrams - 用于运行文件的终端,例如:
python diagram.py
什么是 Diagrams?
Diagrams 是一个 Python 库,允许你使用 Python 代码绘制云系统架构。它支持不同的云服务提供商,如 Azure、GCP、AWS 等。
在本教程结束时,你将能够理解这个图表是如何制作的:
你的第一个图表
首先,确保根据先决条件完成环境配置。然后创建一个扩展名为 .py 的 Python 文件,并将以下代码添加到其中:
from diagrams import Diagram
from diagrams.aws.compute import EC2
with Diagram("Practice Architecture"):
EC2("api-server")让我们逐行理解这段代码。
首先,我们导入 Diagram:
from diagrams import Diagram将 Diagram 视为一张空白画布,所有绘制的内容都包含在其中。Diagram 表示一个全局图表上下文。
然后我们导入一个节点类型。节点代表架构中的一个组件。例如,ECS、Lambda、服务和防火墙都是资源类型。
from diagrams.aws.compute import EC2一个节点对象由三部分组成:提供商(provider)、资源类型(resource type)和名称(name)。在上面的例子中,EC2 是由 aws 提供商提供的 compute 类型资源节点。
这从 AWS 计算组中导入了 EC2 节点。我们将使用这个类来创建 EC2 节点。
diagrams.aws.compute 是导入路径,它告诉你 EC2 图标的位置。
diagrams
└── aws
└── compute
└── EC2你可以在 此处 查看不同提供商的官方节点类型。
假设你想在图表中使用 AWS 的 Analytics 组件。首先,你将从上面列出的节点类型中搜索 Analytics。你的导入语句将如下所示:from diagrams.aws.analytics import Analytics。
然后使用 with Diagram 创建图表上下文:
with Diagram("Practice Architecture"):回到你的示例,这会创建一个名为 Practice Architecture 的图表。所有缩进在 Diagram 下的内容都属于该图表。
现在创建一个节点:
EC2("api-server")这会创建一个 EC2 节点,标签显示为 api-server。
最后运行代码。如果你将 Python 代码文件保存为 test.py,使用 python test.py 运行。Diagrams 会在当前文件夹中为你生成一个图像文件:
简而言之,这个过程如下:
请注意,你是在描述基础设施而不是手动绘制它。你不需要考虑绘制和排列图标。你只需要编写 EC2("api-server"),Diagrams 会决定如何渲染它。
我们可以稍微扩展上面的示例,包含两个 EC2 实例:
from diagrams import Diagram
from diagrams.aws.compute import EC2
with Diagram("Practice Architecture"):
EC2("api-server")
EC2("worker")请注意你可以将节点实例分配给变量。这样可以轻松引用它们。
下面的示例演示变量分配:
from diagrams import Diagram
from diagrams.aws.compute import EC2
with Diagram("Practice Architecture"):
api_server = EC2("api-server")
worker = EC2("worker")如何连接节点和数据流
你已经学习了如何创建节点。现在你将看到如何连接它们。
方向由以下符号表示:
- >> 表示从左到右的流向
- << 表示相反方向(从右到左)
- - 表示无向连接
让我们一起看一个示例:
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("The three directions"):
load_balancer = ELB("load-balancer")
web_server = EC2("web-server")
database = RDS("database")
backup_server = EC2("backup-server")
load_balancer >> web_server
web_server << database
database - backup_server注意节点之间的连接:
# 用从左到右的箭头将负载均衡器连接到 Web 服务器
load_balancer >> web_server
# 用从右到左的箭头将 Web 服务器和数据库连接
web_server << database
# 用直线将数据库和备份服务器连接
database - backup_server数据流分组
你还可以使用 Python 列表将一个节点连接到多个节点。这样你就不需要逐个将节点连接到另一个节点。
假设你想实现这个架构:
┌──► web-1 ───┐
load-balancer ──────┼──► web-2 ───┼──► database
└──► web-3 ───┘首先,创建一个负载均衡器:
load_balancer = ELB("entry-point")然后创建多个服务器。你不需要像这样创建三个单独的变量:
server1 = EC2("web-1")
server2 = EC2("web-2")
server3 = EC2("web-3")你可以将它们放入 Python 列表中:
web_servers = [
EC2("web-1"),
EC2("web-2"),
EC2("web-3")
]然后像这样将 LB 节点连接到列表:
load_balancer >> web_servers这样你就无需手动编写:
load_balancer >> web_servers[0]
load_balancer >> web_servers[1]
load_balancer >> web_servers[2]现在将整个列表连接到数据库:
web_servers >> database这种方案有助于减少代码中的冗余部分。它可以帮助定位重复的组件,如多个 Pod、工作节点等。
完整代码如下:
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("Scaled Web App"):
load_balancer = ELB("entry-point")
web_servers = [
EC2("web-1"),
EC2("web-2"),
EC2("web-3")
]
database = RDS("orders-db")
load_balancer >> web_servers >> database集群
可以通过带标签的框将相关节点分组,这种分组方式称为集群。集群内部的节点仍然可以与外部节点建立连接。
分组有助于明确哪些组件属于同一逻辑单元。它可以帮助表示以下概念:
- 应用层级
- 数据库层级
- 可用区
- 区域
- 环境
- 微服务组
- 工作节点组
创建集群的语法如下:
with Cluster("Cluster name"):所有缩进在该语句下的内容都将属于该集群。
以下示例演示了集群的使用方式:
from diagrams import Diagram, Cluster
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
with Diagram("Shop Platform"):
with Cluster("Application Tier"):
apps = [
EC2("app-1"),
EC2("app-2")
]
with Cluster("Database Tier"):
primary_db = RDS("primary-db")
replica_db = RDS("read-replica")
apps >> primary_db
primary_db - replica_db还可以通过以下语法嵌套集群:
with Cluster("Production"):
with Cluster("Backend"):
with Cluster("API"):
...下面是一个嵌套集群的更现实示例:
from diagrams import Diagram, Cluster
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
with Diagram("Production Platform"):
with Cluster("Production Region"):
with Cluster("Application Tier"):
with Cluster("API Servers"):
api1 = EC2("api-1")
api2 = EC2("api-2")
database = RDS("main-db")
api1 >> database
api2 >> database该示例展示了一个包含生产区域的生产平台,生产区域中包含一个应用层级。应用层级进一步将两个 API 服务器分组。生产区域中还有一个独立的 RDS 数据库,两个 API 服务器都连接到该数据库。
通过相互缩进集群定义可以实现集群的嵌套。请参考以下代码片段:
with Cluster("Production Region"):
with Cluster("Application Tier"):
with Cluster("API Servers"):
api1 = EC2("api-1")
api2 = EC2("api-2")边
边提供了另一种连接节点的方式。与简单的 >> 或 << 不同,边允许添加标签、颜色和样式等属性。
之前您使用的是:
现在要使用边,请添加:
from diagrams import Diagram, Edge现在使用边将 app 连接到数据库:
# 标注边
app >> Edge(label="SQL queries") >> database这将使用标注为 "SQL queries" 的边将 app 连接到数据库。
您还可以自定义边的颜色:
app >> Edge(label="SQL", color="red") >> database您也可以修改线型:
app >> Edge(style="dashed") >> database以下是一些其他可用的边样式:
Edge(style="dotted")
Edge(style="bold")下面的示例结合了多种边样式:
from diagrams import Diagram, Edge
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
with Diagram("Payment Service"):
api = EC2("payment-api")
database = RDS("payments-db")
api >> Edge(
label="payment records",
color="darkgreen",
style="dashed"
) >> database请注意,您还可以使用 << 和 - 来定义边。
结论
在本教程中,您学习了如何使用代码即图表(diagram-as-code)方法创建有意义且一致的图表,这些图表可以在团队中良好扩展。这使您能够提高效率,而不会牺牲质量或其他开发或维护任务。
在本教程中,您主要使用了 AWS 组件。您可以在本指南中探索其他可用的提供商,并根据需求创建图表。
感谢您阅读到文章的最后。如果您从文章中有所收获,请考虑与他人分享。
保持联系并继续您的学习旅程!
通过以下方式与我建立联系:
- LinkedIn:我分享与 Linux、网络安全和 DevOps 相关的内容。如果您觉得本文有帮助,请在 LinkedIn 上给予推荐。
- X:我分享预发布更新和一些幕后内容。
编码愉快!
来自我们合作伙伴的推荐课程
(opens in a new tab)
广告
- Coursera 上的 Kubernetes:构建、配置和故障排除集群 EDUCBA 4.9(16 条评分) 2周,每周3小时 初级 证书 查看课程 (opens in a new tab)
- Coursera 上的 Kubernetes 案例研究:部署和故障排除应用 EDUCBA 3周,每周3小时 中级 证书 查看课程 (opens in a new tab)
- Udemy 上的 Linux 高可用性集群 Shikhar Verma 4.6(1,415 条评分) 6小时40分钟 中级 证书 查看课程 (opens in a new tab)
- Udemy 上的 Node、Express、ES6 和 MongoDB 入门 API 开发 Mark Wahlbeck 和 Devslopes by Mark Wahlbeck 4.4(1,400 条评分) 18小时27分钟 初级 证书 查看课程 (opens in a new tab)
更多 Kubernetes 课程在 Class Central
→
让复杂的话题变得易于理解。
如果您读到这里,请感谢作者以表明您对他们的关心。说声谢谢
免费学习编程。freeCodeCamp 的开源课程已帮助超过 40,000 人成为开发者。立即开始