Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • C Cosmos
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Cosmos
  • Cosmos
  • Wiki
  • Arquitetura

Arquitetura · Changes

Page history
Update Arquitetura authored Oct 16, 2024 by Gabriel Grellert Spiandorello's avatar Gabriel Grellert Spiandorello
Hide whitespace changes
Inline Side-by-side
Arquitetura.md
View page @ 2488459a
...@@ -19,37 +19,30 @@ ...@@ -19,37 +19,30 @@
# Arquitetura do Sistema # Arquitetura do Sistema
Na nossa arquitetura da nuvem usaremos principalmente o serviço [ECS(Elastic Container Service) da AWS](https://aws.amazon.com/ecs/). Este é um serviço de orquestração de contêineres totalmente gerenciado que facilita a implantação, o gerenciamento e a escala de aplicações em contêineres. Este seviço vai servir para garantir à nossa aplicação uma camada extra de segurança e escalabilidade. A arquitetura utilizada no projeto é baseada no padrão Modular, com inspiração na arquitetura em camadas (Layered Architecture). No NestJS, os componentes são organizados em DTOs (Data Transfer Objects), Controllers, Services e Modules. Cada módulo encapsula a lógica relacionada a um domínio específico da aplicação, facilitando a manutenção e a escalabilidade. Os DTOs são responsáveis pela definição dos dados de entrada e saída, garantindo validações consistentes. Os Controllers lidam com as requisições HTTP, enquanto os Services contêm a lógica de negócios e manipulam a comunicação com outras partes da aplicação.
No ECS usaremos uma instância do [AWS Fargate](https://aws.amazon.com/pt/fargate/) que é um mecanismo de computação sem servidor e com pagamento conforme o uso que permite a você se concentrar em construir aplicações sem gerenciar servidores. Essa abordagem modular e bem estruturada permite separar responsabilidades e promover um código limpo e reutilizável. A injeção de dependências é um ponto forte dessa arquitetura, possibilitando testes mais simples e maior flexibilidade na substituição de implementações conforme necessário.
Para realizarmos nosso deploy no ECS usaremos o [ECR(Elastic Container Registry)](https://aws.amazon.com/pt/ecr/) que é um registro de contêiner totalmente gerenciado que oferece hospedagem de alta performance para que você possa implantar imagens e artefatos de aplicações de forma confiável em qualquer lugar.
O fluxo da nosso deploy será enviar uma imagem conteinerizada da nossa aplicação, no total 3 imagens (frontend, backend e banco de dados), para o ECR. Com a imagem no ECR iremos para a configuração do ECS, onde criaremos uma task(um serviço) usando uma instancia do AWS Fargate.
Esse é um padrão de deploy oferecido pela propria AWS.
![Explicacao_Arquitetura](uploads/b2e8250292b5efef33b5632b9ee22ef8/Explicacao_Arquitetura.png)
Para mais informações do ECS e seu fluxo de deploy, a AWS oferece um [workshop](https://ecsworkshop.com/introduction/) sobre os serviços.
# Deploy # Deploy
- O deploy é o processo de disponibilizar uma aplicação concluída para uso. Esse processo pode ser realizado em diversas fases do projeto, assim como após sua finalização. Utilizamos a plataforma de computação em nuvem TDB. No processo de deploy descrito no diagrama, o backend e o banco de dados são configurados em containers Docker. Inicialmente, as imagens Docker desses serviços são buildadas a partir do repositório no GitLab. Após a build, essas imagens são enviadas para o Elastic Container Registry (ECR) da AWS. A instância EC2, responsável por executar os serviços, recupera essas imagens diretamente do ECR e as executa em containers Docker, garantindo que a versão mais recente da aplicação esteja rodando.
Para o frontend, o deploy é gerenciado pelo AWS Amplify, que está integrado ao repositório GitLab. Toda vez que um push é feito na branch main, o AWS Amplify automaticamente detecta as mudanças e inicia o processo de build e deploy da aplicação frontend. Isso automatiza o ciclo de deploy contínuo, garantindo que as atualizações sejam rapidamente disponibilizadas tanto para o backend quanto para o frontend.
## Diagrama de Deploy ## Diagrama de Deploy
- O diagrama apresenta o processo de deploy da aplicação Cosmos utilizando a nuvem AWS. - O diagrama apresenta o processo de deploy da aplicação Cosmos utilizando a nuvem AWS.
![Cosmos_-_Diagrama_de_Arquitetura](uploads/8969da702045494e94601db25134c90c/Cosmos_-_Diagrama_de_Arquitetura.png) ![Cosmos_-_Diagrama_de_Arquitetura](uploads/76dc5f5a960239760e5077aa0e305b1c/Cosmos_-_Diagrama_de_Arquitetura.png)
## Diagrama de Componentes ## Diagrama de Componentes
Um diagrama de componentes eficiente para a aplicação "Cosmos" pode ser organizado conforme as funções específicas de cada parte do sistema: Um diagrama de componentes eficiente para a aplicação "Cosmos" pode ser organizado conforme as funções específicas de cada parte do sistema:
### Componentes de Infraestrutura ### Componentes de Infraestrutura
1. **Amazon Elastic Container Service (ECS)**: Responsável pela orquestração dos containers que rodam tanto o backend quanto o banco de dados. 1. **Amazon Elastic Compute Cloud (EC2)**: Responsável pela execução dos containers Docker que rodam tanto o backend quanto o banco de dados. A EC2 é configurada para puxar as imagens mais recentes do ECR e executar os containers, oferecendo uma infraestrutura flexível e escalável para o deploy.
2. **Amazon Elastic Container Registry (ECR)**: Repositório onde as imagens Docker são armazenadas. 2. **Amazon Elastic Container Registry (ECR)**: Repositório onde as imagens Docker do backend e banco de dados são armazenadas. As imagens são buildadas e enviadas para o ECR a partir do repositório GitLab.
3. **AWS Fargate**: Provedor de serviço serverless que gerencia a execução dos containers, dispensando o uso de servidores. 3. **GitLab CI/CD**: Pipeline de CI/CD que automatiza o build das imagens Docker e o envio para o ECR. O GitLab CI/CD é responsável por garantir que o código mais recente seja transformado em uma imagem Docker pronta para ser executada na EC2.
### Componentes de Backend ### Componentes de Backend
1. **NestJS**: Framework utilizado para o desenvolvimento do backend, que está dentro de um container Docker. 1. **NestJS**: Framework utilizado para o desenvolvimento do backend, que está dentro de um container Docker.
......
Clone repository
  • Arquitetura
  • Banco de Dados
  • Configuracao
  • Design_mockups
  • Escopo
  • Gerencia
  • Git Workflow
  • Qualidade
  • Home