Diagrama de arquitetura
O diagrama de arquitetura é usado para exibir as relações entre serviços e recursos comuns em implantações em nuvem ou CI/CD. No diagrama de arquitetura, os serviços (nós) são conectados por linhas. Serviços relacionados podem ser colocados em grupos, para ilustrar melhor como estão organizados.
Exemplo
Copiar
Incorporar
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
Sintaxe
Os blocos de construção do diagrama de arquitetura são: grupos, serviços, linhas de conexão e pontos de conexão.
Para componentes com suporte, os ícones são declarados entre parênteses () e os rótulos são declarados com o texto entre colchetes [].
Para iniciar um diagrama de arquitetura, é preciso usar a sintaxe architecture-beta e, em seguida, listar grupos, serviços, linhas de conexão e pontos de conexão. Embora esses 3 blocos de construção possam ser declarados em qualquer ordem, é preciso garantir que o identificador já tenha sido declarado anteriormente por outro componente.
Grupo
A sintaxe para declarar um grupo é:
Copiar
Incorporar
group {group id}({icon name})[{title}] (in {parent id})?
Combinado:
Copiar
Incorporar
group public_api(cloud)[Public API]
Cria um grupo chamado public_api, usando o ícone cloud, com o rótulo Public API.
Além disso, é possível colocar um grupo dentro de outro usando a sintaxe opcional in.
Copiar
Incorporar
group private_api(cloud)[Private API] in public_api
Serviço
A sintaxe para declarar um serviço é:
Copiar
Incorporar
service {service id}({icon name})[{title}] (in {parent id})?
Combinado:
Copiar
Incorporar
service database1(database)[My Database]
Cria um serviço chamado database1, usando o ícone database, com o rótulo My Database.
Se o serviço pertencer a um grupo, é possível colocá-lo nele usando a sintaxe opcional in
Copiar
Incorporar
service database1(database)[My Database] in private_api
Linha de conexão
A sintaxe para declarar uma linha de conexão é:
Copiar
Incorporar
{serviceId}{{group}}?:{T|B|L|R} {<}?--{>}? {T|B|L|R}:{serviceId}{{group}}?
Direção da linha de conexão
De qual lado do serviço a linha de conexão sai pode ser especificado adicionando dois-pontos : ao lado do serviço na seta de conexão e acrescentando L|R|T|B.
Por exemplo:
Copiar
Incorporar
db:R -- L:server
Cria uma linha de conexão entre os serviços db e server; essa linha vai do lado direito de db até o lado esquerdo de server.
Copiar
Incorporar
db:T -- L:server
Cria uma linha de conexão de 90 graus entre os serviços db e server; essa linha sai do topo de db e do lado esquerdo de server.
Setas
É possível adicionar setas em cada lado da linha de conexão adicionando < antes da direção à esquerda, ou > depois da direção à direita.
Por exemplo:
Copiar
Incorporar
subnet:R --> L:gateway
Cria uma linha de conexão com uma seta apontando para o serviço gateway.
Linha de conexão fora do grupo
Para fazer uma linha de conexão passar de um grupo para outro grupo ou para um serviço dentro de outro grupo, adicione o modificador {group} após o serviceId.
Por exemplo:
Copiar
Incorporar
service server[Server] in groupOne
service subnet[Subnet] in groupTwo
server{group}:B --> T:subnet{group}
Cria uma linha de conexão que parte de groupOne, conecta-se à proximidade de server e, em seguida, entra em groupTwo, conectando-se à proximidade de subnet.
Vale observar que o groupId não pode ser usado para especificar uma linha de conexão, e o modificador {group} só pode ser usado para serviços dentro de um grupo.
Ponto de conexão
O ponto de conexão é um tipo especial de nó que pode servir como ponto potencial de bifurcação em quatro direções de uma linha de conexão.
A sintaxe para declarar um ponto de conexão é:
Copiar
Incorporar
junction {junction id} (in {parent id})?
Copiar
Incorporar
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