SpamGuard MLOps: Uma Arquitetura de Referência para Sistemas de Machine Learning

Em Machine Learning, o verdadeiro desafio começa onde o desenvolvimento do modelo termina. A transição de um artefato funcional para um serviço robusto e escalável em produção define a fronteira entre a prototipagem e a engenharia de software. Com este princípio em mente, estruturei o repositório SpamGuard MLOps.

Este projeto serve como uma arquitetura de referência, projetada para demonstrar os conceitos fundamentais de MLOps de forma pragmática. O seu propósito é ser um template didático e, ao mesmo tempo, uma base sólida para sistemas de produção, adotando uma estrutura orientada a serviços com fronteiras claras entre os componentes de treinamento, inferência e interface. Através dele, apresento uma abordagem técnica sobre como construir sistemas de ML que são não apenas eficazes, mas também sustentáveis e extensíveis.

Visão Geral e Proposta de Valor

O SpamGuard MLOps foi cuidadosamente estruturado com uma arquitetura orientada a serviços, com separações claras para permitir a evolução independente de seus componentes. O objetivo foi criar um template que fosse:

  • Rápido: Permitindo ir do dataset ao serviço de um modelo em minutos.
  • Claro: Com uma stack tecnológica simples para facilitar o onboarding e discussões técnicas.
  • Extensível: Facilitando a troca de banco de dados, modelos de machine learning e a adição de observabilidade sem a necessidade de grandes refatorações.
  • Portátil: Utilizando Bun para desenvolvimento nativo e pronto para Docker/Kubernetes.

Uma Olhada na Arquitetura

O coração do SpamGuard MLOps é composto por:

  • Backend (Inference): Construído com Bun, utilizando Elysia para a API, Drizzle ORM para interação com SQLite, e a biblioteca Natural para o modelo de classificação Naive Bayes. A escolha por Bun, com seu driver SQLite de alta performance, e a leveza do Elysia refletem minha busca por performance com baixo custo.
  • Frontend (Dashboard): Uma interface de usuário interativa desenvolvida com React e a biblioteca de componentes Mantine, utilizando Recharts para visualização de dados e Vite como build tool.
  • Training: Um job de treinamento implementado em JavaScript puro, utilizando a biblioteca Natural para treinar o modelo de classificação.
  • Artifacts: Um diretório centralizado para armazenar os artefatos do modelo (em formato JSON), promovendo a rastreabilidade e o versionamento.
  • Infra: Contém os Dockerfiles, a configuração do Docker Compose para execução local e manifestos Kubernetes (como placeholders conceituais para orquestração em escala).

A estrutura do repositório é organizada da seguinte forma:

artifacts/             # Artefatos centralizados do modelo (JSON)
data/raw/dataset.csv   # Dataset de exemplo (CSV)
dashboard/             # UI React + Mantine (demo/dashboard)
inference/             # API (Bun + Elysia) + Drizzle ORM + SQLite
training/              # Job de treinamento (Naive Bayes Natural)
infra/                 # Dockerfiles, Compose, Manifestos K8s, docs

CI/CD com GitHub Actions

A automação é um pilar fundamental do MLOps. Para demonstrar isso, configurei um pipeline de CI/CD com GitHub Actions (.github/workflows/ci-cd.yml) que realiza as seguintes etapas:

  1. Instalação das dependências.
  2. Geração e aplicação de migrações no banco de dados.
  3. Treinamento do modelo e, se apresentar melhor performance, promoção para produção, salvando o artefato em artifacts/.
  4. Build do dashboard e upload do artefato (a etapa de deploy é um placeholder, mas demonstra a intenção).

Containerização com Docker e Orquestração com Kubernetes

A portabilidade e a escalabilidade são cruciais em ambientes de produção. O SpamGuard MLOps inclui configurações para Docker Compose, permitindo o fácil levantamento dos serviços (API e dashboard) localmente com um único comando.

Além disso, a pasta infra/k8s/ contém manifestos Kubernetes como um ponto de partida conceitual para a orquestração em um ambiente mais robusto. Embora sejam placeholders, eles ilustram como os serviços poderiam ser implantados e gerenciados em escala.

Olhando para o Futuro

Este projeto é uma demonstração do meu conhecimento atual, mas a evolução é contínua. Em uma futura Brandcore (mais avançada), pretendo explorar:

  • A substituição do SQLite por um banco de dados mais robusto como o PostgreSQL.
  • A implementação de autenticação e rate limiting na API.
  • A adição de ferramentas de observabilidade para monitoramento e alertas.
  • A persistência de volumes em ambientes containerizados.

Conclusão

O repositório SpamGuard MLOps é mais do que um simples projeto; é uma vitrine do meu entendimento dos core concepts de MLOps, desde a concepção e desenvolvimento até a automação e a preparação para produção. Convido você a explorar o código, entender a arquitetura e ver como os conceitos se materializam na prática.

© 2025 Ciro Cesar Maciel – Todos os direitos reservados
Powered byBlog logoBlogs