Pular para o conteúdo
Guides 8 min de leitura 882 visualizações

Envoy Proxy

Entenda os principais recursos e benefícios do Envoy Proxy como proxy moderno para microsserviços, melhorando desempenho e confiabilidade.

Envoy Proxy

O Envoy Proxy é um proxy de borda e de serviço open-source e de alto desempenho, projetado para aplicações cloud-native, atuando como um data plane universal para arquiteturas de microsserviços. Ele abstrai as complexidades de rede e fornece gerenciamento avançado de tráfego, observabilidade e recursos de segurança essenciais para sistemas distribuídos.

O Envoy funciona como um proxy transparente para todo o tráfego de rede entre serviços, permitindo que desenvolvedores e operadores foquem na lógica da aplicação em vez de questões de rede. Sua arquitetura foi construída para implantações modernas de microsserviços, oferecendo recursos que os proxies tradicionais frequentemente não possuem ou implementam de forma menos eficiente.

Princípios arquiteturais centrais

O design do Envoy prioriza desempenho, extensibilidade e configuração dinâmica. Ele opera como um servidor de processo único e multithread, usando I/O orientado a eventos para lidar com um alto volume de conexões e requisições simultâneas de forma eficiente.

Arquitetura de filtros L3/L4

O Envoy emprega uma arquitetura plugável de cadeia de filtros tanto na camada de rede (L3/L4) quanto na camada de aplicação (L7). Isso permite um processamento altamente customizável do tráfego de rede.
* Filtros de rede: operam sobre fluxos brutos de bytes. Exemplos incluem TCP proxy, terminação TLS e rate limiting no nível da conexão.
* Filtros HTTP: operam sobre requisições e respostas HTTP. Exemplos incluem compressão Gzip, injeção de request ID, autenticação JWT e roteamento avançado.

Essa modularidade viabiliza a aplicação sofisticada de políticas e a manipulação de tráfego em vários estágios do ciclo de vida da requisição.

Principais recursos para microsserviços

Suporte a HTTP/2 e gRPC

O Envoy oferece suporte de primeira classe a HTTP/2 e gRPC, protocolos essenciais em microsserviços modernos. Ele pode conectar clientes HTTP/1.1 a serviços HTTP/2, terminar conexões HTTP/2 e facilitar o proxy de gRPC, incluindo recursos avançados como balanceamento de carga e roteamento com reconhecimento de gRPC.

Balanceamento de carga avançado

O Envoy oferece um conjunto de algoritmos sofisticados de balanceamento de carga, além do simples round-robin:
* Least Request: roteia para o backend com o menor número de requisições ativas.
* Ring Hash: hashing consistente para melhor aproveitamento de cache e sessões sticky.
* Maglev (Power of Two Choices): escolhe dois hosts aleatórios e seleciona o que tiver menos requisições ativas, equilibrando simplicidade com uma distribuição quase ótima.
* Random: para distribuição simples e sem viés.
* Original Destination: roteia para o IP de destino pretendido sem descoberta de serviços.

Ele também suporta retentativas automáticas, circuit breaking, detecção de outliers e health checking para garantir que o tráfego seja enviado apenas para instâncias saudáveis, melhorando a resiliência.

Configuração dinâmica (API xDS)

Um pilar do design cloud-native do Envoy são seus recursos de configuração dinâmica através da API xDS (Discovery Service). Em vez de arquivos de configuração estáticos, o Envoy pode receber atualizações de diversos recursos dinamicamente:
* Listener Discovery Service (LDS): listeners (portas às quais o Envoy se vincula).
* Route Discovery Service (RDS): regras de roteamento HTTP.
* Cluster Discovery Service (CDS): clusters upstream (grupos de serviços de backend).
* Endpoint Discovery Service (EDS): endpoints (instâncias individuais) dentro dos clusters.
* Secret Discovery Service (SDS): certificados TLS e chaves privadas.
* Runtime Discovery Service (RTDS): valores de configuração de runtime dinâmicos.

Isso permite mudanças de configuração sem downtime, viabilizando entrega contínua e integração com control planes de service mesh (por exemplo, Istio, App Mesh) que gerenciam essas configurações.

Observabilidade

O Envoy foi projetado com a observabilidade como cidadã de primeira classe, fornecendo visibilidade profunda sobre o tráfego de rede:
* Estatísticas detalhadas: emite um grande número de estatísticas (mais de 100 por cluster upstream) cobrindo conexões, requisições, erros, latência e mais, que podem ser coletadas pelo Prometheus ou sistemas similares.
* Tracing distribuído: suporta sistemas populares de tracing como Jaeger, Zipkin e AWS X-Ray, propagando contextos de trace (por exemplo, B3, W3C Trace Context) e gerando spans para cada hop.
* Access logging: logs de acesso abrangentes e customizáveis, detalhando cada requisição, incluindo headers, códigos de resposta e informações de tempo.

Esses recursos são cruciais para depuração, análise de desempenho e monitoramento de microsserviços distribuídos.

Recursos de segurança

O Envoy fornece recursos robustos de segurança, frequentemente retirando essas preocupações do código da aplicação:
* Terminação e origination de TLS: cuida da criptografia/descriptografia TLS, permitindo que os serviços se comuniquem em texto puro internamente e mantendo a comunicação externa segura.
* Mutual TLS (mTLS): viabiliza comunicação segura e autenticada entre serviços dentro de uma mesh, validando certificados de cliente.
* Rate limiting: aplica limites de taxa de requisições para proteger serviços contra sobrecarga ou abuso.
* Autenticação e autorização: integra-se a serviços externos de autorização (por exemplo, OPA) através do filtro External Authorization, permitindo controle de acesso granular.

