Я строю инфраструктуру, чтобы зарабатывать на жизнь. Обычно это включает в себя множество взаимодействующих друг с другом микросервисов. Сеть вызовов и обязанностей быстро становится трудной для понимания. Иногда доски и блокноты могут помочь демистифицировать систему, но я считаю документацию в виде кода гораздо лучшим решением (особенно когда многим разработчикам требуется адаптация).
Синтаксис файла DOT - это очень простой формат для описания графоподобного взаимодействия между узлами, который идеально подходит для документации по инфраструктуре. Определив DOT-файл, описывающий вашу систему, вы можете затем обработать его с помощью Graphviz и сгенерировать визуализации SVG или PNG. Затем вы можете включить эти изображения в файл README.md или в конвейер сборки, чтобы любой разработчик мог быстро понять вашу систему.
DOT файл
Вот пример DOT-файла, описывающий систему, которая обрабатывает потоки данных IOT с помощью общедоступного API, частного vpc и конвейера kinesis. Не беспокойтесь о деталях, просто используйте их как ссылку для следующего изображения.
/* This is a graphviz dot file See https://www.graphviz.org/doc/info/ for help */ digraph{ graph [fontname = "monospace", fontsize="10", color="grey", fontcolor="grey"]; node [fontname = "monospace",shape="box",style="filled"]; edge [fontname = "monospace",color="blue", fontcolor="blue",fontsize="10"]; /* define components in the clusters they belong to */ subgraph clusterProvider{ label="3rd party" "user" "app" "provider-backend"[label="3rd party\nbackend"] "provider-developer" } subgraph clusterPublicSubnet { label="public subnet" "public-api" "admin-api" "admin-gui" } subgraph clusterPrivateSubnet { label="private subnet" "IOT Gateway" "resource-service" "state-service" "DynamoDB" [shape="cylinder"] "RDS" [shape="cylinder"] "Kinesis" } subgraph clusterCustomerService { label="customer service" "customer-service" } subgraph clusterFleet { label="things" "thing" [shape="circle", color=""] } /* define calls between existing components */ "user" -> "app" "app" -> "provider-backend" "provider-backend" -> "public-api"[label="x-auth-token=API_KEY"] "public-api" -> "state-service" [label=" get thing\nlocation"] "public-api" -> "resource-service" [label=" get user,"] "resource-service" -> "RDS" [dir="both", label="read/write\nnon-transient\nresources"] "customer-service" -> "admin-gui"[label="manage users"] "customer-service" -> "provider-developer"[label="issue api key"] "admin-gui" -> "admin-api" "admin-api" -> "resource-service"[label="add users"] "IOT Gateway" -> "Kinesis" "Kinesis" -> "DynamoDB" [label="upsert \nthing state"] "state-service" -> "DynamoDB" [label="read \nthing state"] "thing" -> "IOT Gateway" [ label="thing\ntelematics\nstream" ] }
Строительство
dot demo.dot -T svg -o demo.svg
Результаты
Вывод
Как видите, изображения Graphviz DOT предоставляют очень четкий и полезный обзор сложной инфраструктуры. Как консультант я часто создаю эти графики для своих клиентов и сохраняю изображения и файлы DOT в репозитории обзора для последующего редактирования.
Надеюсь, этот совет окажется полезным и для вас.