Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • Wiki Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 52
    • Issues 52
    • 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
  • CP - Planta
  • WikiWiki
  • Wiki
  • arquitetura

Last edited by Alexya Silva Rocha de Oliveira Oct 26, 2024
Page history
This is an old version of this page. You can view the most recent version or browse the history.

arquitetura

Home Escopo Processo Design/Mockups Gerência Estudos Arquitetura Contratos BD Qualidade Configuração Instalação Instruções Utilização Analytics Infraestrutura Dicas

Arquitetura da Aplicação

Descrição

Nesta seção, detalhamos a arquitetura da aplicação, abordando as tecnologias utilizadas, o fluxo de deploy e a estrutura dos componentes. Além disso, descrevemos as metodologias de desenvolvimento adotadas, que visam garantir a qualidade e a eficiência no ciclo de vida do software.

Sumário

  • Definição das Tecnologias
    • Backend
    • Frontend
  • Diagrama de Componentes
  • Diagrama de Deploy
  • Metodologias de Desenvolvimento
    • Backend - BDD e DDD
    • Frontend - MVC
  • [Arquitetura & Deploy] (#arquitetura-e-deploy)

Definição das Tecnologias

Backend

  • Linguagem: JavaScript + TypeScript
  • Ambiente de execução: Node.js
  • Framework para API: Nest.js
  • Banco de dados: PostgreSQL
  • Interface de persistência: Prisma ORM
  • Documentação da API: Swagger
  • Testes: Jest
  • Containerização: Docker + Docker Compose

Frontend

  • Linguagem: JavaScript + TypeScript
  • Ambiente de execução: Node.js
  • Framework: Next.js
  • Estilização: Tailwind CSS
  • Gerenciamento de requisições HTTP: Axios
  • Testes: Jest

Diagrama de Componentes

O diagrama de componentes abaixo ilustra a estrutura principal da aplicação, evidenciando a interação entre os componentes do frontend e backend.

Frontend:

O frontend é composto por dois módulos principais:

  • App: Representa as telas que compõem a interface do usuário, onde ocorrem as interações.
  • Components: São partes reutilizáveis da interface, como botões e formulários, que podem ser incorporados em diferentes telas.

Backend:

No backend, seguindo o padrão modular do Nest.js, os subcomponentes são divididos de acordo com responsabilidades específicas, facilitando a escalabilidade e manutenção da aplicação. Estes módulos lidam com autenticação, comunicação com o banco de dados, lógica de negócios, entre outras funções críticas.

Diagrama de Componentes

Diagrama de Deploy

O diagrama de deploy a seguir detalha o processo automatizado de entrega contínua da aplicação. Cada vez que um commit é enviado para a branch principal (Main), são acionadas várias etapas de verificação e validação, incluindo:

  1. Linting: Verificação de boas práticas e padrões de código.
  2. Testes Unitários: Execução de testes automatizados para garantir a integridade das funcionalidades.
  3. Deploy: Após as validações, o código é automaticamente enviado e implantado em instâncias da AWS.

Infraestrutura:

  • Frontend e Backend: Ambos são executados dentro de containers no mesmo EC2, garantindo consistência e isolamento de ambiente.
  • Banco de dados: O PostgreSQL também está em execução na AWS, comunicando-se diretamente com o backend para garantir a persistência dos dados.

Essa automação garante que as atualizações do código sejam rapidamente entregues ao ambiente de produção, assegurando que a aplicação esteja sempre com a versão mais recente disponível para os usuários.

Diagrama de Deploy

Metodologias de Desenvolvimento

Backend - BDD e DDD

BDD (Behavior-Driven Development)

O BDD é uma metodologia que expande o TDD (Test-Driven Development) ao focar no comportamento do sistema do ponto de vista do usuário. Essa abordagem permite uma comunicação clara entre as partes interessadas e a equipe de desenvolvimento, utilizando uma linguagem comum, acessível para todos os envolvidos.

  • Formato típico: Os cenários em BDD seguem o formato "Dado que... Quando... Então...", onde:
    • Dado que: Define o estado inicial do sistema.
    • Quando: Descreve a ação do usuário.
    • Então: Especifica o resultado esperado.

Isso garante que o software seja desenvolvido de acordo com os requisitos funcionais e focado nas necessidades reais dos usuários.

DDD (Domain-Driven Design)

O DDD foca na modelagem do domínio de negócios, estabelecendo uma linguagem comum entre os desenvolvedores e especialistas do domínio. A estrutura do software é baseada no entendimento profundo das regras e processos do negócio.

Principais conceitos do DDD:

  • Entidades: Objetos com identidade única.
  • Agregados: Conjuntos de entidades que formam uma unidade lógica.
  • Serviços de Domínio: Funcionalidades que não pertencem diretamente a uma entidade.
  • Repositórios: Interfaces que lidam com o armazenamento e recuperação de entidades.
  • Value Objects: Objetos que são definidos apenas por seus atributos.

Essa metodologia permite que o software evolua de forma orgânica, acompanhando as mudanças no domínio de negócio.

Frontend - MVC

MVC (Model-View-Controller)

A arquitetura MVC separa a aplicação em três partes principais, facilitando o desenvolvimento e a manutenção do código:

  • Model: Gerencia os dados e a lógica de negócios da aplicação. No frontend, isso pode incluir hooks, estados e manipulação de dados da API.
  • View: Define a interface visual da aplicação, utilizando componentes React estilizados com Tailwind CSS para garantir uma experiência de usuário consistente e responsiva.
  • Controller: Atua como intermediário, lidando com as interações do usuário e as respostas da API, implementado no Next.js através de rotas e controladores.

Essa abordagem garante uma clara separação de responsabilidades, tornando a aplicação mais modular e fácil de escalar.

Arquitetura & Deploy

Resumo do Projeto: A arquitetura de infraestrutura foi projetada para suportar de forma robusta o ciclo de vida de desenvolvimento e deploy contínuo das aplicações. A solução utiliza um conjunto de tecnologias e boas práticas que garantem escalabilidade, segurança e automação a fim de prover escalabilidade para a PoC desenvolvida.

Componentes Principais da Infraestrutura:

Infraestrutura AWS EC2 (Região US East 2 - Ohio):

  • Instâncias EC2 (CP-Planta1 e CP-Planta2): São instâncias de classe t2.medium que hospedam o ambiente de produção. Elas fazem parte de um grupo de segurança e de uma sub-rede gerenciada na região de Ohio.
  • Grupo de Segurança e Sub-rede: Controlam o tráfego e garantem o isolamento e a segurança da infraestrutura.

Orquestração com Docker Swarm:

  • Docker Swarm é utilizado para gerenciar e orquestrar os contêineres, oferecendo alta disponibilidade e escalabilidade automática.
  • Os serviços principais incluem um backend desenvolvido com Nest.js, um frontend em Next.js, e um banco de dados PostgreSQL.
  • Além disso, possuímos um banco de dados configurado com uma instância principal e uma réplica, proporcionando alta disponibilidade e resiliência. A réplica permite que o ambiente continue operando, mesmo em caso de falhas na instância principal, além de melhorar o desempenho distribuindo leituras entre as instâncias.
  • O PgBouncer é utilizado como um serviço de pool de conexões, otimizando o uso dos recursos do banco de dados. Ele gerencia as conexões dos aplicativos ao serviço PostgreSQL primário, reduzindo a carga no banco e melhorando a eficiência das operações de leitura e escrita.

Automação e Gerenciamento com Ansible:

  • Ansible é responsável pela configuração inicial das instâncias e pela orquestração do deploy. Ele automatiza a instalação de dependências, inicialização do cluster Swarm, e o deploy de novos serviços.

Pipeline de CI/CD:

O pipeline CI/CD é composto por dois conjuntos trabalhos principais:

  • JOB 1: Testa padrões de commit, roda o processo de linting para averiguar formatação, roda os teste que forem definidos, atualiza as imagens Docker com novas alterações de código a partir do GitLab CI e por fim, aciona o trigger para o JOB 2.
  • JOB 2: Aciona o deploy das novas imagens nas instâncias EC2 através do Ansible, garantindo que o ambiente esteja sempre atualizado com a última versão validada.

Destaques da Arquitetura:

  • Automação de Ponta a Ponta: A integração entre Ansible, Docker Swarm e o pipeline de CI/CD elimina a necessidade de intervenções manuais, aumentando a eficiência do processo de deploy.
  • Escalabilidade e Resiliência: A utilização de Docker Swarm permite escalonar automaticamente os serviços, enquanto a infraestrutura na AWS garante alta disponibilidade.
  • Segurança e Controle de Acesso: A combinação de sub-redes e grupos de segurança assegura que o tráfego seja corretamente roteado e protegido.

                                                                                                         Topo

Clone repository
  • Infraestrutura
  • Utilizando a wiki
    • adicionando imagens
    • escrevendo em markdown
    • wiki no editor de texto
  • analytics
  • arquitetura
  • backend_categories
  • backend_inicio
  • backend_persons
  • backend_production_order
  • backend_products
  • backend_qualidade
  • backend_settings
  • backend_stock
  • backend_stock_locations
View All Pages