Pular para o conteúdo

apps/service-design/sidecar

155 · Padrões de Design de Serviço · ≈ 6 min de estudo

Sidecar

Um processo auxiliar roda ao lado do serviço, no mesmo pod, e recebe todo o tráfego de entrada no lugar dele: log de acesso, id de requisição, timeout, limite de concorrência e métricas ficam no sidecar, não no código. Use quando vários serviços, em linguagens diferentes, precisam do mesmo comportamento transversal sem reimplementá-lo cada um.

Veja também: service-design/ambassador — o proxy do tráfego de saída; observability/sidecar — o sidecar que coleta logs.

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

Cenário

O serviço de pagamentos liquida PIX no PostgreSQL e nada mais. O banco exige log de acesso por requisição, id de correlação, timeout para o chamador e proteção contra acúmulo quando o serviço trava — por exemplo, quando o fechamento noturno segura o lock da conta. Nada disso entra no código do serviço: um Envoy ao lado dele faz tudo.

Planta

Fluxo
4/4
Pod — mesmo localhostChamadorSidecar Envoylog de acesso,x-request-idtimeout 1s, max3 requisicoessvc-pagamentos127.0.0.1:6041so liquida PIXPostgreSQLPrometheusPOST /pix :6040127.0.0.1:6041/stats/prometheus:9901
4

4 passos — reproduza para seguir o fluxo

Como funciona

5 passos

Capacidade transversal fora do serviço.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

x-request-id+2
/stats/prometheus+1
  1. 01

    O sidecar compartilha a rede do serviço (network_mode: host, como dois containers de um pod); o serviço escuta só em 127.0.0.1:6041, então o sidecar é a única entrada

  2. 02

    Cada requisição ganha um x-request-id, que segue para o serviço, volta ao chamador e aparece na linha JSON do log de acesso

  3. 03

    Circuit breaker de concorrênciaCom 3 requisições dentro do serviço, a 4ª recebe 503 na hora (x-envoy-overloaded), em vez de empilhar num serviço travado

  4. 04

    Timeout de rota de 1sO chamador recebe 504 e é liberado; o serviço termina o PIX depois, e o reenvio com o mesmo pixId responde duplicate sem novo débito

  5. 05

    As métricas (2xx/4xx/5xx, requisições descartadas, timeouts) saem do /stats/prometheus do sidecar — o serviço não exporta nenhuma

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Serviço sem código de log, métrica, timeout ou limite

  • Mesma política para serviços em qualquer linguagem

  • Política muda na config do sidecar, sem deploy do serviço

  • O serviço fica inacessível por fora do sidecar

Custos

  • Um processo a mais por instância, com CPU e memória próprias

  • Um hop a mais em localhost em cada requisição

  • Depurar exige olhar os dois processos

  • Sidecar parado derruba a entrada do serviço

apps/service-design/sidecar

4 arquivos

envoy/

  • envoy.yamlinfraO sidecar: listener de entrada, log de acesso JSON, id de requisição, timeout e circuit breaker

src/

  • service_payments.tsO serviço: liquidação de PIX idempotente por pixId, sem nenhum código de infraestrutura
  • metrics_sidecar.tsLeitura das métricas que o sidecar coleta para o serviço

sql/

  • 01_schema.sqlschemaContas e PIX liquidados

Executar · com Docker

  1. docker compose up -d --wait# sobe PostgreSQL · Envoy
  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
  6. docker compose logs sidecar
Requisitos
BunDocker
Sobe junto
PostgreSQLEnvoy

Por que se relacionam

Teste rápido

Qual destes combina com Sidecar?

Próximo projeto · Padrões de Design de ServiçoAmbassador
Esc

↑ ↓ navegarEnter abrir191 resultados