Arquitetura de Software
Histórico de Versões
Data | Responsável(eis) | Descrição | Versão |
---|---|---|---|
28/04/2024 | Matheus Costa | Descrição das tecnologias utilizadas | 0.1 |
01/05/2024 | Felipe Andrade | Modificações/Adições no documento | 0.2 |
04/05/2024 | Paulo Gonçalves | Revisão, troca para arquitetura lambda | 0.3 |
04/05/2024 | Rafael | Correção com base na norma ABNT | 0.4 |
11/07/2024 | Paulo Gonçalves | Atualiza a arquitetura | 1.0 |
Arquitetura
Figura 1: Arquitetura de Dados
Fonte: Autor
Tecnologias utilizadas
Neste tópico estão descritas as tecnologias utilizadas, juntamente com uma breve explicação de como elas serão aplicadas neste projeto.
EMQX
O EMQX é uma plataforma de mensagens e IoT (Internet das Coisas) de código aberto que oferece uma solução altamente escalável e flexível para conectividade de dispositivos. Ele possui suporte a diversos protocolos de comunicação, dentre eles o MQTT (Zaiming, 2024).
O MQTT (Message Queuing Telemetry Transport) é um protocolo de mensagens leve e eficiente projetado para dispositivos de rede com largura de banda limitada e recursos computacionais restritos, como dispositivos IoT. Ele funciona com um modelo de publicação/assinatura, onde os dispositivos publicam mensagens em tópicos e outros dispositivos podem se inscrever para receber essas mensagens (Time EMQX, 2024).
Essa tecnologia se aplica ao nosso projeto de forma que a plataforma, por meio do protocolo, envia mensagens (sinais) simulando o funcionamento dos sensores da haste, que serão recepcionados pelo Kafka.
Apache Kafka
Segundo a RedHat (2022), o Apache Kafka é uma plataforma de streaming distribuída, que se destaca pela sua capacidade de lidar com grandes volumes de dados em tempo real de forma eficiente e escalável. Ele funciona como um sistema de mensagens de alto desempenho, permitindo a ingestão, armazenamento e processamento de fluxos de dados em tempo real.
É possível conectar o MQTT ao Kafka para que ele receba mensagens de tópicos MQTT e as ingira diretamente nos tópicos do Kafka, integrando assim os dados provenientes de dispositivos IoT ao pipeline de streaming do Kafka.
MinIO
O MinIO é um sistema de armazenamento de objetos de código aberto altamente escalável e distribuído. Ele é compatível com o protocolo Amazon S3, o que o torna uma escolha popular para armazenamento de dados em ambientes de nuvem e on-premise. O MinIO é projetado para ser simples de implantar e gerenciar, oferecendo alta disponibilidade, durabilidade e desempenho para aplicações que requerem armazenamento de objetos (MinIO, 2024).
Uma vez que os dados estão no Kafka, pode-se utilizar o MinIO para armazenar esses dados. O Apache Kafka pode ser configurado para se integrar ao MinIO usando o Kafka Connect MinIO Sink, que permite que os dados do Kafka sejam escritos diretamente no MinIO.
Apache Airflow
O Apache Airflow é uma plataforma de orquestração de fluxo de trabalho de código aberto, projetada para automatizar tarefas e processos complexos de dados. Ele permite que os usuários definam, agendem e monitorem fluxos de trabalho (também conhecidos como DAGs) de maneira programática e eficiente (Apache Airflow, 2024).
Ao combinar o Apache Airflow com o MinIO, os dados podem ser facilmente armazenados e acessados em um ambiente distribuído. O Apache Airflow pode ser configurado para interagir com o MinIO usando operadores específicos, permitindo que os usuários executem tarefas de ingestão, transformação e persistência de dados de forma flexível e eficiente.
Prometheus
O Prometheus é um sistema de monitoramento e alerta de código aberto, otimizado para séries temporais. Ele coleta métricas de sistemas e serviços, armazena-as e permite a consulta e visualização dessas métricas (Prometheus, 2024).
No contexto do nosso projeto, o Prometheus será utilizado para monitorar o desempenho dos diversos componentes do sistema, coletando métricas em tempo real que serão visualizadas através do Grafana.
Grafana
Grafana é uma plataforma de visualização e monitoramento de código aberto que exibe métricas coletadas pelo Prometheus em dashboards interativos e personalizáveis (Grafana, 2024).
Será utilizado para criar painéis de controle que fornecem insights visuais das métricas coletadas pelo Prometheus, permitindo monitorar a saúde e o desempenho do sistema.
Trino
Trino (anteriormente conhecido como Presto) é um motor SQL distribuído para análise rápida e interativa de dados. Ele pode ser usado para executar consultas analíticas sobre dados em tempo real e dados armazenados em diversos sistemas de armazenamento (Trino, 2024), como por exemplo o MinIO.
No nosso projeto, o Trino será utilizado tanto na camada de stream quanto na camada de lote para executar consultas rápidas e interativas sobre os dados provenientes dos sensores e armazenados no MinIO.
Metabase
Metabase é uma ferramenta de business intelligence de código aberto pode conectar-se a muitos bancos de dados utilizados no mercado, como o Trino. Essa ferramenta permite que se faça perguntas sobre os dados armazenados e exiba as respostas em formatos que façam sentido, seja um gráfico de barras, uma tabela detalhada ou um dashboard (Metabase, 2024).
Essa tecnologia será configurada para se conectar ao Trino e criar visualizações de dados facilmente compreensíveis e interativas. Com o Metabase, os usuários podem explorar os dados, criar painéis de controle personalizados, executar consultas ad-hoc e compartilhar insights.
Arquitetura Lambda
Segundo a Databricks (2024), a arquitetura Lambda é um modelo de processamento de dados utilizado para lidar com grandes volumes de informações, também conhecido como "Big Data". Essa abordagem oferece acesso tanto a métodos de processamento em lotes quanto em tempo real, combinando-os para resolver desafios de processamento de funções diversas.
Dividida em três camadas distintas, a arquitetura Lambda permite uma abordagem abrangente:
-
Camada em lote
-
Esta camada recebe continuamente novos dados, que são processados em lotes. Aqui, vai ocorrer a análise integral dos dados, eventualmente corrigindo inconsistências. Por meio de processos ETL (Extração, Transformação e Carregamento) e a utilização de um data warehouse.
-
Essa camada será executada uma vez por dia para trazer os dados recebidos dos sensores durante o dia.
-
Camada de stream
-
Esta camada lida com os dados mais recentes que ainda não foram processados nas visualizações em lote, garantindo uma visão completa e em tempo real dos dados para o usuário ou o sistema.
-
Camada de serviço
- Os resultados processados nas camadas anteriores ficam disponíveis para esta camada, onde são indexados para consulta em baixa latência de forma ad-hoc.
- Aqui, ocorre a disponibilização das visualizações em batch.
Integração das Tecnologias na Arquitetura
Neste tópico, será descrito como as tecnologias são integradas e utilizadas na arquitetura, de acordo com a figura fornecida.
1. Camada dos Sensores
- Sensores de Temperatura e CO2: Coletam dados de temperatura e níveis de CO2.
- MQTT: Utiliza o protocolo MQTT para enviar os dados dos sensores para o broker EMQX.
2. Camada de Stream
- EMQX: Recebe dados via MQTT dos sensores e os encaminha para o Apache Kafka.
- Apache Kafka: Ingesta os dados dos sensores recebidos do EMQX. Os dados são processados em tempo real e disponibilizados para análise.
- Trino: Realiza consultas SQL em tempo real sobre os dados ingeridos pelo Kafka.
3. Camada de Lote
- Apache Airflow: Orquestra pipelines de dados que processam os dados em lote. Tarefas incluem a ingestão dos dados do Kafka e armazenamento no MinIO.
- MinIO: Armazena os dados processados em lote pelo Apache Airflow.
- Trino: Executa consultas SQL sobre os dados armazenados no MinIO para análise em lote.
4. Camada de Monitoramento
- Prometheus: Monitora e coleta métricas dos diversos componentes do sistema.
- Grafana: Exibe as métricas coletadas pelo Prometheus em dashboards interativos, permitindo monitorar a saúde e desempenho do sistema.
5. Camada de Serviço
- Metabase: Conecta-se ao Trino para fornecer visualizações de dados e dashboards interativos. Permite que os usuários façam consultas ad-hoc sobre os dados em tempo real e em lote.
- PostgreSQL: Armazena dados processados e metadados relacionados aos fluxos de trabalho gerenciados pelo Apache Airflow. Atua como repositório central de informações críticas do projeto.
Fluxo de Dados na Arquitetura
- Coleta de Dados: Os sensores coletam dados de temperatura e CO2 e enviam via protocolo MQTT para o broker EMQX.
- Ingestão em Tempo Real: O EMQX encaminha os dados para o Apache Kafka, que ingere os dados para processamento em tempo real.
- Consulta e Análise em Tempo Real: O Trino realiza consultas em tempo real sobre os dados no Kafka para análises rápidas e interativas.
- Processamento em Lote: O Apache Airflow orquestra a ingestão dos dados do Kafka para o MinIO, onde são armazenados para processamento em lote.
- Armazenamento de Dados: O MinIO armazena os dados processados em lote.
- Consulta e Análise em Lote: O Trino executa consultas SQL sobre os dados no MinIO para análises em lote.
- Monitoramento: O Prometheus coleta métricas dos componentes do sistema, que são visualizadas no Grafana.
- Visualização e BI: O Metabase se conecta ao Trino para criar visualizações de dados e dashboards interativos, permitindo a exploração e análise dos dados.
Essa integração permite uma arquitetura robusta e escalável, capaz de lidar com grandes volumes de dados em tempo real e em lote, garantindo análises eficientes e insights valiosos para os usuários.