Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Migração de Arquitetura

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for schons schons
May 30, 2026
10

Migração de Arquitetura

Uma visão prática sobre migração de arquitetura em ambientes reais. Da evolução de um monólito para microserviços até a consolidação em um monólito modular, explorando padrões de migração, métricas, trade-offs e os aprendizados obtidos ao longo do caminho.

Avatar for schons

schons

May 30, 2026

Transcript

  1. Luiz Schons Senior Software Engineer @ PicPay • Guarapuava -

    PR • 24 anos • UTFPR • Embaixador do DevParaná GitHub: @sschonss · LinkedIn: luizschons Migração de Arquitetura: A Volta 03 / 59
  2. Disclaimer • Isso aqui é opinião, não receita • Cada

    contexto é único: time, produto, budget • O objetivo é compartilhar aprendizados reais • Não existe bala de prata Migração de Arquitetura: A Volta 04 / 59
  3. O começo • Uma ideia, um dev, um framework, um

    servidor • Laravel + MySQL + Redis • Deploy por FTP (sim, FTP) • Primeiro cliente em 3 semanas • Funcionava. E era bonito de ver. Migração de Arquitetura: A Volta 06 / 59
  4. Crescimento • Time cresce: 5 devs, 80 tabelas • CI/CD

    substituiu o FTP. Deploy diário • Testes rodando em 4 minutos • Dev novo produtivo em 1 semana • Todo mundo entendia o sistema inteiro "O monolito não estava sofrendo. Ele estava voando." Migração de Arquitetura: A Volta 07 / 59
  5. Por que funcionava tão bem? • 1 repo, 1 deploy,

    1 banco = pouco overhead • Bug? Stack trace completo, sem rede no meio • Refatoração? IDE encontra tudo, renomeia tudo • Transações ACID de verdade • Simplicidade é uma virtude, não um defeito Migração de Arquitetura: A Volta 08 / 59
  6. As primeiras rachaduras O time cresceu. O sistema, nem tanto.

    • 10 devs, 120 tabelas, 200k pedidos/mês • Deploy de sexta? Fim de semana perdido • CI que era orgulho agora leva 40 minutos • Dev novo demora 3 semanas pra ser produtivo • Ninguém entende o sistema inteiro mais Migração de Arquitetura: A Volta 10 / 59
  7. Blast radius de um monolito acoplado Um bug em um

    modulo derruba todos os outros Migração de Arquitetura: A Volta 12 / 59
  8. O dia a dia ficou pesado • Conflitos de merge:

    10 devs no mesmo repo • Times pisando um no pé do outro • Qualquer mudança podia quebrar outra parte • Black Friday: escalar checkout = escalar tudo • Produto frustrado: 'por que demora tanto?' Migração de Arquitetura: A Volta 13 / 59
  9. Antes: o checklist que não fizemos • Temos testes automatizados?

    • Sabemos quais são nossos domínios? • Temos observabilidade? • Já tentamos resolver internamente? • O time sabe operar sistemas distribuídos? "Se falta algum item, pare. Resolva primeiro." Migração de Arquitetura: A Volta 15 / 59
  10. Gestão: Antes de migrar • Defina onde quer chegar: métricas

    de sucesso • Deploy frequency, lead time, MTTR, custo • Crie um plano de fallback: como voltar? • Saiba quando NÃO fazer • Se não sabe medir, não sabe se melhorou "Migrar sem definir sucesso é turismo arquitetural." Migração de Arquitetura: A Volta 16 / 59
  11. A decisão • Conferências dizendo que monolito = legado •

    Cases de Netflix, Uber, Spotify • Time hypado com tecnologia nova • CTO convencido pelo mercado • Plano: migrar para 12 microserviços Migração de Arquitetura: A Volta 18 / 59
  12. O plano: 12 microserviços 12 servicos, 12 repos, 12 pipelines,

    12 deploys Migração de Arquitetura: A Volta 19 / 59
  13. Padrão 1: Strangler Pattern A planta que envolve a árvore

    • Metáfora biológica de Martin Fowler • Uma planta cresce ao redor da árvore • Se alimenta dela até substituí-la • A árvore original nunca é derrubada • O sistema novo envolve o legado gradualmente Migração de Arquitetura: A Volta 21 / 59
  14. Strangler Fig: Fase 1 - Proxy Nada muda pro usuario.

    Apenas ganhamos controle do roteamento. Migração de Arquitetura: A Volta 22 / 59
  15. Strangler Fig: Fase 2 - Coexistência Canary deployment: trafego gradual,

    rollback instantaneo Migração de Arquitetura: A Volta 23 / 59
  16. Strangler Fig: Fase 3 - Migrado Rota desligada no monolito.

    Codigo legado removido semanas depois. Migração de Arquitetura: A Volta 24 / 59
  17. Strangler: Na prática • O proxy pode ser Nginx, Kong,

    ou um middleware • Feature flags controlam % do tráfego • Fallback pro monolito se o serviço novo falhar • Monitorar: latência, erros, throughput • Só remove código legado depois de validado Migração de Arquitetura: A Volta 25 / 59
  18. Padrão 2: Branch by Abstraction Trocar o motor com o

    carro andando • Duas implementações coexistem no mesmo codebase • Uma interface define o contrato • Feature flag decide qual implementação roda • Rollback instantâneo: desliga a flag • Controller não muda nada Migração de Arquitetura: A Volta 27 / 59
  19. Branch by Abstraction: Passo 1 - Interface Todos os controllers

    passam a depender da interface, nao da implementacao Migração de Arquitetura: A Volta 28 / 59
  20. Branch by Abstraction: Passo 2 - Nova implementação Feature flag

    roteia entre implementacoes. Rollback = desligar a flag. Migração de Arquitetura: A Volta 29 / 59
  21. Branch by Abstraction: O código interface CatalogServiceInterface { public function

    findProduct(int $id): ProductDTO; public function search(string $query): Collection; } // Service Provider decide qual injetar if (Feature::active('new-catalog')) { $app->bind( CatalogServiceInterface::class, NewCatalogService::class ); } else { $app->bind( CatalogServiceInterface::class, LegacyCatalogService::class ); }
  22. Padrão 3: Anti-Corruption Layer Um tradutor entre dois mundos •

    Serviço novo precisa falar com o legado • Importar models do legado = acoplamento direto • ACL: camada de tradução entre domínios • Serviço novo nunca enxerga o modelo antigo • Mudou o legado? Só a ACL precisa mudar Migração de Arquitetura: A Volta 32 / 59
  23. Sem ACL: acoplamento direto Servico novo depende da estrutura interna

    do legado Migração de Arquitetura: A Volta 33 / 59
  24. Com ACL: domínios protegidos Monolito mudou? So a ACL precisa

    ser atualizada. Migração de Arquitetura: A Volta 34 / 59
  25. Anti-Corruption Layer: O código class OrderACL { public function __construct(

    private MonolithApiClient $api ) {} public function getOrder(int $id): PaymentOrderDTO { // Busca no formato do legado $legacy = $this->api->get("/orders/{$id}"); // Traduz pro dominio de pagamento return new PaymentOrderDTO( orderId: $legacy['id'], amount: $legacy['total_price'] / 100, currency: 'BRL', items: count($legacy['line_items']), ); } }
  26. Resumo: quando usar cada padrão Nao existe padrao melhor. Existe

    o certo pro momento. Migração de Arquitetura: A Volta 36 / 59
  27. Gestão: Durante a migração • Métrica de sucesso definida antes

    de cada módulo • Plano de fallback: feature flag pra voltar • Um módulo por vez: resista à pressão • Dual-running por algumas semanas antes de desligar Exemplo: ”Sucesso = deploy >= 3x/semana + latência p99 <= 200ms" Migração de Arquitetura: A Volta 37 / 59
  28. O que ganharam vs o que perderam Ganhos • Deploys

    independentes • Escala seletiva por serviço • Liberdade tecnológica • Ownership claro por time Perdas • Complexidade operacional • 8 devs / 12 serviços + infra • Debugging distribuído • Custos de infra 4x maiores VS Migração de Arquitetura: A Volta 39 / 59
  29. O custo real de cada microserviço Multiplica por 12. Esse

    e o novo baseline operacional. Migração de Arquitetura: A Volta 40 / 59
  30. A percepção incômoda • Carrinho e Checkout eram o mesmo

    contexto • Relatórios e Admin: 2 req/min • Busca: poderia ser Elasticsearch no monolito • Estoque e Catálogo: acoplados demais • 12 serviços pra ~4 contextos reais Migração de Arquitetura: A Volta 41 / 59
  31. Hora de medir Deploy freq. 1x/sem 4x/dia Custo infra R$

    3k R$ 12k Incidentes/mês 2 5 Satisfação time 7/10 5/10 Medir é o que permite tomar decisões com dados, não com hype. 42 / 59
  32. O momento da virada • Incidente em produção + retrospectiva

    • Mais tempo mantendo infra do que entregando • A complexidade está matando a velocidade • A pergunta mudou... Migração de Arquitetura: A Volta 44 / 59 O time esta servindo a arquitetura e não a arquitetura o time
  33. Revisitando os domínios • Brain Storming com todo o time

    • Mapearam os domínios reais do negócio • Carrinho + Checkout = mesmo contexto: Vendas • Os 12 serviços não respeitavam as fronteiras • Resultado: 12 serviços pra ~4 contextos reais Migração de Arquitetura: A Volta 46 / 59
  34. Mapa de contextos real 4 contextos reais. 12 servicos eram

    demais. Migração de Arquitetura: A Volta 47 / 59
  35. Critérios para voltar Só mantém separado se tem os 3:

    • 1. Time dedicado: alguém é dono disso? • 2. Domínio próprio: a linguagem é diferente? • 3. Deploy independente com motivo real? • Falta 1? Candidato a voltar. Migração de Arquitetura: A Volta 48 / 59
  36. Estratégia 1: Reabsorver como módulo • Serviço volta pro monolito

    como módulo isolado • Carrinho + Checkout = módulo Vendas • Relatórios + Admin = módulo Backoffice • Busca = módulo Catálogo + Elasticsearch • Boundaries claras, testes isolados, eventos internos Migração de Arquitetura: A Volta 49 / 59
  37. Monolito modular: o resultado Modulos isolados, deploy unico, comunicacao via

    eventos Migração de Arquitetura: A Volta 50 / 59
  38. Estratégia 2: Transformar em library • O serviço tem lógica

    boa mas pouco tráfego • Cálculo de frete: regras complexas, 10 req/min • Extraíram o core como Composer package • Importaram como dependência no monolito • Mesma lógica, sem overhead de serviço Migração de Arquitetura: A Volta 51 / 59
  39. De microserviço a library Mesma logica, sem deploy separado, sem

    infra extra Migração de Arquitetura: A Volta 52 / 59
  40. Estratégia 3: Manter separado Quando os 3 critérios são atendidos

    • Pagamento: PCI compliance, time dedicado • Notificações: assíncrono, escala independente • API Gateway: rate limiting, autenticação • Frete (cotação): APIs externas, latência variável Migração de Arquitetura: A Volta 53 / 59
  41. Gestão: Na volta também • Métricas de sucesso: custo, incidentes,

    satisfação • Fallback: se falhar, serviços continuam separados • Consolidar não é 'voltar atrás', é evoluir • O time voltou a entregar features Migração de Arquitetura: A Volta 55 / 59
  42. Para levar pra casa 1 Monolito bem feito > microserviços

    mal feitos 2 Defina métricas de sucesso antes de migrar 3 Tenha sempre um plano de fallback 4 Migre um contexto por vez 5 Mudar de opnião não é fracasso, é maturidade 6 A melhor arquitetura é a que seu time aguenta Migração de Arquitetura: A Volta 57 / 59