Диаграмма архитектуры
Диаграмма архитектуры используется для отображения отношений между сервисами и ресурсами, типичными для облачных развёртываний или развёртываний CI/CD. На диаграмме архитектуры сервисы (узлы) соединяются линиями. Связанные сервисы можно помещать в группы, чтобы лучше показать способ их организации.
Пример
Копировать
Встраивание
architecture-beta
group api(cloud)[API]
service db(database)[Database] in api
service disk1(disk)[Storage] in api
service disk2(disk)[Storage] in api
service server(server)[Server] in api
db:L -- R:server
disk1:T -- B:server
disk2:T -- B:db
Синтаксис
Строительными блоками диаграммы архитектуры являются: группы, сервисы, соединения и точки соединения.
Для поддерживаемых компонентов значок объявляется путём заключения значка в круглые скобки (), а метка объявляется путём заключения текста в квадратные скобки [].
Чтобы начать диаграмму архитектуры, нужно использовать синтаксис architecture-beta, затем перечислить группы, сервисы, соединения и точки соединения. Хотя эти 3 строительных блока можно объявлять в любом порядке, необходимо убедиться, что идентификатор уже был ранее объявлен другим компонентом.
Группа
Синтаксис объявления группы таков:
Копировать
Встраивание
group {group id}({icon name})[{title}] (in {parent id})?
В совокупности:
Копировать
Встраивание
group public_api(cloud)[Public API]
Создаётся группа с именем public_api, использующая значок cloud, с меткой Public API.
Кроме того, можно с помощью необязательного синтаксиса in поместить группу в другую группу.
Копировать
Встраивание
group private_api(cloud)[Private API] in public_api
Сервис
Синтаксис объявления сервиса таков:
Копировать
Встраивание
service {service id}({icon name})[{title}] (in {parent id})?
В совокупности:
Копировать
Встраивание
service database1(database)[My Database]
Создаётся сервис с именем database1, использующий значок database, с меткой My Database.
Если этот сервис принадлежит некоторой группе, его можно поместить в неё с помощью необязательного синтаксиса in
Копировать
Встраивание
service database1(database)[My Database] in private_api
Соединение
Синтаксис объявления соединения таков:
Копировать
Встраивание
{serviceId}{{group}}?:{T|B|L|R} {<}?--{>}? {T|B|L|R}:{serviceId}{{group}}?
Направление соединения
С какой стороны сервиса выходит соединение, можно указать, добавив на стороне сервиса в соединении двоеточие : и L|R|T|B.
Например:
Копировать
Встраивание
db:R -- L:server
Создать соединение между сервисами db и server, которое идёт от правой стороны db к левой стороне server.
Копировать
Встраивание
db:T -- L:server
Создать соединение под 90 градусов между сервисами db и server, которое идёт от верхней части db и левой стороны server.
Стрелка
Добавив < перед направлением слева или > после направления справа, можно добавить стрелки на каждую сторону соединения.
Например:
Копировать
Встраивание
subnet:R --> L:gateway
Создать соединение со стрелкой, указывающей на сервис gateway.
Соединения между группами
Чтобы соединение переходило из одной группы в другую группу или к сервису в другой группе, можно добавить модификатор {group} после serviceId.
Например:
Копировать
Встраивание
service server[Server] in groupOne
service subnet[Subnet] in groupTwo
server{group}:B --> T:subnet{group}
Создать соединение, которое начинается от groupOne, соединяется рядом с server, затем входит в groupTwo и соединяется рядом с subnet.
Следует учесть, что groupId нельзя использовать для указания соединения, а модификатор {group} можно применять только к сервисам внутри группы.
Точка соединения
Точка соединения — это особый тип узла, который может служить потенциальной точкой четырёхстороннего разветвления соединений.
Синтаксис объявления точки соединения таков:
Копировать
Встраивание
junction {junction id} (in {parent id})?
Копировать
Встраивание
architecture-beta
service left_disk(disk)[Disk]
service top_disk(disk)[Disk]
service bottom_disk(disk)[Disk]
service top_gateway(internet)[Gateway]
service bottom_gateway(internet)[Gateway]
junction junctionCenter
junction junctionRight
left_disk:R -- L:junctionCenter
top_disk:B -- T:junctionCenter
bottom_disk:T -- B:junctionCenter
junctionCenter:R -- L:junctionRight
top_gateway:B -- T:junctionRight
bottom_gateway:T -- B:junctionRight