-
Notifications
You must be signed in to change notification settings - Fork 0
/
architecture_c4_model.puml
50 lines (36 loc) · 2.59 KB
/
architecture_c4_model.puml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@startuml architecture
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
!define ICONURL https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/v2.4.0
!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons
!define CLOUDOGUURL https://raw.githubusercontent.com/cloudogu/plantuml-cloudogu-sprites/master
!includeurl ICONURL/devicons/go.puml
!includeurl ICONURL/devicons/nodejs.puml
!include DEVICONS/mysql.puml
!include DEVICONS/react.puml
!includeurl CLOUDOGUURL/tools/prometheus.puml
!includeurl CLOUDOGUURL/tools/grafana.puml
AddRelTag("async", $lineStyle = DashedLine())
SHOW_PERSON_PORTRAIT()
System_Ext(client, "Client", "Sistema que solicita o pagamento")
Person(user, "Administrador", "Acompanha as transações de pagamento")
Person(superadmin, "Administrador da Gateway", "Acompanha as métricas de transações de pagamento")
System_Boundary(gateway, "Full Cycle Gateway"){
Container(backend, "Backend", "Nest.js", "Sistema que recebe a solicitação de pagamento", $sprite = "nodejs")
Container(processor, "Processador de pagamentos", "Go", "Processa pagamento: autorizando ou rejeitando",$sprite = "go")
ContainerDb(mysql_backend,"Banco de dados", "MySQL", "Armazena as transações de pagamento", $sprite = "mysql")
ContainerDb(mysql_processor, "Banco de dados", "MySQL", "Armazena as transações de pagamento", $sprite = "mysql")
Container(prometheus, "Métricas de pagamento", "Prometheus", "Armazena métricas de pagamento", $sprite = "prometheus")
Rel(prometheus, processor, "Consome métricas de pagamento em", "HTTP/TXT")
Container(grafana, "Dashboard de métricas", "Grafana", "Exibe métricas de pagamentos", $sprite = "grafana")
Rel(grafana, prometheus, "Consome métricas de pagamento em", "PromQL")
Rel(superadmin, grafana, "Consome métricas de pagamento em", "HTTPS")
Container(frontend, "Painel de Controle", "Next.js", "Monitora as transações de pagamento e seus status", $sprite = "react")
Rel(user, frontend, "solicita dados das transações em", "HTTPS")
Rel(frontend, backend, "Recupera informações de pagamento", "HTTPS/JSON")
Rel(processor, mysql_processor, "Recebe dados do pagamento", "MySQL Protocol")
Rel(backend, mysql_backend, "Recebe dados do pagamento", "MySQL Protocol")
Rel(client, backend, "solicita pagamento em", "HTTP/JSON")
Rel(backend, processor, "envia dados de pagamento para", "Através do Kafka pelo tópico transactions", $tags = "async")
Rel(processor, backend, "envia resultado da transação", "Através do Kafka pelo tópico transactions_result", $tags = "async")
}
@enduml