美文网首页
使用diagrams画架构图

使用diagrams画架构图

作者: go4it | 来源:发表于2023-07-22 09:26 被阅读0次

最近发现一个画架构图的神器diagrams,提供了很多云厂商及开源组件的图标,相比于C4-PlantUML显得更专业一点。
之前写过技术文档画图工具箱,diagrams属于diagram as code工具派别。

mac安装

brew install graphviz
pip install diagrams
brew install python@3.11

示例

示例1

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图片

[图片上传失败...(image-cdfefd-1690075604637)]

示例2

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

[图片上传失败...(image-16258a-1690075604637)]

基本语法就是import node,以with Diagram开始,之后声明组件,然后使用with来进行分组,最后通过>>来串联
默认文件名是Diagram名,空格替换为下划线,可以用filename指定
图片格式默认是png,可以用outformat=["jpg", "png", "dot"]来指定要生成的图片类型
show默认为True,也就是python生成完图片会默认打开图片

k8s示例

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")

[图片上传失败...(image-91a3d8-1690075604637)]

开源组件示例

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

[图片上传失败...(image-9ad3d-1690075604637)]

主要结构

node

# 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用于分组,也支持内嵌,比如

 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来衔接,用于个性化处理边的属性,比如

metrics = Prometheus("metric")
    metrics << Edge(color="firebrick", style="dashed") << Grafana("monitoring")

小结

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

doc

相关文章

  • 使用VSCode+PlantUML+C4-Model快速画架构图

    使用VSCode+PlantUML+C4-Model快速画架构图 关于C4-Model 最近在看C4-Model,...

  • 怎样画架构图

    画出一个好的架构图之前, 首先应该要明确其受众,再想清楚要给他们传递什么信息 ,所以,不要为了画一个物理视图去画物...

  • Diagrams 系统架构图绘制工具: 使用 Python 绘制

    Diagrams Diagram as Code. Diagrams lets you draw the clou...

  • 阿里云矢量图标库

    阿里云矢量图标库,画架构图时的素材: http://iconfont.cn/plus/user/detail?sp...

  • diagrams

    【diagrams】是一个开源免费的绘制流程图和示意图的软件,相信很多人也知道,在流程图绘制软件这个类目,被许多人...

  • 流程图软件推荐-draw.io

    官网地址:https://www.diagrams.net/ 价格:开源免费 其他:1.推荐使用 windows-...

  • 如何画架构设计图(一)

    准备用两篇文章来分享下如何画架构图,以下纯个人见解。 什么是架构图 从我个人角度来理解的话,首先要理解什么是架构,...

  • 工具网址

    绑定本地IP 域名工具 NATAPP JS/React 开发者的 Atom 终极配置 在线画架构图、流程图、类图工...

  • 画架

    完全靠自己,把画架搭好了,迫不及待的试了一下,太不会画画,不过还是按照别人的讲解视频一步一步画出来了,加油!

  • 画架

    画笔是一把钥匙 画布是一扇门 洗去虚妄无助的悲聊 打开一片放肆自由的世界

网友评论

      本文标题:使用diagrams画架构图

      本文链接:https://www.haomeiwen.com/subject/iprxpdtx.html