Создание диаграмм архитектуры облачной системы с помощью Python

За последние несколько лет я использовал множество различных инструментов, подходящих для рисования диаграмм системной архитектуры, включая платформу данных и облачную архитектуру, в том числе draw.io и Excalidraw.

Несмотря на то, что эти платформы предлагают широкий спектр инструментов, которые могут помочь вам нарисовать нужную диаграмму, у меня всегда были проблемы с несколькими вещами. Во-первых, мне было нелегко делиться диаграммами с другими людьми в организации таким образом, чтобы они могли обновлять или изменять их. Во-вторых, было почти невозможно контролировать версии моих диаграмм — в большинстве случаев мне приходилось сохранять файл с метаданными, который затем можно было использовать для перезагрузки старой диаграммы.

Наконец, моим диаграммам не хватало последовательности, что, на мой взгляд, очень важно, учитывая, что вы должны создать несколько разных диаграмм, которые вы должны представить пользователям и коллегам. И под согласованностью я подразумеваю возможность последовательного использования различных компонентов диаграммы, включая ребра, узлы и т. д.

Совсем недавно я наткнулся на пакет Python, который позволяет рисовать архитектуру облачной системы в коде Python без каких-либо инструментов проектирования. Другими словами, он предлагает диаграммы как код таким образом, что вы можете программно рисовать диаграммы, имея при этом возможность контролировать их версии.

Пакет "Диаграммы"

Диаграммы — это пакет Python, который можно использовать для создания диаграмм архитектуры облачной системы и который поддерживает шесть основных облачных провайдеров, включая Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Kubernetes, Alibaba Cloud и Oracle Cloud. Кроме того, он также поддерживает другие широко используемые технологии, такие как определенные языки программирования, фреймворки, системы чата и многие другие узлы. В то же время у вас также есть возможность создавать собственные узлы для обслуживания ваших конкретных вариантов использования.

Для пакета требуется версия Python 3.6 или выше, поэтому, прежде чем приступить к работе, убедитесь, что на вашем хост-компьютере установлена ​​совместимая версия Python. Кроме того, вам также необходимо установить Graphviz — программное обеспечение для визуализации графиков с открытым исходным кодом, которое пакет Diagrams использует для визуализации диаграмм.

Пользователи macOS могут загрузить Graphviz через brew install graphviz, если вы используете Homebrew. Точно так же пользователи Windows с установленным Chocolatey могут запускать choco install graphviz.

— Диаграммы Документация

Теперь, когда вы дважды проверили свою версию Python и установили Graphviz, вы можете продолжить и установить пакет через pip:

$ pip install diagrams

Создание диаграмм облачной архитектуры в Python

Прежде чем создавать нашу первую диаграмму как код, давайте рассмотрим некоторые из наиболее фундаментальных компонентов этого пакета.

Первый — это Diagram, который является основным объектом, представляющим глобальный контекст диаграммы. Вы можете использовать Diagram в качестве менеджера контекста

from diagrams import Diagram
from diagrams.gcp.analytics import Bigquery

with Diagram('My Diagram'):
    BigQuery('Data Warehouse')

Приведенный выше фрагмент кода создаст диаграмму, состоящую из одного узла BigQuery, который является управляемой службой хранилища данных на Google Cloud Platform.

Вторым фундаментальным компонентом пакета является Node, представляющий собой абстрактное понятие, представляющее один объект системного компонента. Типичный Node состоит из трех основных частей; поставщик, тип ресурса и имя. Например, узел BigQuery, который мы использовали в предыдущем фрагменте кода, предоставляется поставщиком gcp и имеет тип ресурса analytics (и, очевидно, BigQuery соответствует имени узла). Обратите внимание, что вы даже можете создать свой собственный узел:

from diagrams import Diagram, Node
with Diagram('My Diagram'):
    Node('This is a custom node')

Третий компонент, который имеет решающее значение при создании диаграмм с помощью этой библиотеки, называется Cluster, который позволяет группировать несколько узлов таким образом, чтобы они были изолированы от любых других узлов, не содержащихся в кластере.

В качестве примера рассмотрим следующую диаграмму, состоящую из трех узлов; один для Google Cloud Storage (который является управляемой службой Object Storage на Google Cloud Platform), облачным узлом SQL (который является управляемой службой Postgres на GCP) и локальной MongoDB.

from diagrams import Cluster, Diagram
from diagrams.gcp.database import SQL
from diagrams.gcp.storage import GCS
from diagrams.onprem.database import MongoDB
with Diagram('My Diagram', direction='TB'):
  gcs = GCS('Google Cloud Storage')
with Cluster('Databases'):
  cloud_sql = SQL('Cloud SQL')
  mongodb = MongoDB('MongoDB')

Наконец, последним фундаментальным компонентом диаграммы является Edge — объект, который представляет границу между двумя объектами Node и имеет три свойства; этикетка, цвет и стиль.

from diagrams import Diagram, Edge, Node

with Diagram('My Diagram', direction='TB'):
    n1 = Node('n1')
    n2 = Node('n2')
    n3 = Node('n3')
    n4 = Node('n4')
    n5 = Node('n5')
    n6 = Node('n6')   
    
    n1 >> n2
    n3 - n4
    n5 >> Edge(label='This is a label', color='red') >> n6

Создание схемы архитектуры

Теперь, когда мы узнали об основных объектах, необходимых для создания диаграммы с помощью Python, давайте создадим более реалистичный поток, используя компоненты, о которых мы упоминали ранее.

В следующем примере (взятом из официальной документации) мы создаем диаграмму, соответствующую системе сбора сообщений на платформе Google Cloud.

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

Последние мысли

Диаграммы архитектуры очень важны, поскольку они дают четкое представление о том, как различные компоненты работают в организации. Поэтому важно правильно их понять, а также представить их красивым, интуитивно понятным и последовательным способом.

Кроме того, также важно иметь возможность легко обмениваться этими диаграммами таким образом, чтобы они могли легко изменяться разными людьми при контроле версий.

Диаграммы как код — это подход, который может помочь вам двигаться в этом направлении, когда речь идет о рисовании и совместном использовании архитектурных диаграмм. В сегодняшнем уроке мы продемонстрировали, как воспользоваться преимуществами пакета diagrams для программного создания диаграмм с помощью Python.

Стать участником и читать все истории на Medium. Ваш членский взнос напрямую поддерживает меня и других писателей, которых вы читаете. Вы также получите полный доступ ко всем историям на Medium.



Статьи по теме, которые вам также могут понравиться