龙空技术网

研发工程化02:代码即图表Diagram as Code

川后静波kimble 98

前言:

如今各位老铁们对“代码有什么用”大概比较注重,同学们都想要了解一些“代码有什么用”的相关资讯。那么小编同时在网摘上收集了一些有关“代码有什么用””的相关文章,希望小伙伴们能喜欢,你们一起来了解一下吧!

背景

需求PRD、开发方案详细设计文档中的各种格式、流程图、时序图、架构图等等都可以用代码实现。

至少有以下几点好处:

1、提高了开发效率

2、确保信息的一致性,逻辑性,而不是想当然的随便画

3、可以采用Git进行源文件版本控制

“代码即文档”是一种有效的软件开发哲学。

之前有介绍:软件研发如何高效的画流程图?

今晚再介绍一个用Python直接生成系统架构图的方法,diagrams。

安装 Graphviz

它使用Graphviz来渲染图表,因此需要安装Graphviz才能使用图表。

Graphviz(Graph Visualization Software)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。

Graphviz是一个自由软件,其授权为Eclipse Public License。其Mac版本曾经获得2004年的苹果设计奖。

dot:

一个用来将生成的图形转换成多种输出格式的命令行工具。

其输出格式包括PostScript,PDF,SVG,PNG,含注解的文本等等。

DOT语言是一种文本图形描述语言。

它提供了一种简单的描述图形的方法。

DOT语言文件通常是具有.gv或是.dot的文件扩展名。

无向图

在最简单的应用中,DOT语言可以用来描述一张无向图。

无向图显示了对象间最简单的关系,例如朋友之间的友谊。

使用关键字graph开始一张无向图的定义,并用大括号包含要描述的节点,双连字号(--)被用来描述节点间的关系。另外,一行的末尾需要加上分号(;)。

graph graphname {     a -- b -- c;     b -- d;}
有向图
 digraph graphname {    a -> b -> c;    b -> d;}

Windows:

setx PATH "%PATH%;C:\Program Files\Graphviz\bin"

Linux:

sudo apt install graphviz -y  export PATH=/usr/bin/dot:$PATH

更多参考文档:

安装

diagrams可让用 Python 代码绘制云系统架构。

它是为了在没有任何设计工具的情况下对新的系统架构设计进行原型设计而设计出来的。

图表目前支持的主要提供程序包括: AWSAzureGCPKubernetesAlibaba CloudOracle Cloud 等...它还支持 On-Premise 节点、 SaaS 和主要 Programming 框架和语言。

图即代码还允许我们跟踪任何版本控制系统中的架构图更改。

安装:

pip install diagrams -i

第一个入门示例

from diagrams import Diagramfrom diagrams.aws.compute import EC2from diagrams.aws.database import RDSfrom diagrams.aws.network import ELBimport IPython.display as displaywith Diagram("Web 服务", show=False, filename="diagram"):    ELB("弹性负载均衡") >> EC2("web服务器") >> RDS("数据库服务器")display.Image("diagram.png", width="100%", height=None)
稍微复杂一点的
from diagrams import Cluster, Diagram, Edgefrom diagrams.onprem.analytics import Sparkfrom diagrams.onprem.compute import Serverfrom diagrams.onprem.database import PostgreSQLfrom diagrams.onprem.inmemory import Redisfrom diagrams.onprem.aggregator import Fluentdfrom diagrams.onprem.monitoring import Grafana, Prometheusfrom diagrams.onprem.network import Nginxfrom diagrams.onprem.queue import Kafkaimport IPython.display as displaywith Diagram(name="Advanced Web Service with On-Premise (colored)", show=False, filename="diagram"):    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    display.Image("diagram.png", width="100%", height=None)

标签: #代码有什么用