简介

diagrams是python的一个第三方库,用于实现使用代码绘制架构图。

安装

依赖于 Graphviz,安装diagrams之前需要先安装 Graphviz(下载压缩包后,将bin目录添加到系统环境变量Path里即可)。

python3 -m pip install diagrams

快速入门

  • main.py
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB with Diagram("Web Service", show=False):
ELB("lb") >> EC2("web") >> RDS("userdb")
  • 运行
python main.py

示例

简单的应用组

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", show=False, direction="TB"):
ELB("lb") >> [EC2("worker1"),
EC2("worker2"),
EC2("worker3"),
EC2("worker4"),
EC2("worker5")] >> RDS("events")

web 服务集群

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 graph_attr = {
"bgcolor": "transparent" # 透明背景
} with Diagram("Web 服务集群", show=False, filename="3", graph_attr=graph_attr):
dns = Route53("DNS")
lb = ELB("网关") with Cluster("Services"):
svc_group = [ECS("web1"),
ECS("web2"),
ECS("web3")] with Cluster("数据库集群"):
db_primary = RDS("主库")
db_primary - [RDS("只读从库")] memcached = ElastiCache("memcached") dns >> lb >> svc_group
svc_group >> db_primary
svc_group >> memcached

事件处理队列

from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS, EKS, Lambda
from diagrams.aws.database import Redshift
from diagrams.aws.integration import SQS
from diagrams.aws.storage import S3 with Diagram("事件处理", show=False, filename="4"):
source = EKS("k8s source") with Cluster("事件流"):
with Cluster("Event Workers"):
workers = [ECS("worker1"),
ECS("worker2"),
ECS("worker3")] queue = SQS("event 队列") with Cluster("处理器"):
handlers = [Lambda("proc1"),
Lambda("proc2"),
Lambda("proc3")] store = S3("事件存储")
dw = Redshift("analytics") source >> workers >> queue >> handlers
handlers >> store
handlers >> dw

消息收集系统

from diagrams import Cluster, Diagram
from diagrams.gcp.analytics import BigQuery, Dataflow, PubSub
from diagrams.gcp.compute import AppEngine, Functions
from diagrams.gcp.database import BigTable
from diagrams.gcp.iot import IotCore
from diagrams.gcp.storage import GCS with Diagram("Message Collecting", show=False, filename="5"):
pubsub = PubSub("pubsub") with Cluster("Source of Data"):
[IotCore("core1"),
IotCore("core2"),
IotCore("core3")] >> pubsub with Cluster("Targets"):
with Cluster("Data Flow"):
flow = Dataflow("data flow") with Cluster("Data Lake"):
flow >> [BigQuery("bq"),
GCS("storage")] with Cluster("Event Driven"):
with Cluster("Processing"):
flow >> AppEngine("engine") >> BigTable("bigtable") with Cluster("Serverless"):
flow >> Functions("func") >> AppEngine("appengine") pubsub >> flow

k8s中3副本pod

from diagrams import Diagram
from diagrams.k8s.clusterconfig import HPA
from diagrams.k8s.compute import Deployment, Pod, ReplicaSet
from diagrams.k8s.network import Ingress, Service with Diagram("Exposed Pod with 3 Replicas", show=False, filename="6"):
net = Ingress("domain.com") >> Service("svc")
net >> [Pod("pod1"),
Pod("pod2"),
Pod("pod3")] << ReplicaSet("rs") << Deployment("dp") << HPA("hpa")

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, filename="7"):
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")

高级web服务架构

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, filename="8"):
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

高级web服务架构2

from diagrams import Cluster, Diagram, Edge
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(name="Advanced Web Service with On-Premise (colored)", show=False, filename="9"):
ingress = Nginx("ingress") metrics = Prometheus("metric")
metrics << Edge(color="firebrick", style="dashed") << Grafana("monitoring") with Cluster("Service Cluster"):
grpcsvc = [
Server("grpc1"),
Server("grpc2"),
Server("grpc3")] with Cluster("Sessions HA"):
primary = Redis("session")
primary - Edge(color="brown", style="dashed") - Redis("replica") << Edge(label="collect") << metrics
grpcsvc >> Edge(color="brown") >> primary with Cluster("Database HA"):
primary = PostgreSQL("users")
primary - Edge(color="brown", style="dotted") - PostgreSQL("replica") << Edge(label="collect") << metrics
grpcsvc >> Edge(color="black") >> primary aggregator = Fluentd("logging")
aggregator >> Edge(label="parse") >> Kafka("stream") >> Edge(color="black", style="bold") >> Spark("analytics") ingress >> Edge(color="darkgreen") << grpcsvc >> Edge(color="darkorange") >> aggregator

使用自定义的图标

from urllib.request import urlretrieve

from diagrams import Cluster, Diagram
from diagrams.aws.database import Aurora
from diagrams.custom import Custom
from diagrams.k8s.compute import Pod # Download an image to be used into a Custom Node class
rabbitmq_url = "https://jpadilla.github.io/rabbitmqapp/assets/img/icon.png"
rabbitmq_icon = "rabbitmq.png"
urlretrieve(rabbitmq_url, rabbitmq_icon) with Diagram("Broker Consumers", show=False, filename="10"):
with Cluster("Consumers"):
consumers = [
Pod("worker"),
Pod("worker"),
Pod("worker")] queue = Custom("Message queue", rabbitmq_icon) queue >> consumers >> Aurora("Database")

