Skip to content

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

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:

  1. Camada em lote

  2. 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.

  3. Essa camada será executada uma vez por dia para trazer os dados recebidos dos sensores durante o dia.

  4. Camada de stream

  5. 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.

  6. Camada de serviço

  7. 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.
  8. 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

  1. Coleta de Dados: Os sensores coletam dados de temperatura e CO2 e enviam via protocolo MQTT para o broker EMQX.
  2. Ingestão em Tempo Real: O EMQX encaminha os dados para o Apache Kafka, que ingere os dados para processamento em tempo real.
  3. 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.
  4. 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.
  5. Armazenamento de Dados: O MinIO armazena os dados processados em lote.
  6. Consulta e Análise em Lote: O Trino executa consultas SQL sobre os dados no MinIO para análises em lote.
  7. Monitoramento: O Prometheus coleta métricas dos componentes do sistema, que são visualizadas no Grafana.
  8. 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.