Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用diagrams画架构图

使用diagrams画架构图

原创
作者头像
code4it
发布于 2023-07-23 01:28:25
发布于 2023-07-23 01:28:25
5510
举报
文章被收录于专栏:码匠的流水账码匠的流水账

最近发现一个画架构图的神器diagrams,提供了很多云厂商及开源组件的图标,相比于C4-PlantUML显得更专业一点。

之前写过技术文档画图工具箱,diagrams属于diagram as code工具派别。

mac安装

代码语言:txt
AI代码解释
复制
brew install graphviz
pip install diagrams
brew install python@3.11

示例

示例1

代码语言:txt
AI代码解释
复制
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

# python aws_example.py
with Diagram("Grouped Workers", show=False, direction="TB"):
    ELB("lb") >> [EC2("worker1"),
                  EC2("worker2"),
                  EC2("worker3"),
                  EC2("worker4"),
                  EC2("worker5")] >> RDS("events")

执行python example.py即可以在当前目录生成png图片

grouped_workers_diagram
grouped_workers_diagram

示例2

代码语言:txt
AI代码解释
复制
from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import ElastiCache, RDS
from diagrams.aws.network import ELB
from diagrams.aws.network import Route53

with Diagram("Clustered Web Services", show=False):
    dns = Route53("dns")
    lb = ELB("lb")

    with Cluster("Services"):
        svc_group = [ECS("web1"),
                     ECS("web2"),
                     ECS("web3")]

    with Cluster("DB Cluster"):
        db_primary = RDS("userdb")
        db_primary - [RDS("userdb ro")]

    memcached = ElastiCache("memcached")

    dns >> lb >> svc_group
    svc_group >> db_primary
    svc_group >> memcached
clustered_web_services_diagram
clustered_web_services_diagram

基本语法就是import node,以with Diagram开始,之后声明组件,然后使用with来进行分组,最后通过>>来串联

默认文件名是Diagram名,空格替换为下划线,可以用filename指定

图片格式默认是png,可以用outformat="jpg", "png", "dot"来指定要生成的图片类型

show默认为True,也就是python生成完图片会默认打开图片

k8s示例

代码语言:txt
AI代码解释
复制
from diagrams import Cluster, Diagram
from diagrams.k8s.compute import Pod, StatefulSet
from diagrams.k8s.network import Service
from diagrams.k8s.storage import PV, PVC, StorageClass

with Diagram("Stateful Architecture", show=False):
    with Cluster("Apps"):
        svc = Service("svc")
        sts = StatefulSet("sts")

        apps = []
        for _ in range(3):
            pod = Pod("pod")
            pvc = PVC("pvc")
            pod - sts - pvc
            apps.append(svc >> pod >> pvc)

    apps << PV("pv") << StorageClass("sc")
stateful_architecture_diagram
stateful_architecture_diagram

开源组件示例

代码语言:txt
AI代码解释
复制
from diagrams import Cluster, Diagram
from diagrams.onprem.analytics import Spark
from diagrams.onprem.compute import Server
from diagrams.onprem.database import PostgreSQL
from diagrams.onprem.inmemory import Redis
from diagrams.onprem.aggregator import Fluentd
from diagrams.onprem.monitoring import Grafana, Prometheus
from diagrams.onprem.network import Nginx
from diagrams.onprem.queue import Kafka

with Diagram("Advanced Web Service with On-Premise", show=False):
    ingress = Nginx("ingress")

    metrics = Prometheus("metric")
    metrics << Grafana("monitoring")

    with Cluster("Service Cluster"):
        grpcsvc = [
            Server("grpc1"),
            Server("grpc2"),
            Server("grpc3")]

    with Cluster("Sessions HA"):
        primary = Redis("session")
        primary - Redis("replica") << metrics
        grpcsvc >> primary

    with Cluster("Database HA"):
        primary = PostgreSQL("users")
        primary - PostgreSQL("replica") << metrics
        grpcsvc >> primary

    aggregator = Fluentd("logging")
    aggregator >> Kafka("stream") >> Spark("analytics")

    ingress >> grpcsvc >> aggregator
advanced_web_service_with_on-premise
advanced_web_service_with_on-premise

主要结构

node

代码语言:txt
AI代码解释
复制
# aws resources
from diagrams.aws.compute import ECS, Lambda
from diagrams.aws.database import RDS, ElastiCache
from diagrams.aws.network import ELB, Route53, VPC
...

# azure resources
from diagrams.azure.compute import FunctionApps
from diagrams.azure.storage import BlobStorage
...

# alibaba cloud resources
from diagrams.alibabacloud.compute import ECS
from diagrams.alibabacloud.storage import ObjectTableStore
...

