Arquitetura
Aqui apresentamos a arquitetura proposta para o sistema, que foi elaborada com base nos requisitos identificados e nas tecnologias escolhidas para a implementação. A arquitetura do sistema é composta por diversos componentes que interagem entre si para fornecer a funcionalidade desejada ao usuário. A seguir, apresentamos uma visão geral da arquitetura do sistema e dos componentes que a compõem.
Arquitetura do sistema
A arquitetura do sistema é composta por diversos componentes que interagem entre si para fornecer a funcionalidade desejada. A seguir, apresentamos uma visão geral da implementação inicial da arquitetura proposta para o sistema.
Implementação inicial do sistema
Para elaborar a primeira versão do sistema, foram identificados os requisitos funcionais e não funcionais da aplicação, para construir a arquitetura do sistema e definir as tecnologias que serão utilizadas.
-
Frontend: A aplicação mobile será desenvolvida utilizando o framework React Native, que permite a criação de aplicativos nativos para Android e iOS a partir de um único código fonte. O React Native é uma escolha adequada para o projeto, pois oferece uma experiência de usuário semelhante à de aplicativos nativos, além de facilitar a integração com APIs e serviços externos.
-
Backend: Optou-se pela utilização do ntex, framework para desenvolvimento de aplicações web e APIs em Rust O ntex foi escolhido por ser uma ferramenta robusta e eficiente, que oferece suporte para a criação de servidores web de alto desempenho. Além disso, o Rust é uma linguagem de programação segura e eficiente, que permite a criação de sistemas confiáveis e escaláveis. A modelagem dos dados será feita utilizando o Prisma, um ORM (Object-Relational Mapping) para que contém suporte para Rust
-
Banco de dados: O sistema utilizará o PostgreSQL como banco de dados relacional. O PostgreSQL é uma escolha adequada para o projeto, pois ofere uma ampla gama de recursos e funcionalidades, além de ser altamente confiável e escalável. Este estará hospedado no Amazon Relational Database Service (RDS), que é um serviço gerenciado de banco de dados relacional da Amazon Web Services (AWS). Será utilizado do redis para armazenamento de cache, que será hospedado no Amazon ElastiCache, que é um serviço de cache gerenciado da AWS. Também será utilizado o Amazon S3 para armazenamento de arquivos de vídeo e imagem. Além disso, os dados gerados serão disponibilizados no Metabase, uma ferramenta de análise de dados e geração de relatórios.
-
Pyxis: Pretendemos simular o dispensador automático de medicamentos utilizando um Raspberry Pi e um cofre modelado em MDF. Para fazer a conferência dos itens retirados, haverá a uma aplicação utilizando a biblioteca OpenCV para gravação e envio de vídeos para o servidor. O Pyxis terá uma interface gráfica feita em Gradio para facilitar a interação com o usuário, provida por um display touchscreen.
-
Processador de vídeos: Para treino, utilizaremos o Google Colab, que é um ambiente de desenvolvimento integrado baseado na nuvem, que permite a execução de códigos em Python e a utilização da biblioteca do Yolo Ultralytics para processamento de vídeos, e a ferramenta do Roboflow para adquirir os datasets. Agora para a implementação do modelo, utilizaremos o OpenCV para resgatar as imágens, e o próprio Yolo Ultralytics para processar os vídeos.
-
Teste de carga: Para testar a capacidade do sistema, utilizaremos o K6, que é uma ferramenta de teste de carga e desempenho de código aberto, que permite simular o comportamento de usuários em um sistema em produção. Será utilizado o Webpack para empacotar e transpilar o código para uso no K6. Também será utilizado o Grafana para visualização dos dados gerados pelos testes de carga.
-
Sistema de filas: Para a comunicação entre os serviços de processamento de vídeos e o backend, utilizaremos o Kafka, hospeado no Amazon Managed Streaming for Apache Kafka (MSK), que é um serviço gerenciado de streaming de dados da AWS que permite a criação de aplicações de streaming em tempo real de maneira escalável e segura.
-
Sistema de monitoramento: Para monitoramento dos sistema, iremos utilizar o Sentry, que é uma plataforma de monitoramento de aplicações que permite a identificação e correção de erros em tempo real, com integração ao Slack, para notificação de erros, e ao Github para integração com o repositório de código e criação de issues automaticamente a partir dos erros identificados.
Arquitetura de comunicação entre os componentes
Esta representação visualiza a comunicação entre os componentes do sistema, mostrando como eles interagem entre si para fornecer a funcionalidade desejada ao usuário, não exatamente está seguindo um fluxo com base nas interações do usuário, mas sim como os componentes se comunicam entre si de uma forma geral.