GUIA · ARQUITETURA
Arquitetura de software: o guia
Decisões de arquitetura que tomei (e refiz) construindo produtos: quando um monólito modular basta, como isolar integrações, como desenhar processamento assíncrono e quando vale a pena separar serviços.
- Anti-corruption layer no Laravel: como integrar vários gateways de pagamento sem acoplar o domínio Status, valores, erros e webhooks de Pagar.me, Stripe e Asaas traduzidos para a língua do seu negócio: interface, adapters, enum próprio e testes de contrato no Laravel.
- Inbox de webhooks no Laravel: como deduplicar eventos e tratar entrega fora de ordem Gateways reenviam webhooks e não garantem ordem. Veja como montar uma tabela inbox no Laravel com PostgreSQL para deduplicar, serializar e reprocessar eventos com segurança.
- Trilha de auditoria imutável no Laravel com PostgreSQL: triggers, contexto do usuário e selo diário Como registrar quem mudou o quê em uma fintech com triggers no PostgreSQL, contexto do usuário via set_config e um selo diário que denuncia adulteração.
- Réplica de leitura no PostgreSQL com Laravel: como lidar com o replication lag Separar leitura e escrita no Laravel alivia o banco principal, mas cria leituras desatualizadas. Veja como decidir o que lê da réplica, garantir read-your-writes e vigiar o lag.
- Bulkhead de filas no Laravel Horizon: como impedir que um job lento atrase os webhooks Separar filas por tipo de carga, com supervisors, timeouts e conexões próprias no Horizon, impede que um lote de conciliação ou um provedor lento trave o processamento de pagamentos.
- Particionamento no PostgreSQL com Laravel: como manter a tabela de transações rápida Particionar a tabela de transações por mês no PostgreSQL, criar partições pelo Laravel e lidar com chave primária, unicidade e retenção sem DELETE.
- Multi-tenancy no Laravel com PostgreSQL Row-Level Security: como isolar os dados de cada cliente Global scope sozinho não impede vazamento entre tenants. Veja como combinar Eloquent com Row-Level Security do PostgreSQL, filas, Octane e PgBouncer sem furos.
- Saga com compensação no Laravel: como desfazer uma transferência Pix que falhou no meio Como orquestrar reserva de saldo, envio ao provedor e liquidação de um Pix de saída no Laravel, com compensações idempotentes e sem tratar timeout como falha.
- Circuit breaker no Laravel com Redis: como isolar um gateway de pagamento fora do ar Quando o provedor de pagamento degrada, retry e timeout não bastam. Como montar um circuit breaker com Redis no Laravel, isolar filas no Horizon e decidir o que fazer com o circuito aberto.
- Transactional outbox no Laravel: como publicar eventos sem perder nenhum quando a fila cai Gravar no banco e publicar na fila são duas escritas que podem falhar separadas. O padrão transactional outbox resolve isso no Laravel com PostgreSQL e SKIP LOCKED.
- Máquina de estados para status de pagamento no Laravel: como impedir transições inválidas Como modelar o status de um pagamento como máquina de estados no Laravel, com enum, transições explícitas, lock, histórico e mapeamento dos status de cada provedor.
- Ledger de partidas dobradas no Laravel e PostgreSQL: como modelar o saldo de uma conta digital Por que um campo saldo não aguarda uma fintech e como modelar contas, transações e lançamentos imutáveis que sempre fecham em zero, com Laravel e PostgreSQL.
- Como integrar vários gateways de pagamento no Laravel sem amarrar o domínio a um provedor Contrato próprio, DTOs, status normalizados e o provedor gravado em cada cobrança: como trocar ou somar Pagar.me, Asaas e Stripe sem reescrever o domínio.