freeCodeCamp.org

How to Create System Design Diagrams using Python

7.1内容质量
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 分析暂不可用,本条为保底评分与摘要。
#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 文件,并将以下代码添加到其中:

code
from diagrams import Diagram
from diagrams.aws.compute import EC2

with Diagram("Practice Architecture"):
    EC2("api-server")

让我们逐行理解这段代码。

首先,我们导入 Diagram:

code
from diagrams import Diagram

将 Diagram 视为一张空白画布,所有绘制的内容都包含在其中。Diagram 表示一个全局图表上下文。

然后我们导入一个节点类型。节点代表架构中的一个组件。例如,ECS、Lambda、服务和防火墙都是资源类型。

code
from diagrams.aws.compute import EC2

一个节点对象由三部分组成:提供商(provider)、资源类型(resource type)和名称(name)。在上面的例子中,EC2 是由 aws 提供商提供的 compute 类型资源节点。

这从 AWS 计算组中导入了 EC2 节点。我们将使用这个类来创建 EC2 节点。

diagrams.aws.compute 是导入路径,它告诉你 EC2 图标的位置。

code
diagrams
└── aws
    └── compute
        └── EC2

你可以在 此处 查看不同提供商的官方节点类型。

假设你想在图表中使用 AWS 的 Analytics 组件。首先,你将从上面列出的节点类型中搜索 Analytics。你的导入语句将如下所示:from diagrams.aws.analytics import Analytics。

然后使用 with Diagram 创建图表上下文:

code
with Diagram("Practice Architecture"):

回到你的示例,这会创建一个名为 Practice Architecture 的图表。所有缩进在 Diagram 下的内容都属于该图表。

现在创建一个节点:

code
EC2("api-server")

这会创建一个 EC2 节点,标签显示为 api-server。

最后运行代码。如果你将 Python 代码文件保存为 test.py,使用 python test.py 运行。Diagrams 会在当前文件夹中为你生成一个图像文件:

简而言之,这个过程如下:

请注意,你是在描述基础设施而不是手动绘制它。你不需要考虑绘制和排列图标。你只需要编写 EC2("api-server"),Diagrams 会决定如何渲染它。

我们可以稍微扩展上面的示例,包含两个 EC2 实例:

code
from diagrams import Diagram
from diagrams.aws.compute import EC2

with Diagram("Practice Architecture"):
    EC2("api-server")
    EC2("worker")

请注意你可以将节点实例分配给变量。这样可以轻松引用它们。

下面的示例演示变量分配:

code
from diagrams import Diagram
from diagrams.aws.compute import EC2

with Diagram("Practice Architecture"):
    api_server = EC2("api-server")
    worker = EC2("worker")

如何连接节点和数据流

你已经学习了如何创建节点。现在你将看到如何连接它们。

方向由以下符号表示:

  • >> 表示从左到右的流向
  • << 表示相反方向(从右到左)
  • - 表示无向连接

让我们一起看一个示例:

code
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

注意节点之间的连接:

code
# 用从左到右的箭头将负载均衡器连接到 Web 服务器
load_balancer >> web_server
    
# 用从右到左的箭头将 Web 服务器和数据库连接
web_server << database

# 用直线将数据库和备份服务器连接
database - backup_server

数据流分组

你还可以使用 Python 列表将一个节点连接到多个节点。这样你就不需要逐个将节点连接到另一个节点。

假设你想实现这个架构:

code
┌──► web-1 ───┐
load-balancer ──────┼──► web-2 ───┼──► database
                    └──► web-3 ───┘

首先,创建一个负载均衡器:

code
load_balancer = ELB("entry-point")

然后创建多个服务器。你不需要像这样创建三个单独的变量:

code
server1 = EC2("web-1")
server2 = EC2("web-2")
server3 = EC2("web-3")

你可以将它们放入 Python 列表中:

code
web_servers = [
    EC2("web-1"),
    EC2("web-2"),
    EC2("web-3")
]

然后像这样将 LB 节点连接到列表:

code
load_balancer >> web_servers

这样你就无需手动编写:

code
load_balancer >> web_servers[0]
load_balancer >> web_servers[1]
load_balancer >> web_servers[2]

现在将整个列表连接到数据库:

code
web_servers >> database

这种方案有助于减少代码中的冗余部分。它可以帮助定位重复的组件,如多个 Pod、工作节点等。

完整代码如下:

code
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

集群

可以通过带标签的框将相关节点分组,这种分组方式称为集群。集群内部的节点仍然可以与外部节点建立连接。

分组有助于明确哪些组件属于同一逻辑单元。它可以帮助表示以下概念:

  • 应用层级
  • 数据库层级
  • 可用区
  • 区域
  • 环境
  • 微服务组
  • 工作节点组

创建集群的语法如下:

code
with Cluster("Cluster name"):

所有缩进在该语句下的内容都将属于该集群。

以下示例演示了集群的使用方式:

code
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

还可以通过以下语法嵌套集群:

code
with Cluster("Production"):

    with Cluster("Backend"):

        with Cluster("API"):
            ...

下面是一个嵌套集群的更现实示例:

code
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 服务器都连接到该数据库。

通过相互缩进集群定义可以实现集群的嵌套。请参考以下代码片段:

code
with Cluster("Production Region"):

        with Cluster("Application Tier"):

            with Cluster("API Servers"):
                api1 = EC2("api-1")
                api2 = EC2("api-2")

边

边提供了另一种连接节点的方式。与简单的 >> 或 << 不同,边允许添加标签、颜色和样式等属性。

之前您使用的是:

现在要使用边,请添加:

code
from diagrams import Diagram, Edge

现在使用边将 app 连接到数据库:

code
# 标注边
app >> Edge(label="SQL queries") >> database

这将使用标注为 "SQL queries" 的边将 app 连接到数据库。

您还可以自定义边的颜色:

code
app >> Edge(label="SQL", color="red") >> database

您也可以修改线型:

code
app >> Edge(style="dashed") >> database

以下是一些其他可用的边样式:

code
Edge(style="dotted")
Edge(style="bold")

下面的示例结合了多种边样式:

code
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 人成为开发者。立即开始

code