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 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
    • Metrics
    • 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
  • Sem Barreiras
  • WikiWiki
  • Wiki
  • arquitetura

Last edited by pablo.alles Jul 07, 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 Configuração Arquitetura Gerência BD Qualidade Frontend Backend Analytics

Arquitetura

Esta página centraliza informações sobre o arquitetura do projeto e a infraestrutura da AWS utilizada para execução do projeto.

Sumário

  • Diagrama de deploy
  • Diagrama de deploy - versão 2
  • Ambientes utilizados
  • Arquitetura geral da aplicação
    • Backend
    • Frontend

Diagrama de deploy

Abaixo, é possível visualizar o diagrama de deploy do projeto:

Como é possível ver, além das tecnologias de Frontend e Backend, utilizam-se os serviços da AWS abaixo para execução da aplicação:

  • Bucket S3: para hospedar as imagens dos estabelecimentos cadastrados na aplicação.
  • Repositório ECR: para hospedar as imagens dos containers (Backend, PostgreSQL, e GitLab Runner).
  • SES: para permitir o envio de e-mail para os usuários, em caso de recuperação de conta ou notificação sobre atualizações dos estabelecimentos cadastrados.
  • 1 Instância EC2 (t2.small): 1 instância para hospedar a API Backend, o banco de dados PostgreSQL e o Runner do Gitlab, e o servidor nginx, containerizados.

No dia 27/03/2024, foi realizada uma estimativa dos custos para manter a infraestrutura do projeto por 1 semestre na AWS utilizando a calculadora da AWS, considerando os quatro serviços citados acima. Neste dia, o custo financeiro estimado a cada mês e ao final do semestre foram:

  • Custo Mensal: 12,99 USD
  • Custo Semestral: (12,99 USD * 6) = 77,94 USD
  • Custo Anual calculado pela AWS: 155,89 USD

Para este custo mensal, os detalhes de estimativa de cada serviço considerados foram:

  • Amazon EC2
    • Região: US East (Ohio)
    • Custo inicial: 0,00 USD
    • Custo mensal: 12,05 USD
    • Tipo de locação: Instâncias compartilhadas
    • Sistema operacional: Linux
    • Carga de trabalho: Uso constante
    • Quantidade de instâncias: 1
    • Tipo de instância: t2.small
  • Amazon Elastic Container Registry
    • Região: US East (Ohio)
    • Custo inicial: 0,00 USD
    • Custo mensal: 0,50 USD
    • Quantidade de dados armazenados: 5 GB por mês
  • Amazon Simple Email Service (SES)
    • Região: US East (Ohio)
    • Custo inicial: 0,00 USD
    • Custo mensal: 0,20 USD
    • Mensagens de e-mail enviadas do EC2: 1000 por mês
    • Mensagens de e-mail enviadas do cliente de e-mail: 1000 por mês
  • Amazon Simple Storage Service (S3)
    • Região: US East (Ohio)
    • Custo inicial: 0,01 USD
    • Custo mensal: 0,24 USD
    • Armazenamento S3 Standard: 10 GB por mês
    • Como os dados serão movidos para S3 Standard? Solicitações PUT, COPY, POST, LIST para S3 Standard
    • Número mensal de solicitações PUT, COPY, POST, LIST para S3 Standard: 1000
    • Número mensal de GET, SELECT e todas as outras solicitações do S3 Standard: 1000
    • Dados retornados pelo S3 Select: 3 GB por mês
    • Dados verificados pelo S3 Select: 3 GB por mês
    • Tamanho médio de objetos do S3 Standard: 5

Diagrama de deploy - versão 2

Durante a Sprint 4 do projeto, quando foi implementada a história de usuário US04 - Recuperar a Conta, a equipe encontrou algumas dificuldades em configurar o envio de e-mail utilizando o Amazon SES, dado que este por padrão iniciava no modo Sandbox. Diante disso, optamos por utilizar o serviço SMTP da ferramenta Mailtrap, que era de fácil configuração e possuia um limite de uso grátis que supriria adequadamente as necessidades da POC desenvolvida durante o semestre.

Diante disso, o diagrama de deploy foi ajustado para incluir o Mailtrap, conforme abaixo:

OBS.: Ressalta-se que no código implementado na API Backend do projeto as configurações de email estão parametrizáveis por variáveis de ambiente, não estando atrelado a nenhuma tecnologia específica. Diante disso, para passar a utilizar o SES ou outra tecnologia em um ambiente produtivo, é muito simples.

Ambientes utilizados

Durante a Sprint 2 (segunda Sprint de desenvolvimento de código no projeto) percebeu-se a necessidade de existir um ambiente de desenvolvimento para testar e validar as alterações sendo integradas no projeto, antes da entrega das mesmas no ambiente produtivo. Isso porque, durante esta Sprint, não era possível subir as alterações recém-feitas mas ainda não validadas no ambiente produtivo, pois este mesmo ambiente era utilizado pelos stakeholders ao acessar o aplicativo.

Assim, segmentou-se os containers executando na instância EC2 da AWS em dois ambientes distintos:

  • Ambiente produtivo: onde é executado o código validado e entregue aos stakeholders ao final da última Sprint.
  • Ambiente de staging: ambiente de desenvolvimento, o qual é atualizado a cada commit na branch develop durante um ciclo de desenvolvimento. É o ambiente a ser utilizado para testes anteriores ao code freeze durante a Sprint.

Para ersta segmentação, duplicou-se os containers do PostgreSQL e da API Backend do projeto e criou-se duas redes internas do Docker, como pode ser visto na imagem abaixo. As duas redes customizadas são compartilhadas com o container do nginx, enquanto o container do GitLab Runner fica em uma rede isolada.

Além disso, cada um dos ambientes poderia ser acessado a partir de URLs diferentes, configuradas por meio do Cloudflare:

  • Ambiente produtivo: https://sembarreiras.me/
  • Ambiente de staging: https://staging.sembarreiras.me/

Arquitetura geral da aplicação

Backend

Conforme descrito na página sobre o Backend do projeto, optou-se por uma abordagem de arquitetura em camadas no desenvolvimento da API Backend, cujas camadas podem ser vistas no diagrama abaixo:

Frontend

Conforme descrito na página sobre o Frontend do projeto, optou-se por trabalhar com o framework React Native que fornece suporte tanto para iOS quanto para Android tendo os seguintes elementos descritos na imagem abaixo que controlam o fluxo de informações que aparecem nas interfaces do aplicativo:

Com isso, como podemos ver temos as telas que são apresentadas ao usuário e os elementos dentro dessas telas seriam os componentes (botões, inputs, cards, etc), representados pelos component1, component2, component3 e component4 na imagem. A partir das telas, representadas por screen1 e screen2, o usuário interage com as funcionalidades do aplicativo, cuja navegação é definida pelo sistema de roteamento, representado pelo routing. Para conexão com o backend apresentada anteriormente no diagrama, utilizou-se o Axios que é um cliente HTTP baseado em promessas para Node javascript assim realizando o compartilhamento de informações com o banco de dados através do backend na AWS.

Clone repository

SemBarreiras-Logo__1_

Sem Barreiras

Home

Escopo

Processo

Design/Mockups

Configuração

Arquitetura

Gerência

Banco de Dados

Qualidade

Frontend

Backend