O papel do Envoy em arquiteturas de microsserviços

Sidecar proxy

O padrão de implantação mais comum do Envoy em um ambiente de microsserviços é como sidecar proxy. Nesse modelo, cada instância de serviço executa um proxy Envoy ao seu lado, tipicamente dentro do mesmo pod no Kubernetes. Todo o tráfego de rede de entrada e saída do serviço é interceptado e gerenciado de forma transparente pelo sidecar.

Essa abordagem oferece diversos benefícios:
* Abstração de rede: os desenvolvedores escrevem serviços que se comunicam com o localhost, e o sidecar Envoy cuida do roteamento, das retentativas e de outras questões de rede.
* Suporte poliglota: permite políticas e recursos de rede consistentes entre serviços escritos em diferentes linguagens e frameworks.
* Isolamento: as questões de rede ficam isoladas da lógica de negócio, simplificando o desenvolvimento e a implantação.

Data plane de service mesh

O Envoy serve como data plane de facto de muitas implementações populares de service mesh (por exemplo, Istio, Linkerd, AWS App Mesh). Em uma service mesh, um control plane gerencia e configura uma frota de proxies Envoy (o data plane). O control plane usa a API xDS para atualizar dinamicamente a configuração de todos os Envoys da mesh, aplicando políticas de tráfego, segurança e observabilidade em todo o ecossistema de microsserviços.

Edge proxy / API gateway

O Envoy também pode ser implantado na borda da rede como API gateway ou proxy reverso. Nesse papel, ele lida com o tráfego de ingresso, executa autenticação, rate limiting e terminação TLS, e roteia requisições para os serviços de backend apropriados dentro da arquitetura de microsserviços. Seus recursos avançados de roteamento L7 o tornam adequado para requisitos complexos de roteamento na borda.

Exemplo de configuração

Uma configuração básica do Envoy define listeners, cadeias de filtros e clusters. Este exemplo mostra um listener na porta 10000 que faz proxy de requisições HTTP para um cluster de serviço upstream chamado web_service.

static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address:
        protocol: TCP
        address: 0.0.0.0
        port_value: 10000
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: web_service
          http_filters:
          - name: envoy.filters.http.router
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
  - name: web_service
    connect_timeout: 0.25s
    type: LOGICAL_DNS
    # Comente a linha a seguir para testar em v6.
    dns_lookup_family: V4_ONLY
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: web_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: webserver.example.com # Substitua pelo hostname/IP real do seu serviço
                port_value: 80

Comparação com outros proxies

Recurso Envoy Proxy Nginx HAProxy
Caso de uso principal Service mesh, sidecar, API gateway, borda Servidor web, proxy reverso, balanceador de carga Balanceador L4 de alto desempenho, L7
Arquitetura Orientada a eventos, C++, filtros altamente modulares Orientada a eventos, C, baseada em módulos Orientada a eventos, C, altamente otimizada
Config dinâmica API xDS completa para todos os recursos Recarrega a config (disruptivo) ou API comercial API de runtime para mudanças limitadas, reload de config
HTTP/2 e gRPC Suporte de primeira classe, recursos avançados Bom suporte Bom suporte
Observabilidade Métricas extensas, tracing, access logs Métricas básicas, tracing limitado Estatísticas detalhadas, logging básico
Balanceamento de carga L7 avançado (hash consistente, Maglev), L4 L7 básico (round-robin, least conn), L4 L4 avançado, algum L7 (least conn, source)
Service discovery Integrado com xDS, DNS, estático DNS, estático, algumas integrações comerciais DNS, estático, algumas integrações comerciais
Circuit breaking Sim Não (requer lógica externa) Sim
Detecção de outliers Sim Não (requer lógica externa) Não (requer lógica externa)
Papel em service mesh Data plane (escolha principal) Não foi projetado para esse papel Não foi projetado para esse papel
Extensibilidade Filtros em C++, extensões WASM Scripting em Lua, módulos em C Scripting em Lua, módulos em C

Considerações práticas

Ajuste de desempenho

O Envoy já é altamente performático por padrão, mas implantações específicas podem se beneficiar de ajustes. As áreas principais incluem:
* Configuração de threads: ajustar o número de worker threads para corresponder aos núcleos de CPU.
* Gerenciamento de buffers: otimizar os tamanhos dos buffers de leitura/escrita.
* Dimensionamento do pool de conexões: configurar o máximo de conexões e de requisições por conexão para os clusters upstream.

Consumo de recursos

Embora seja eficiente, executar um sidecar Envoy para cada instância de serviço aumenta o consumo geral de recursos (CPU, memória). Esse trade-off costuma ser aceitável diante dos benefícios operacionais proporcionados por uma service mesh. O monitoramento cuidadoso do uso de recursos é crucial em implantações grandes.

Depuração

O Envoy fornece uma interface de administração (tipicamente na porta 15000) que oferece endpoints valiosos para depuração:
* /stats: estatísticas atuais.
* /config_dump: despeja a configuração ativa atual.
* /clusters: status dos clusters upstream.
* /hot_restart: inicia um hot restart gracioso.

Esses endpoints são instrumentais para resolver problemas de configuração, monitorar a saúde do sistema e entender o fluxo de tráfego.

Atualizado: 04.03.2026
Voltar à categoria

Leia também

Experimente nossos proxies

20,000+ proxies em 100+ países do mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.