内容提要
本文介绍用 Python Diagrams 库以“图即代码”方式绘制系统架构图:安装 Python、Graphviz 和 diagrams 包后,通过代码定义节点、连接数据流、分组、集群和边,并可设置标签、颜色与样式。该方法便于版本控制、节省时间,并能在 CI/CD 中自动生成图表。
延伸解读
图即代码的核心优势
文章指出,图即代码方式让架构图变更可通过版本控制追踪,避免手动绘图的时间消耗,并支持在CI/CD流水线或文档构建中自动生成图表。这意味着团队可以将图表纳入代码仓库,随代码更新而同步,减少因手动调整导致的格式不一致问题。
节点与连接的基本语法
在Python Diagrams中,节点由提供者、资源类型和名称三部分组成,例如从diagrams.aws.compute导入EC2。连接方向用>>表示从左到右,<<表示从右到左,-表示无向连接。通过变量赋值节点,可以方便地引用和连接,使代码更清晰。
列表与集群简化复杂结构
当需要将一个节点连接到多个同类节点时,可以使用Python列表,如load_balancer >> web_servers,避免重复编写连接语句。集群(Cluster)则用于将相关节点分组到带标签的框中,支持嵌套,适合表示应用层、数据库层、可用区等概念,使架构图层次分明。
边(Edge)增强连接表达
边允许为连接添加标签、颜色和样式,例如Edge(label="SQL queries", color="red", style="dashed")。这比简单的>>或<<提供了更丰富的语义,能清晰标注数据流类型或依赖关系。边同样可与<<和-结合使用,满足不同方向的标注需求。
Q&A
用 Python 画系统架构图需要提前安装哪些东西?
需要 Python 3.7+、pip、操作系统上安装 Graphviz(用于渲染输出图片),以及通过 pip install diagrams 安装 Python 的 diagrams 包。
Python Diagrams 库支持哪些云服务商?
支持多种提供商,包括 Azure、GCP、AWS 等。
在 Diagrams 中如何连接节点并指定数据流方向?
使用 >> 表示从左到右的流向,<< 表示从右到左,- 表示无向连接。例如 load_balancer >> web_server、web_server << database、database - backup_server。
如何用一个节点连接多个节点,避免重复代码?
可以把多个节点放进 Python 列表,然后直接用 >> 连接列表。例如 web_servers = [EC2("web-1"), EC2("web-2"), EC2("web-3")],然后 load_balancer >> web_servers >> database。
Diagrams 中的 Cluster 有什么作用?怎么用?
Cluster 用于把相关节点分组到带标签的框里,可以表示应用层、数据库层、可用区、区域、环境、微服务组等。语法是 with Cluster("名称"):,缩进在下面的节点都属于该集群,并且支持嵌套。
如何给连接线添加标签、颜色和样式?
使用 Edge 对象,例如 app >> Edge(label="SQL queries") >> database 添加标签;Edge(label="SQL", color="red") 设置颜色;Edge(style="dashed") 设置线型,还支持 dotted、bold 等样式。