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

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

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