用Python创建漂亮的架构图

动手教程,停止手动花费时间调整未对齐的箭头
用Python创建漂亮的架构图文章插图
> Build with the code from the gist linked here.
一些背景故事本周早些时候 , 我偶然发现了一个具有引人注目的有意思的Python库 。该库称为diagrams , 并以其同名状态创建图 。生成的这些图通常是我将笨拙地将图像粘贴到draw.io或Google Diagrams中创建的 , 然后浪费大量时间正确对齐所有内容 。除了这个烦人的过程之外 , 当我以后需要更新这些图时 , 仅需要对体系结构进行一些更改 , 就需要举升和移动一半以上的组件 。在进一步调查图书馆之后 , 我能够看到它能够减轻我这边的痛苦 。
自己的图入门开始构建其中一些图的第一个要求是安装Python 3.6或更高版本 。在这种情况下 , 您将需要安装GraphViz , 因为这就是绘制图表的方式 。Github存储库实际上也有相当不错的"入门"部分 , 因此 , 如果您需要安装任何内容的帮助 , 请随时在此处引用 。一旦使用您最喜欢的Python软件包管理器安装了" diagrams"库 , 就可以开始创建了 。
对于我来说 , 因为满足了初始要求 , 所以它就像以下命令一样容易 。
组件类型图表库为许多不同的提供程序提供了组件 。在14个可用案例中 , 以下可能与大多数用例最相关 。
· AWS / GCP / Azure-这些提供商公开了您将在利用任何主要云提供商之一的任何图中使用的官方云服务资产 。我的团队主要在GCP中工作 , 在遍历该库之前 , 我将花费数小时手动构建这些图 , 因此当我发现这些节点资产触手可及时 , 我感到非常兴奋 。
· 通用和内部部署—如果您想以与云无关的方式来说明基础技术 , 则这些节点可能会一起使用 。例如 , 在显示的Google DataFlow上为架构提供Beam组件 。
· 框架-如果您想用编程语言说明节点 , 这些组件将非常有用 。
· SaaS —甚至还有一组可以使用的SaaS节点 , 当您想证明架构中的通知已落入诸如Slack之类的内容时 , 它就派上用场了 。
图的概念图表—图表是表示图表的主要对象 。
节点-代表单个系统组件的抽象概念 。
群集-允许您将节点组织成组(或群集) , 而不是孤立的组件 。
边缘—表示节点之间的链接 。
您的第一个图表既然您已经知道了基本概念 , 就可以按照我们学习这些概念的顺序 , 使用代码构建极其简单的图表 。我们将构建的示例图将是AWS上的一个简单负载平衡网站 , 该网站使用PostgreSQL数据库和Redis缓存 , 因此我们可以使用多个组件提供程序 。
步骤1:创建图工作区from diagrams import Diagramwith Diagram("Simple Website Diagram") as diag:passdiag # This will illustrate the diagram if you are using a Google Colab or Jypiter notebook.这将仅显示带有指定标签的空白图 , 如下所示 。
用Python创建漂亮的架构图文章插图
> Build with the code from the gist linked here.
步骤2:添加节点现在我们有了工作区 , 现在该添加网站所需的节点了 。我们要添加的节点来自两个不同的提供程序 。AWS和OnPrem提供程序 。如果您是真正做到这一点 , 则可能会坚持使用AWS , 因为它们可能会与该云提供商一起使用RDS和ElastiCache等产品 。
from diagrams import Diagram, Clusterfrom diagrams.aws.compute import EC2from diagrams.aws.network import ELBfrom diagrams.aws.network import Route53from diagrams.onprem.database import PostgreSQL # Would typically use RDS from aws.databasefrom diagrams.onprem.inmemory import Redis # Would typically use ElastiCache from aws.databasewith Diagram("Simple Website Diagram") as diag:dns = Route53("dns")load_balancer = ELB("Load Balancer")database = PostgreSQL("User Database")cache = Redis("Cache")svc_group = [EC2("Webserver 1"),EC2("Webserver 2"),EC2("Webserver 3")]diag # This will illustrate the diagram if you are using a Google Colab or Jypiter notebook.


推荐阅读