# gcp resources
from diagrams.gcp.compute import AppEngine, GKE
from diagrams.gcp.ml import AutoML 
...

# k8s resources
from diagrams.k8s.compute import Pod, StatefulSet
from diagrams.k8s.network import Service
from diagrams.k8s.storage import PV, PVC, StorageClass
...

# oracle resources
from diagrams.oci.compute import VirtualMachine, Container
from diagrams.oci.network import Firewall
from diagrams.oci.storage import FileStorage, StorageGateway

完整版见nodes

数据流及布局

  • >>表示从左到右连接
  • <<表示从右到左连接
  • -表示无方向的连接

Diagram有个属性direction来表示整体布局,可选的值有TB, BT, LR及RL,默认是LR,即从左到右

TB: top to bottom

BT: bottom to top

LR: left to right

RL: right to left

Cluster用于分组,也支持内嵌,比如

代码语言:txt
AI代码解释
复制
 with Cluster("Event Flows"):
        with Cluster("Event Workers"):
            workers = [ECS("worker1"),
                       ECS("worker2"),
                       ECS("worker3")]

        queue = SQS("event queue")

        with Cluster("Processing"):
            handlers = [Lambda("proc1"),
                        Lambda("proc2"),
                        Lambda("proc3")]

连接符之间可以用Edge来衔接,用于个性化处理边的属性,比如

代码语言:txt
AI代码解释
复制
metrics = Prometheus("metric")
    metrics << Edge(color="firebrick", style="dashed") << Grafana("monitoring")

小结

diagrams是基于python的一款diagram as code工具,它最大的特点就是提供了很多云厂商及开源组件的图标,画出来的图显得更专业一点,也更易懂一点。

