Pular para o conteúdo

apps/api/strangler-fig

116 · API & Integração · ≈ 6 min de estudo

Strangler Fig

Migração incremental de um sistema legado: um proxy fica na frente dele e, endpoint por endpoint, passa o tráfego para o sistema novo — primeiro em shadow mode, depois numa fração, por fim inteiro —, com volta atrás a qualquer momento. Use para tirar funcionalidades de um core legado ou monólito sem big bang.

passos
6
arquivos
5
testes
0
tecnologias
6
Infraestrutura realTypeScriptBunElysiaPostgreSQLMariaDBDocker
Baixar cartão

Cenário

O banco está tirando a consulta de saldo do core legado (MariaDB) para uma plataforma nova (PostgreSQL); as transferências continuam no legado por enquanto. Os dois sistemas convivem: o novo precisa enxergar cada transferência feita no legado, qualquer diferença tem de aparecer antes de um cliente ver, e se o novo falhar durante o canário o tráfego volta sozinho para o legado.

Planta

Fluxo
5/5
ClientesProxy stranglerrota por endpointCore legadoMariaDBCore novoPostgreSQLmigration_routesshadow_divergenceslegacy, shadow,percent, newshadow comparaem backgroundpercent sorteialeiturahash da contana escritabackfill em snapshotreplay detransferencias
5

5 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Novo substitui o legado aos poucos.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    migration_routes guarda o modo de cada endpoint (legacy, shadow, percent, new) e o percentual; todas as instâncias do proxy leem a mesma tabela

  2. 02

    SincronizaçãoBackfill das contas num snapshot consistente do MariaDB, depois replay das transferências do legado por id, cada uma aplicada uma única vez

  3. 03

    Shadow modeO legado responde; o novo é consultado em background e cada diferença vai para shadow_divergences

  4. 04

    CanárioLeitura sorteada por requisição; escrita roteada por hash da conta, para a mesma conta nunca se dividir entre os dois sistemas — em shadow, escrita nunca é duplicada

  5. 05

    Pausa automáticaCom pelo menos 10 chamadas no novo e taxa de erro acima de 1,5× a do legado, o proxy grava 0% na tabela; a leitura que falhou no novo é respondida pelo legado

  6. 06

    Em 100% o endpoint é do sistema novo; quando nenhum endpoint depender do legado, desliga-se o legado e, depois, o proxy

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Rollback por endpoint, a qualquer momento

  • Shadow mode valida sem afetar cliente

  • Sem janela de manutenção

  • Falha do novo volta sozinha para o legado

Custos

  • Proxy é mais um componente a operar

  • Sincronizar dois bancos cria janela de inconsistência

  • Dois sistemas rodando juntos custam o dobro

  • Mover escritas exige sincronização também do novo para o legado

apps/api/strangler-fig

5 arquivos

src/

  • proxy_strangler.tsProxy: rota por endpoint, shadow, canário com fallback, pausa automática e ajuste da rota
  • routing_strangler.tsDecisões puras: sorteio de leitura, hash de escrita e critério de pausa
  • sync_legacy.tsBackfill em snapshot e replay idempotente das transferências do legado

src/core_legacy.ts, src/

  • core_new.tsO core legado sobre MariaDB e o novo sobre PostgreSQL

sql/

  • Schema do legado e do novo, com as tabelas da migração

Executar · com Docker

  1. docker compose up -d --wait# sobe PostgreSQL · MariaDB
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
PostgreSQLMariaDB

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Strangler Fig Pattern?

Próximo projeto · API & IntegraçãoAdapter
Esc

↑ ↓ navegarEnter abrir191 resultados