-
-
Save wesleywillians/638eb92b0a4a94adf9f2638edd400986 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@startuml contexto | |
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml | |
AddRelTag("async", $lineStyle = DashedLine()) | |
SHOW_PERSON_PORTRAIT() | |
title "Codeflix: Projeto Prático do Curso Full Cycle" | |
Person(administrador_catalogo,"Administrador do catálogo de vídeos","Gerencia os vídeos do catálogo e suas categorias") | |
Person(administrador_assinantes,"Administrador dos assinantes","Gerencia os assinantes do sistema, bem como os planos de assinatura") | |
Person(assinante,"Assinante da plataforma","Assina a plataforma para ter acesso aos vídeos") | |
System_Boundary(gateway, "Codeflix") { | |
Container(frontend_catalogo_admin,"Frontend: Admin do Catálogo de Vídeos","React","SPA que gerencia os vídeos, incluindo as categorias e gêneros") | |
Container(backend_catalogo_admin,"Backend: Admin do Catálogo de Vídeos","Linguagem livre","Gerencia o catálogo de vídeos, incluindo as categorias e gêneros") | |
Container(backend_catalogo_admin_database,"Database Admin do Catálogo de Vídeos","MySQL","Armazena dados do catálogo de vídeos") | |
Rel(frontend_catalogo_admin,backend_catalogo_admin,"Interage com via","HTTPS/JSON") | |
Rel(backend_catalogo_admin,backend_catalogo_admin_database,"Interage com usando","TCP") | |
Container(encoder,"Encoder de vídeos","Go","Realiza o encoding dos vídeos para mpeg-dash") | |
Container(bucket_videos,"Bucket de armazenamento de vídeos encodados","GCP") | |
Container(bucket_videos_raw,"Bucket de armazenamento de vídeos raw","GCP") | |
Rel(encoder,bucket_videos,"Faz upload do vídeo convertido via","HTTPS") | |
Rel(encoder,bucket_videos_raw,"Faz download do vídeo raw via","HTTPS") | |
Rel(backend_catalogo_admin,bucket_videos_raw,"Faz upload do vídeo raw via","HTTPS") | |
Rel(encoder,backend_catalogo_admin,"Consome dados do vídeo recém-criado via","RabbitMQ Fila videos.new",$tags = "async") | |
Rel(encoder, backend_catalogo_admin,"Publica que vídeo foi convertido via","RabbitMQ Fila videos.converted",$tags = "async") | |
Rel(backend_catalogo_admin, encoder,"Consome dados do vídeo convertido via","RabbitMQ Fila videos.converted",$tags = "async") | |
Rel(backend_catalogo_admin, encoder,"Publica que novo vídeo foi enviado para o bucket raw via","RabbitMQ Fila videos.new",$tags = "async") | |
Container(frontend_catalogo,"Frontend do catálogo de vídeos","React","Disponibiliza a navegação e o playback dos vídeos para os assinantes") | |
Container(api_catalogo,"API do Catálogo de Vídeos","Linguagem livre","Disponibiliza os endpoints para a navegação e playback dos vídeos") | |
Container(elasticsearch_api_catalogo,"Database API do Catálogo","Elasticsearch","Armazena dados dos vídeos, gêneros, cast members e categorias") | |
Container(apache_kafka,"Apache Kafka","Message Broker","Armazena e serve dados vindos do kafka Connect") | |
Container(kafka_connect,"Kafka Connect","Integração de dados","Serviço de replicação de dados do catálogo") | |
Rel(api_catalogo,elasticsearch_api_catalogo,"Interage com via","HTTPS/JSON") | |
Rel(kafka_connect,elasticsearch_api_catalogo,"Envia dados do catálogo de vídeos via","Sink Elasticsearch",$tags = "async") | |
Rel(kafka_connect,backend_catalogo_admin_database,"Copia dados usando connector","Debezium MySQL",$tags = "async") | |
Rel(kafka_connect,apache_kafka,"Interage com via","Protocolo Kafka",$tags = "async") | |
Container(assinatura,"Linguagem livre","Assinatura","Gerencia planos e assinaturas dos assinantes") | |
Container(assinatura_postgres,"Database de Assinaturas","Postgres","Armazena dados dos assinantes e seus planos") | |
Rel(assinatura,assinatura_postgres,"Interage com via","Protocolo Postgres") | |
Container(keycloak,"Keycloak","Serviço de Identidade","Realiza a autenticação de todos usuários da plataforma") | |
Rel(administrador_catalogo,frontend_catalogo_admin,"Interage com via","HTTPS") | |
Rel(assinante,assinatura,"Interage com via","HTTPS") | |
Rel(assinante,keycloak,"Interage com via","HTTPS") | |
Rel(assinatura,keycloak,"Interage com via","HTTPS") | |
Rel(frontend_catalogo_admin,keycloak,"Se autentica em","HTTPS") | |
Rel(assinante,frontend_catalogo,"Interage com via","HTTPS") | |
Rel(frontend_catalogo,api_catalogo,"Interage com via","HTTPS/JSON") | |
Rel(administrador_assinantes,assinatura,"Interage com","HTTPS") | |
} | |
@enduml |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment