Executando verificação de segurança...
10

Do Monólito ao Modular: Como Migramos o RecomendeMe em Produção

Depois de cinco anos rodando em produção, concluímos uma das etapas mais importantes da história do RecomendeMe: reescrevemos e reestruturamos quase tudo. Essa refatoração não foi só uma troca de framework ou uma limpeza pontual; foi uma transformação estrutural que impactou cerca de 70% da nossa base de código original incluindo todos os componentes críticos.

Duas arquiteturas, um propósito

O desenvolvimento hoje acontece em duas frentes complementares: Arquitetura Experimental e Arquitetura Principal.

Arquitetura Experimental

Criamos um ambiente sandbox dedicado para pesquisa e prototipagem. Nele, a equipe tem liberdade para explorar frameworks, linguagens e padrões de projeto que possam trazer ganho real para a operação. Foi assim que testamos, por exemplo:

  • React e Angular para interfaces mais leves e modulares

  • Ruby on Rails, em 2022, para um piloto de recomendações de álbuns rodado com um grupo restrito de usuários

  • Hipóteses de performance, escalabilidade e segurança, validadas com testes unitários, stress testing e simulações de rede

Esse ambiente virou um laboratório que nos ajudou a errar rápido e aprender mais rápido ainda, sem arriscar a produção.

Arquitetura Principal

Enquanto isso, o núcleo do RecomendeMe continua rodando sobre uma stack PHP/MySQL robusta o bastante para sustentar a operação diária. É aqui que vivem:

  • As APIs oficiais, que conectam serviços, front-end e integrações de parceiros

  • O banco de dados principal

  • Toda a infraestrutura que garante estabilidade em produção

Essa separação entre o que é laboratório e o que é core garantiu que a evolução fosse possível sem comprometer o que já estava validado.

Por que reescrever tudo?

O RecomendeMe começou como um projeto acadêmico. Era para ser um experimento, e funcionou assim por muito tempo. Mas, com o crescimento orgânico, veio o acúmulo de débito técnico: um monólito com mais de 8 mil linhas de código, cheio de implementações improvisadas, alto acoplamento e falhas de segurança que exigiam atenção constante.

Cada nova funcionalidade era um risco: mexer em uma ponta podia derrubar tudo. A manutenção virava sempre um retrabalho. Chegou o ponto em que reescrever era menos custoso do que seguir tapando buracos.

Como fizemos

A migração foi planejada para preservar o que realmente importa: os dados. O RecomendeMe não é definido por um framework ou uma linguagem, mas pela forma como captura, organiza e entrega informações relevantes para quem usa.

  • Mantivemos APIs do núcleo original, para garantir continuidade dos serviços.

  • Refatoramos o frontend inteiro para React, criando uma base de componentes minimalista, fácil de escalar.

  • Usamos GPT-3.5 para identificar e eliminar código obsoleto, e o GitHub Copilot ajudou a reforçar práticas de segurança.

  • A migração foi incremental, para não comprometer operações já em produção.

  • Além disso, estruturamos test suites modulares. Cada parte da aplicação agora é testada isoladamente, o que reduziu bugs em cascata e deixou o ciclo de deploy muito mais previsível.

Resultados práticos

A mudança já trouxe ganhos claros:

  • A performance geral subiu de forma exponencial.

  • A manutenção deixou de ser uma dor de cabeça e virou rotina saudável.

  • Vulnerabilidades críticas foram eliminadas.

  • O SEO melhorou — agora entregamos páginas mais leves e rápidas.

  • A estrutura orientada a serviços trouxe flexibilidade para o time e escalabilidade horizontal para a infraestrutura.

O backend ainda roda em PHP puro, mas o monólito foi quebrado em serviços menores, desacoplados, que podem evoluir em ritmos diferentes. Isso permite deploys independentes e um ciclo de entrega mais ágil.

Como ficamos hoje

  • Backend: PHP (APIs e serviços core)

  • Frontend: React (reescrito do zero)

  • Arquitetura: orientada a serviços, desacoplada e escalável

  • Testing: suites unitárias por módulo

  • Infraestrutura: distribuída e preparada para crescer

