O que são e o que não são
Design pattern de integração é uma solução reutilizável para um problema de comunicação entre sistemas separados: aplicações diferentes, com redes, falhas, formatos e tempos de resposta próprios. Não confunda com duas outras famílias:
- Patterns GoF (Gamma, Helm, Johnson, Vlissides, 1994, 23 patterns): organizam classes e objetos dentro de um mesmo processo. Exemplos: Strategy, Factory, Decorator. O Observer lembra o Publish-Subscribe, mas opera em memória, numa mesma aplicação, sem rede, sem persistência e sem falha parcial.
- Patterns web (como os de apresentação em Patterns of Enterprise Application Architecture, Fowler, 2002): estruturam a camada que atende requisições HTTP de uma aplicação. Exemplos: MVC, Front Controller, Page Controller, Template View.
- Patterns de integração: tratam do que acontece entre aplicações. Como entregar uma mensagem sem perdê-la, como rotear, como evitar que a falha de um serviço derrube os outros, como manter consistência sem transação distribuída.
Resumindo pela escala: GoF vive no código, web vive na requisição, integração vive entre sistemas.
Referências principais
- Hohpe, G.; Woolf, B. Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions. Addison-Wesley, 2003. Catálogo de 65 patterns, centrado em mensageria e independente de tecnologia.
- Richardson, C. Microservices Patterns. Manning, 2018. Patterns de arquitetura de microsserviços, incluindo dados distribuídos e resiliência. A lista abaixo vem da pattern language do microservices.io (53 patterns), que continua evoluindo e pode ter itens posteriores ao livro de 2018.
Quatro patterns que costumam aparecer em entrevistas
Publish-Subscribe Channel
(Hohpe e Woolf, Enterprise Integration Patterns)
O produtor publica um evento e todos os assinantes recebem uma cópia, sem que ele saiba quem são. O serviço de pedidos publica PedidoCriado, e estoque, faturamento e notificações reagem de forma independente.
Perguntas típicas: diferença para Point-to-Point, o que acontece com assinante offline (Durable Subscriber) e como lidar com duplicatas.
Circuit Breaker
(Richardson, Microservices Patterns)
Um proxy conta as falhas de um serviço remoto. Passando de um limite, o circuito abre e as chamadas falham na hora, em vez de esgotar threads em timeouts. Após um tempo, ele deixa passar chamadas de teste (meio aberto) e fecha se elas funcionarem. Isso evita falha em cascata.
Perguntas típicas: os três estados, a diferença para retry e timeout, e qual fallback usar.
Saga
(Richardson, Microservices Patterns)
Troca a transação distribuída por uma sequência de transações locais, com transações compensatórias quando um passo falha. Criar pedido → reservar estoque → cobrar; se a cobrança falha, libera-se o estoque e cancela-se o pedido. Pode ser coreografada (serviços reagem a eventos) ou orquestrada (um coordenador comanda). O custo é a consistência eventual.
Perguntas típicas: coreografia vs. orquestração, e por que não usar 2PC.
Transactional Outbox
(Richardson, Microservices Patterns)
Resolve o dual write: salvar no banco e publicar no broker sem que só um dos dois aconteça. A mensagem é gravada numa tabela outbox na mesma transação local do dado de negócio, e um relay a publica depois, por polling (Polling Publisher) ou lendo o log do banco (Transaction Log Tailing, como o Debezium). A entrega é at-least-once, então o consumidor precisa ser idempotente.
Perguntas típicas: por que não publicar direto após o commit, e como evitar duplicatas.
Esses quatro são uma seleção baseada em experiência de mercado, não um ranking com fonte.
Lista: Enterprise Integration Patterns (65)
Fonte: Hohpe, G.; Woolf, B. Enterprise Integration Patterns. Addison-Wesley, 2003.
- Estilos de integração: File Transfer, Shared Database, Remote Procedure Invocation, Messaging
- Sistemas de mensageria: Message Channel, Message, Pipes and Filters, Message Router, Message Translator, Message Endpoint
- Canais: Point-to-Point Channel, Publish-Subscribe Channel, Datatype Channel, Invalid Message Channel, Dead Letter Channel, Guaranteed Delivery, Channel Adapter, Messaging Bridge, Message Bus
- Construção de mensagens: Command Message, Document Message, Event Message, Request-Reply, Return Address, Correlation Identifier, Message Sequence, Message Expiration, Format Indicator
- Roteamento: Content-Based Router, Message Filter, Dynamic Router, Recipient List, Splitter, Aggregator, Resequencer, Composed Message Processor, Scatter-Gather, Routing Slip, Process Manager, Message Broker
- Transformação: Envelope Wrapper, Content Enricher, Content Filter, Claim Check, Normalizer, Canonical Data Model
- Endpoints: Messaging Gateway, Messaging Mapper, Transactional Client, Polling Consumer, Event-Driven Consumer, Competing Consumers, Message Dispatcher, Selective Consumer, Durable Subscriber, Idempotent Receiver, Service Activator
- Gerenciamento: Control Bus, Detour, Wire Tap, Message History, Message Store, Smart Proxy, Test Message, Channel Purger
Lista: Microservices Patterns (53)
Fonte: Richardson, C. Microservices Patterns. Manning, 2018, conforme a pattern language em microservices.io (que pode incluir itens posteriores ao livro).
- Estilo arquitetural: Monolithic Architecture, Microservice Architecture
- Fronteiras de serviço: Decompose by Business Capability, Decompose by Subdomain, Self-contained Service, Service per Team
- Refatoração: Strangler Application, Anti-corruption Layer
- Colaboração entre serviços: Database per Service, Shared Database, Saga, Command-side Replica, API Composition, CQRS, Domain Event, Event Sourcing
- Mensageria transacional: Transactional Outbox, Transaction Log Tailing, Polling Publisher
- Testes: Consumer-driven Contract Test, Consumer-side Contract Test, Service Component Test
- Deployment: Multiple Service Instances per Host, Service Instance per Host, Service Instance per VM, Service Instance per Container, Serverless Deployment, Service Deployment Platform
- Cross-cutting: Microservice Chassis, Externalized Configuration, Service Template
- Comunicação: Remote Procedure Invocation, Messaging, Domain-specific Protocol, Idempotent Consumer
- API externa: API Gateway, Backend for Front-end
- Service discovery: Client-side Discovery, Server-side Discovery, Service Registry, Self Registration, 3rd Party Registration
- Confiabilidade: Circuit Breaker
- Segurança: Access Token
- Observabilidade: Log Aggregation, Application Metrics, Audit Logging, Distributed Tracing, Exception Tracking, Health Check API, Log Deployments and Changes
- UI: Server-side Page Fragment Composition, Client-side UI Composition
Top comments (0)