DEV Community

joaofelipefaria
joaofelipefaria

Posted on

Design patterns de integração: o que são e quais costumam aparecer em entrevistas

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

  1. 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.
  2. 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)