
如何用 diagrams 列表批量连接多个节点简化数据流【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams用 diagrams 画云架构原型图时经常遇到一个节点要连一组同类节点的任务比如一个负载均衡器后面挂 5 个 worker所有 worker 又都写入同一个数据库。如果逐个节点写连接语句代码会随节点数量线性变长图中也出现大量重复的连线。diagrams 的解法是把多个节点放进一个 Python 列表list让列表整体与前后节点一次性连接用一条语句表达一对多或多对一的数据流。本文以项目文档中 Grouped Workers 示例为主线说明如何把逐个连接的冗余数据流改写成列表批量连接涵盖前置环境、连接运算符、列表语法、已知限制和运行验证。前提是 Python 3.7 以上并且本机已安装 diagrams 依赖的 Graphviz 渲染引擎。准备环境diagrams 使用 Graphviz 渲染图所以要先安装 Graphviz安装文档给出了 macOSHomebrew和 WindowsChocolatey等对应的安装方式。装好 Graphviz 后用 pip 安装 diagrams$ pip install diagrams先看清楚优化前的冗余数据流在Diagram上下文中节点之间用三个运算符连接来表示数据流见 节点指南表示从左到右连接表示从右到左连接-表示无方向连接。文档中优化前的写法是lb逐条连到 5 个 worker每个 worker 再各自连到同一个events数据库from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB with Diagram(Workers, showFalse, directionTB): lb ELB(lb) db RDS(events) lb EC2(worker1) db lb EC2(worker2) db lb EC2(worker3) db lb EC2(worker4) db lb EC2(worker5) db节点再多时这种写法每加一个 worker 就要多写一行且图中连线重复。用列表批量连接多个节点把 5 个 worker 放进一个列表lb → worker 组 → db就写成一条连接语句。列表中的每个节点都会与左右两侧的对象建立连接from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB with Diagram(Grouped Workers, showFalse, directionTB): ELB(lb) [EC2(worker1), EC2(worker2), EC2(worker3), EC2(worker4), EC2(worker5)] RDS(events)两点说明showFalse禁用生成后的自动打开文件行为便于脚本化运行默认是true。direction控制整图的数据流方向默认LR允许取值TB、BT、LR、RL。上例用TB让lb 在上、数据库在下的层级更直观。列表在更复杂数据流中的三种用法示例文档里还有几种直接可复用的列表连接模式以下代码块为官方示例中与列表连接直接相关的节选1. 多个列表串成一条链。Event Processing 示例中workers和handlers都是节点列表与队列一起串行连接workers [ECS(worker1), ECS(worker2), ECS(worker3)] queue SQS(event queue) handlers [Lambda(proc1), Lambda(proc2), Lambda(proc3)] source workers queue handlers2. 列表在连接最左端多对一。GCP Message Collecting 示例中三个IotCore节点组成列表一次性汇入pubsub[IotCore(core1), IotCore(core2), IotCore(core3)] pubsub3. 一个列表向多个目标发连接。Clustered Web Services 示例中svc_group这个服务列表既连数据库也连缓存两条语句分别复用同一个列表svc_group [ECS(web1), ECS(web2), ECS(web3)] svc_group db_primary svc_group memcached此外Stateful Architecture 示例演示了用循环动态构造列表apps.append(svc pod pvc)最后用apps PV(pv) StorageClass(sc)把整个列表接到存储链上适合节点数量不固定的场景。限制与注意事项两个列表不能直接互连。文档明确说明Python 不允许对列表使用移位/算术运算符所以list1 list2这种写法不成立。-与移位运算符混用时加括号。文档提示-与、混用可能因 Python 运算符优先级产生意外结果必要时用括号明确顺序文档给出的示例形如(ELB(lb) EC2(web)) - EC2(web) RDS(userdb)。渲染顺序与声明顺序相反。文档说明The order of rendered diagrams is the reverse of the declaration order即图中节点的排布是代码声明顺序的逆序调整代码顺序时要有这个预期。运行与验证把脚本保存为.py文件后直接运行$ python diagram.py按 Diagram 指南的说明Diagram(...)的第一个参数用于生成输出文件名如 Simple Diagram 生成simple_diagram.png运行后工作目录中会得到对应图片文件本文的 Grouped Workers 示例即生成grouped_workers.png。对照生成结果检查两点worker 组位于lb与数据库之间且每个 worker 节点都与两侧对象相连——与 示例文档 中给出的 grouped workers 效果一致即说明改写成功。如果需要其他格式可在构造Diagram时通过outformat参数指定允许png默认、jpg、svg、pdf、dot也支持传列表一次输出多种格式用filename参数可显式指定文件名不含扩展名。下一步更多节点类型可在 节点列表文档 等页面按 provider 查询需要给连线加颜色、标签等样式时参考 示例文档 中带Edge的 colored 示例需要理解Cluster、outformat、graph_attr等更多选项时阅读 Diagram 指南 与 Node 指南。【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考