参考

[python]使用diagrams绘制架构图的更多相关文章

  1. graphviz 绘制架构图

    架构图: 1.依赖调用关系.(类似文献引用关系, graphviz 自动将每一次调用升一次层级) 2.依赖调用可能是上下层级调用,也可能是同层级引用. 需人工去梳理出这些关系 3. 引用多的用颜色标识 ...

  2. [python] 基于diagrams库绘制系统架构图

    Python的Diagrams库允许通过简单的Python代码绘制云系统架构,实现对新的系统架构进行原型设计.Diagrams的官方仓库地址见:diagrams.Diagrams的官方文档和使用示例见 ...

  3. 五分钟!用python绘制漂亮的系统架构图

    Diagrams 是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标: AWS.Azure.GCP.K8s.阿里云 和 Oracle 云 基 ...

  4. 用ChatGPT,绘制一个账号系统的C4架构图

    hi,我是熵减,见字如面. 昨天我们用ChatGPT来设计一个账号系统,并尝试输出:模型表,类关系图,序列图,状态图等常用的架构设计中常用的元素. 今天,我们继续向更高层级延伸一下,看ChatGPT能 ...

  5. Atitit jOrgChart的使用  组织架构图css html

    Atitit jOrgChart的使用  组织架构图css html 1. 项目要做组织架构图,要把它做成自上而下的树形结构,于是决定1 2. Html导入 以来的css js1 2.1. 数据来源 ...

  6. 飞达资讯App总体介绍及关系架构图

    飞达资讯App总体介绍: 下图为飞达资讯App的关系架构图: 该App关系架构图所需的图片云盘链接地址:http://pan.baidu.com/s/1gfHIe4b 提取密码:x1nr 该App的云 ...

  7. 关于SAP4.7的几个架构图

    http://blog.itpub.net/92530/viewspace-154881/ 1.SAP基本架构图 2.SAP的应用层的工作进程架构图 3.SAP的内存类型图 4.SAP数据访问架构图 ...

  8. android系统架构图

    android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和Linux核心层. 1.应用程序 Andr ...

  9. MyBatis架构图

    MyBatis架构 MyBatis依赖的jar不多,而且代码行数也没多少,其中使用了大量的设计模式,值得好好学习.下图是MyBatis的一张架构图,来自Java框架篇—Mybatis 入门. Myba ...

  10. struts2原理架构图

    struts2 原理架构图

随机推荐

  1. 2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号 每个题目都有一个难度值 题库A中第i个题目的难度为ai 题库B中第i个题目的难度为bi 题库C中第i个题目

    2023-01-04:有三个题库A.B.C,每个题库均有n道题目,且题目都是从1到n进行编号 每个题目都有一个难度值 题库A中第i个题目的难度为ai 题库B中第i个题目的难度为bi 题库C中第i个题目 ...

  2. 2020-09-14:KVM和XEN虚拟化的区别?

    福哥答案2020-09-14:#福大大架构师每日一题#[答案来自此链接](https://bbs.csdn.net/topics/397671000)KVM:1.虚拟化支持:全虚拟化.2.支持架构:虚 ...

  3. 2022-05-18:假设数组a和数组b为两组信号: 1) length(b) <= length(a); 2) 对于任意0<=i<length(b), 有b[i+1] - b[i] == a[i+1

    2022-05-18:假设数组a和数组b为两组信号: length(b) <= length(a): 对于任意0<=i<length(b), 有b[i+1] - b[i] == a[ ...

  4. 2022-02-06:等差数列划分 II - 子序列。 给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目。 如果一个序列中 至少有三个元素 ,并且任意两个相邻元素之差相同,则称

    2022-02-06:等差数列划分 II - 子序列. 给你一个整数数组 nums ,返回 nums 中所有 等差子序列 的数目. 如果一个序列中 至少有三个元素 ,并且任意两个相邻元素之差相同,则称 ...

  5. AHB2APB bridge IP简介

    背景介绍 AMBA总线规范是由ARM公司提出的一种开放性的片上总线标准,它独立于处理器和工艺技术,具有高速度.低功耗等特点.AMBA规范中包括了AHB系统总线和APB外设总线. AHB主要用于高性能模 ...

  6. 都说 C++ 没有 GC,RAII: 那么我算个啥?(赠书福利)

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/7A9-tGZxf4w_7eZl3OUQ4A 学过 Java.C# ...

  7. 【工作随手记】deaklock排查

    生产环境当中还没真正遇到过死锁的问题.有些疑似死锁的问题,后来经过排查也只是其它问题导致的.所以通过jstack到底怎样排查死锁问题有点疏忽了.这里作个记录. 模拟一个死锁 顺便复习一下. 死锁的产生 ...

  8. ODOO页面使用css和js的流程

    1 首先定义页面 <data> <record id="myquality_iqcbasesetup_form" model="ir.ui.view&q ...

  9. aspnetcore最最简单的接口权限认证

    五月一眨眼就过去,就当凑个数吧. 场景: 一个小小的项目,需要一个后台,就展示几个列表,连用户表.角色表等都不需要设计. 之前有写过identityserver4和jwt4的demo (exercis ...

  10. 从RDD创建DataFrame

    0.前次作业:从文件创建DataFrame 1.pandas df 与 spark df的相互转换     df_s=spark.createDataFrame(df_p)     df_p=df_s ...