🏠 Home
Documentação de Negócio
Escopo | Processo | Gerência | Design |
---|
Documentação Técnica
Arquitetura | Banco de Dados | Analytics |
---|
Arquitetura do Sistema
Descrição
A arquitetura do nosso sistema consiste em uma API para comunicação entre o front-end desenvolvido com Flutter e o back-end desenvolvido com Java. Para o gerenciamento do banco de dados iremos utilizar MySQL, sendo executado em um container no Docker, uma instância EC2 da AWS usada para para hospedar e executar os diferentes componentes do sistema e S3 para armazenamento de imagens.
Sumário
Tecnologias
Front-end
O Flutter que é um framework de código aberto do Google para desenvolvimento multiplataforma de aplicativos nativos. Com Dart como linguagem principal, oferece desempenho de alta performance e Hot Reload para iteração rápida. Sua vasta biblioteca de widgets personalizáveis, comunidade ativa e suporte nativo a APIs proporcionam uma experiência de desenvolvimento eficiente e uma interface de usuário fluida em iOS, Android, web e desktop.
Back-end
Java é uma linguagem de programação de alto nível, orientada a objetos, desenvolvida pela Sun Microsystems (agora Oracle). Com uma sintaxe simples e robusta, amplamente utilizado em uma variedade de aplicações, desde desenvolvimento web até sistemas embarcados. Sua portabilidade é uma de suas características mais marcantes, permitindo que os programas escritos em Java sejam executados em diferentes plataformas sem a necessidade de recompilação. Além disso, a JVM (Java Virtual Machine) oferece segurança, gerenciamento de memória e tratamento de exceções.
Banco de dados
MySQL é um sistema de gerenciamento de banco de dados relacional, conhecido por sua confiabilidade e desempenho. Desenvolvido pela Oracle Corporation, é de código aberto e oferece recursos robustos de consulta e manipulação de dados usando SQL. Suporta transações ACID e oferece recursos avançados, como replicação e particionamento, para escalabilidade. É frequentemente usado em aplicações web e empresariais, devido à sua facilidade de integração e alta disponibilidade.
Outras tecnologias
No nosso projeto escolhemos utilizar o Vercel para ter um preview do projeto antes de realizar os merges request. A Vercel oferece uma funcionalidade de pré-visualização que permite aos desenvolvedores criar URLs temporárias para visualizar as alterações feitas em pull requests antes de mesclá-las no código principal. Essas pré-visualizações facilitam a revisão de alterações por parte de colegas de equipe ou clientes, garantindo que as mudanças sejam revisadas e aprovadas antes de serem implantadas na produção.
Diagramas
Diagrama de Deploy
Utilizamos a plataforma de computação em nuvem da Amazon, EC2, para alocar os runners do GitLab e manter a execução da pipeline do projeto. Além disso e armazenamos as imagens no Amazon S3. Abaixo, encontra-se o diagrama da infraestrutura utilizada.
AWS
A AWS (Amazon Web Services) é uma plataforma de serviços em nuvem oferecida pela Amazon. Ela fornece uma ampla gama de serviços de computação em nuvem, armazenamento, banco de dados, análise, inteligência artificial, Internet das Coisas (IoT), segurança e muito mais. A AWS é uma das principais provedoras de serviços em nuvem do mundo.
EC2
EC2 (Elastic Compute Cloud) é um dos serviços mais populares da AWS. Ele oferece capacidade de computação escalável na nuvem, permitindo que os usuários executem aplicativos em servidores virtuais (também conhecidos como instâncias) conforme necessário. Os usuários podem escolher entre uma variedade de tipos de instâncias, com diferentes configurações de CPU, memória, armazenamento e outros recursos, para atender às necessidades específicas de seus aplicativos.
S3
Como iremos salvar as imagens dos pontos turísticos, optamos por usar uma S3 (Simple Storage Service), um serviço de armazenamento em nuvem altamente escalável e durável da ASW. Ele permite que os usuários armazenem e recuperem quantidades massivas de dados de forma segura pela Internet. O S3 é frequentemente usado para armazenamento de backups, hospedagem de arquivos estáticos para sites, distribuição de conteúdo, armazenamento de dados para aplicativos da web e muito mais.