doc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用diagrams画架构图
最近发现一个画架构图的神器diagrams,提供了很多云厂商及开源组件的图标,相比于C4-PlantUML显得更专业一点。 之前写过技术文档画图工具箱,diagrams属于diagram as code工具派别。
code4it
2023/08/31
3290
使用diagrams画架构图
Diagrams 系统架构图绘制工具: 使用 Python 绘制漂亮的系统架构图
Diagrams lets you draw the cloud system architecture in Python code. It was born for prototyping a new system architecture design without any design tools. You can also describe or visualize the existing system architecture as well. Diagrams currently supports main major providers including: AWS, Azure, GCP, Kubernetes, Alibaba Cloud, Oracle Cloud etc... It also supports On-Premise nodes, SaaS and major Programming frameworks and languages.
一个会写诗的程序员
2022/09/16
2.4K0
Diagrams 系统架构图绘制工具: 使用 Python 绘制漂亮的系统架构图
32K Star开源的工具:用简单的代码就能画流程图
开源日记
2023/11/25
4610
32K Star开源的工具:用简单的代码就能画流程图
python3使用diagrams生成架构图
对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较值得学习的技能。这就像我们学习的时候整理的一些Xmind那种思维逻辑图一样,不仅可以帮我们看到组件之间的联系和层级,还能够展示出组件的全貌。虽然我们也可以用Visio或者Edraw等专业绘图工具来绘制架构图,但是对于工程师而言,用代码来直接绘制架构图,会显得更加的优雅。这里我们介绍的diagrams,就是一个可以用来绘制架构图的python包。
不知名站长
2021/04/05
1K0
python3使用diagrams生成架构图
25.9k stars用代码绘制架构图强的很
图表即代码 图表让你可以在 Python 代码中绘制云系统架构。它的诞生是为了在没有任何设计工具的情况下对新的系统架构设计进行原型设计。你还可以描述或可视化现有系统架构。Diagrams 目前支持主要的主要云供应商,包括:AWS, Azure, GCP, Kubernetes, Alibaba Cloud,Oracle Cloud等......它还支持On-Premise节点,SaaS以及主要的Programming框架和语言。 GitHub数据 25.9k stars 349 watching 1.6
开源日记
2023/03/10
4400
25.9k stars用代码绘制架构图强的很
python也能画架构图
今天无意中发现了一个画架构图的东西,还是python的,那我们就稍微学习一下。这个python库的名字叫做diagrams,安装也很方便。直接pip install diagrams即可。但是安装好了之后,咋还用不了,需要安装Graphviz,我们可以这样理解diagrams只是提供一些基础的语法,然后拼接成指定的graphviz运行文件,然后调用graphviz去执行,最后将结果输出。Diagrams调用graphviz是通过系统变量来调用的,因此如果在没有安装graphviz的情况下运行就会出现下边的报错。这说明我们的系统变量中没有这个graphviz或者压根就没安装。
写一点笔记
2022/08/11
6580
python也能画架构图
python3使用diagrams生成架构图
对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较值得学习的技能。这就像我们学习的时候整理的一些Xmind那种思维逻辑图一样,不仅可以帮我们看到组件之间的联系和层级,还能够展示出组件的全貌。虽然我们也可以用Visio或者Edraw等专业绘图工具来绘制架构图,但是对于工程师而言,用代码来直接绘制架构图,会显得更加的优雅。这里我们介绍的diagrams,就是一个可以用来绘制架构图的python包。
DechinPhy
2021/05/21
1K0
k8s之StatefulSet
是用来创建有状态应用,可以通过过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态。
编程黑洞
2023/03/06
3150
mongo minio on openebs 工作量不饱满教程
作者 | 老根 - laf框架作者 笔者在开发laf(https://github.com/lafjs/laf)的过程中依赖了mongo minio这些组件,本文就如何对这些组件最佳实践来做个介绍。
sealyun
2022/05/16
4.2K0
mongo minio on openebs 工作量不饱满教程
红队视角出发的k8s敏感信息收集——持久化存储与数据泄露
在Kubernetes集群中,持久化存储卷如同数据的保险箱,承载着应用运行所必需的各类敏感信息。然而,从红队视角出发,这些存储卷也可能成为攻击者觊觎的目标。通过巧妙地利用配置不当或已知漏洞,攻击者能够从中收集到包括密钥、访问凭证在内的大量敏感数据,进而导致数据泄露事件的发生。
zhouzhou的奇妙编程
2025/02/07
1820
Kubernetes学习笔记
Pod: kubernetes管理的主要对象,可以由一个或者共享资源的一组容器组成 kubelet: 管理worker node和master node之间的通信 kube-proxy: 运行在work node上,用于管理Node和Pod的网络通信 API Server: 提供API服务 Scheduler: 选择worker node运行Pod Controller: 监控Pod数量,控制worker node Worker node: 运行Pod的机器或者虚拟机 Master node: 运行Control Plane的机器或者虚拟机
宅蓝三木
2024/10/09
1200
Kubernetes学习笔记
Kubernetes CSI的工作原理
深入了解 CSI(Container Storage Interface)是什么以及它如何在 Kubernetes(k8s)中工作。
云云众生s
2024/03/30
3670
Kubernetes CSI的工作原理
Python 五分钟绘制漂亮的系统架构图
Diagrams  是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标:
陈晨135
2021/12/28
7170
Python 五分钟绘制漂亮的系统架构图
kubernetes 权威指南学习笔记(2) -- 基本概念和术语
Master 只的是集群控制节点,每个集群需要一个检点来负责整个集群的管理和控制。 基本上所有控制命令都发给它,它来负责具体的执行过程。
solate
2019/07/22
9730
27 Nov 2021 cka练习(四)
俊采
2023/10/17
1750
生产prometheus-operator 监控二进制kubernetes
`operator`是由CoreOS公司开发的,用来扩展kubernetes APi ,特定的应用程序控制器,它用来创建,配置和管理复杂的有状态应用,例如数据库,缓存和监控系统。`Operator`基于Kubernetes的资源和控制器概念之上构建,但同时又包含了应用程序特定的一些专业知识,比如创建一个数据库的`Operator`,则必须对创建的数据库和各种运维方式非常了解,创建`operator`的关键是 `CRD(CustomResourceDefinition/自定义资源定义)`的设计。
张琳兮
2020/09/23
8490
云原生基础设施之Kubernetes
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/03/02
1.4K0
云原生基础设施之Kubernetes
KubeSphere 最佳实战:探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径
在 Kubernetes 生态系统中,持久化存储是支撑业务应用稳定运行的基石,对于维护整个系统的健壮性至关重要。对于选择自主搭建 Kubernetes 集群的运维架构师来说,挑选合适的后端持久化存储解决方案是关键的选型决策。目前,Ceph、GlusterFS、NFS、Longhorn 和 openEBS 等解决方案已在业界得到广泛应用。
运维有术
2024/08/07
3920
KubeSphere 最佳实战:探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径
Openshift高阶探索实验
一、HA方式部署Openshift 一个典型的OCP高可用架构是:master至少应为三个,且为奇数个(上面有etcd); 基础架构节点不少于两个,上面运行日志、监控、router、INTEGRATE
魏新宇
2018/03/22
3K1
Openshift高阶探索实验
在K8S中使用helm chart部署Prometheus
近期部署Prometheus的时候,发现网上竟然很难找到比较好的基于k8s部署的教程,甚至就连helm chart官方repo的教程也很不友好,对于很多参数没有详细的解释,也缺少示例。
panzhixiang
2024/10/30
1720
相关推荐
使用diagrams画架构图
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档