用代码绘制图表:打造动态交互式文档的诀窍
在本文中,我将一步步引导你使用Diagram-as-Code工具创建动态且可互动的可视化文档。我们将通过编程生成图表,而不是使用静态图片,确保它们始终最新且易于维护。
……
🎨 用代码绘制的图表代码中的图是一种通过编写代码而非使用传统图形工具来创建图表的方法。您不再需要手动绘制图表,而是可以通过在文本文件中编写代码来定义图表的结构、组件及其连接,从而简化了图表创建过程。
这段代码会被转换成图形,使其更容易在软件项目中集成和记录,尤其是在程序化创建和更新架构图和流程图时特别有用。
此处省略内容
丹麦是什么? 什么是图表?Diagram 是一个 🐍Python库,实现了代码即图示的理念,使您能够通过代码生成架构图和其他类型的示意图。使用 Diagram 库,您可以轻松地定义云基础设施组件(如 AWS
、Azure
和 GCP
)、网络组件、软件服务组件等,只需少量代码。
🎉 代码绘图的优势
- 📝 通过代码表示的图表:直接从代码创建和更新图表,确保敏捷项目中的图表可维护性。
- 📑 自动化文档:从代码生成视觉内容,保持图表与当前架构同步。
- 🔄 变更控制:跟踪图表随时间的修改。
- 🔍 增强清晰度:通过清晰的视觉内容提高对复杂系统的理解。
-
✏️ 可自定义:使用灵活且定制的视觉内容来表示云基础设施、工作流或数据管道。
-
- *
我正在用版本 '0.23.4'
进行这个教程。
运行此命令以安装特定版本的diagrams库
!
pip install diagrams=='0.23.4'
全屏模式,退出
退出全屏
🎨 图表:节点
该库允许你通过程序使用节点来表示不同的基础设施组件和服务,从而创建架构示意图。
节点的种类
图中的节点代表来自不同云服务提供商的组件以及其他架构元素,比如。以下是主要的节点种类:
- ☁️ 云服务提供商 : AWS (亚马逊网络服务), Azure, GCP, IBM Cloud, 阿里云, Oracle Cloud, DigitalOcean, 等等。
- 🏢 本地部署 : 代表公司内部实际部署的基础设施。
- 🚢 Kubernetes (K8S) : 容器编排系统,用于自动化部署、扩展和管理容器化应用(船舵图标象征控制和导航)。
- 🖥️ OpenStack : 开源软件平台,用于创建和管理公共及私有云。
- 🔧 通用节点 : 代表未被特定供应商节点涵盖的任何组件(交叉工具符号表示同一类别的不同工具)。
- ☁️ SaaS (软件即服务) : 代表通过互联网提供的应用程序,例如 Snowflake、聊天服务(Slack、Teams、Telegram 等)、安全服务(如 Okta)或社交网络(交叉线电话和云符号代表 SaaS 概念)。
-
🔧 自定义 : 允许用户使用存储在特定文件夹中的 PNG 图标来自定义他们的图表,这有助于表示默认节点未涵盖的基础设施组件(交叉线自定义工具符号表示未涵盖的组件)。
-
- *
Diagrams库允许你用不同的节点表示各种编程语言。这些节点有助于在你的图中显示架构的任何部分是否采用了特定编程语言编写的脚本或组件。
以下,我们将展示如下库中所有可用的语言。如果缺少任何语言,你可以通过上传相应的logo到指定文件夹来自定义添加。
# 创建流程图对象
with diagrams.Diagram("编程语言", show=False, filename="languages"):
# 获取库中的所有语言
languages = [item for item in dir(diagrams.programming.language) if item[0] != '_']
# 将语言分成两行
mid_index = len(languages) // 2
first_line = languages[:mid_index]
second_line = languages[mid_index:]
# 在第一行添加节点
prev_node = None
for language in first_line:
current_node = eval(f"diagrams.programming.language.{language}(language)")
if prev_node is not None:
prev_node >> current_node
prev_node = current_node
# 在同一图的第二行添加节点
prev_node = None
for language in second_line:
current_node = eval(f"diagrams.programming.language.{language}(language)")
if prev_node is not None:
prev_node >> current_node
prev_node = current_node
Image("languages.png")
点击全屏显示,点击退出全屏
[图片说明]
☁️ AWS (亚马逊网络服务)
例如,我们可以使用亚马逊的节点,这些节点分为几个分类。
- 分析与业务 : aws.analytics, aws.business
- 计算与存储 : aws.compute, aws.storage, aws.成本
- 数据库与开发工具 : aws.database, aws.devtools
- 集成与管理 : aws.integration, aws.管理
- 机器学习与移动 : aws.ml, aws.mobile
- 网络与安全 : aws.网络, aws.安全
- 其他 : aws.区块链, aws.最终用户, aws.互动, aws.游戏, aws.一般, aws.物联网, aws.媒体, aws.迁移, aws.量子, aws.机器人, aws.卫星
接下来,我们将展示 aws.database
中的可用节点。
从 diagrams 导入 Diagram 作为 图
从 IPython.display 导入 Image
导入 diagrams.aws.database 作为 aws_database
数据库组件 = []
for item in dir(aws_database):
if item[0] != '_':
if not any(comp.startswith(item) or item.startswith(comp) for comp in 数据库组件):
数据库组件.append(item)
使用 Diagram("AWS Database", show=False, filename="aws_database"):
中间索引 = len(数据库组件) // 2
第一行 = 数据库组件[:中间索引]
第二行 = 数据库组件[中间索引:]
前一个节点 = None
for item_database in 第一行:
当前节点 = eval(f"aws_database.{item_database}(item_database)")
if 前一个节点 is not None:
前一个节点 >> 当前节点 # 前一个节点连接到当前节点
前一个节点 = 当前节点
前一个节点 = None
for item_database in 第二行:
当前节点 = eval(f"aws_database.{item_database}(item_database)")
if 前一个节点 is not None:
前一个节点 >> 当前节点 # 前一个节点连接到当前节点
前一个节点 = 当前节点
Image("aws_database.png") # 显示 AWS 数据库的图像
点击这里进入全屏,点击这里退出全屏
如下所示
☁️ 应用场景
现在,让我们创建一个简单的流程,对应于以下步骤:在AWS上导入数据集并训练一个机器学习模型的过程。
从 diagrams 导入 Diagram, Cluster
从 diagrams.aws.storage 导入 S3
从 diagrams.aws.analytics 导入 Glue, Athena
导入 diagrams.aws.ml 作为 ml
从 diagrams.aws.integration 导入 StepFunctions
从 diagrams.aws.compute 导入 Lambda
从 diagrams.aws.network 导入 APIGateway
从 IPython.display 导入 Image
with Diagram("AWS 数据处理流程", show=False):
lambda_raw = Lambda('获取未处理数据')
# S3 存储桶
with Cluster("数据湖泊"):
s3_rawData = S3("原始数据")
s3_stage = S3("暂存数据")
s3_data_capture = S3("数据捕获")
athena = Athena("Athena")
s3_rawData >> athena
s3_stage >> athena
s3_data_capture >> athena
# 数据处理流程
with Cluster("数据处理流程"):
step_functions = StepFunctions("管道")
# Step Functions 中的 Glue 任务
with Cluster("Glue 任务"):
data_quality = Glue("数据质量任务")
transform = Glue("数据转换任务")
dataset_preparation = Glue("数据集准备任务")
# 定义 Step Functions 流程
step_functions >> data_quality >> transform >> dataset_preparation
s3_rawData >> data_quality
# SageMaker 用于模型训练和部署
with Cluster("SageMaker 模型部署"):
train_model = ml.SagemakerTrainingJob("模型训练任务")
eval_model = ml.SagemakerGroundTruth("模型评估任务")
endpoint = ml.SagemakerModel("模型端点服务")
# API Gateway 和 Lambda 用于端点服务
api_gateway = APIGateway("API 网关服务")
lambda_fn = Lambda("调用端点服务")
# 连接
lambda_raw >> s3_rawData
s3_stage >> train_model >> eval_model >> endpoint
endpoint >> lambda_fn >> api_gateway
endpoint >> s3_data_capture
dataset_preparation >> train_model
Image("aws_data_processing_pipeline.png")
全屏模式,切换出全屏
库
以下是所有代码的链接,如果你觉得有用,可以给它点个赞⭐️或点个星⭐️,并关注我接收新文章的通知。这将帮助我在技术社区中成长起来,并创作更多好内容。
r0mymendez / diagram-as-code (该项目是一个使用代码绘制图表的工具)如何使用“文档即图表”方法创建文档项目的指南
🎨 用代码绘图:创建动态交互式视觉内容的文档
代码中的图 是一种通过代码来创建图表的方法,而不是使用传统的图形工具。无需手动构建图表,而是在文本文件里编写代码来定义图表的结构、组件及其连接。
这段代码会被转换成图形,使其更容易在软件项目中集成和记录,这种转换方式,特别是在通过编程方式创建和更新架构图及流程图时特别有用和方便。
Diagramms 是什么?图表 是一个 Python库,实现了代码生成图表的方法,使你能够通过代码创建架构性基础设施图表和其他类型的图表。使用Diagrams库,你可以轻松地定义各种云基础设施组件(如 AWS
、Azure
和 GCP
)、网络元素、软件服务等组件,仅需简单的几行代码即可。
🎉 代码图形化的益处
- 记录……
在 GitHub 上浏览 (diagram-as-code)
如果你想了解如何使用该流程来搭建一个文档网站,可以在以下链接里查看我发表的文章。
参考
共同学习,写下你的评论
评论加载中...
作者其他优质文章