O que isso representa

No fim, não foi só uma mudança de stack ou de arquitetura. Foi um passo para transformar o RecomendeMe de um projeto experimental em uma plataforma que aguenta crescer de forma sustentável.

A divisão clara entre experimentação e produção nos dá liberdade para continuar testando o que fizer sentido — sem colocar o core em risco. E a nova estrutura garante que cada avanço venha de forma mais controlada, segura e fácil de manter.

Essa migração não é o fim do trabalho. é o começo de uma fase nova.

Arquitetura Experimental: Estratégia de Validação Tecnológica

Design Philosophy

Nossa abordagem experimental seguiu o princípio de technology-agnostic validation, garantindo que a lógica de negócio não ficasse acoplada a tecnologias específicas. Implementamos múltiplos MVPs paralelos para validar diferentes aspectos da plataforma.

Módulos Experimentais

1. RecomendeMe Mobile Interface (React Native)

// Stack: React Native 0.72+, TypeScript, Expo
// Objetivo: Validar UX mobile e engagement patterns
  • Arquitetura: Component-based com Context API
  • State Management: Redux Toolkit + RTK Query
  • Navigation: React Navigation 6
  • Testing: Jest + React Native Testing Library

2. RecomendeMe ACDC Microservice (Flask)

# Stack: Flask 2.3+, SQLAlchemy, MySQL
# Objetivo: Algoritmos de Content Discovery e Classificação
  • Design Pattern: Repository + Service Layer
  • Database: MySQL com connection pooling
  • API: RESTful com OpenAPI 3.0 documentation
  • Caching: Redis com TTL configurável
  • Monitoring: Prometheus metrics + Grafana dashboards

3. RecomendeMe API (Node.js)

// Stack: Node.js 18+, Express.js, TypeScript, MySQL
// Objetivo: Performance comparison e ecosystem validation
  • Architecture: Layered (Controller → Service → Repository)
  • ORM: Sequelize com migrations automatizadas
  • Validation: Joi schemas com custom validators
  • Authentication: JWT com refresh token rotation
  • Rate Limiting: Redis-based sliding window

4. RecomendeMe Data Layer (MySQL/SQLite)

-- Objetivo: Schema optimization e query performance testing
-- Databases: MySQL 8.0 (prod), SQLite 3.39+ (dev/testing)
  • Indexing Strategy: Composite indexes para queries complexas
  • Partitioning: Por timestamp para tabelas de logs
  • Backup Strategy: Point-in-time recovery com binlogs
  • Monitoring: Slow query log + Performance Schema

5. RecomendeMe Monolith Backend (Ruby on Rails)

# Stack: Rails 7.0+, SQLite3, ActiveRecord
# Objetivo: Rapid prototyping e developer experience validation
  • Conventions: Rails conventions para desenvolvimento ágil
  • Testing: RSpec + FactoryBot + Capybara
  • Background Jobs: Sidekiq com Redis
  • Deployment: Docker containers com CI/CD pipeline

Estratégia de Testing em Produção

A/B Testing Infrastructure

# Configuração de feature flags
experimental_modules:
  mobile_interface:
    enabled: true
    traffic_percentage: 15
    target_segments: ["mobile_users", "early_adopters"]
  
  acdc_service:
    enabled: true
    traffic_percentage: 25
    target_segments: ["album_community"]

Tunneling com Ngrok

Para testes em ambiente real, implementamos:

# Configuração de tunneling para testes distribuídos
ngrok http 3000 --subdomain=recomendeme-exp
ngrok http 5000 --subdomain=recomendeme-acdc

Metrics e Observabilidade

Performance Benchmarks

PHP Monolith:
- Response Time: 150ms (p95)
- Throughput: 1000 req/s
- Memory Usage: 128MB baseline

Node.js API:
- Response Time: 95ms (p95)
- Throughput: 1500 req/s
- Memory Usage: 85MB baseline

Flask ACDC:
- Response Time: 200ms (p95) [ML processing]
- Throughput: 800 req/s
- Memory Usage: 256MB baseline
Carregando publicação patrocinada...