服务发现机制

服务发现是微服务架构的基础能力,Envoy 支持多种服务发现机制,适应不同规模和动态性的后端服务。合理选择服务发现类型,是保障系统高可用和弹性的关键。

服务发现类型概览

类型说明适用场景
STATIC静态配置 IP/端口实例固定、小规模
STRICT_DNS定期异步解析 DNS动态扩缩容、支持 DNS
LOGICAL_DNS仅新建连接时解析 DNS大规模 Web 服务、减少抖动
EDSxDS 动态下发端点云原生、容器编排、动态环境
ORIGINAL_DST透明代理,转发到原始目的地址iptables/TProxy 场景

各类型详解

STATIC

静态配置后端实例列表,适合实例数量少且变化不频繁的场景。

clusters:
- name: static_cluster
  type: STATIC
  load_assignment:
    cluster_name: static_cluster
    endpoints:
    - lb_endpoints:
      - endpoint:
          address:
            socket_address:
              address: 10.0.0.1
              port_value: 8080

STRICT_DNS

定期异步解析 DNS,自动感知实例变化,适合云主机、动态扩缩容。

clusters:
- name: dns_cluster
  type: STRICT_DNS
  load_assignment:
    cluster_name: dns_cluster
    endpoints:
    - lb_endpoints:
      - endpoint:
          address:
            socket_address:
              address: my-service.default.svc.cluster.local
              port_value: 8080

LOGICAL_DNS

仅在新建连接时解析 DNS,适合大规模 Web 服务,减少连接池抖动。

clusters:
- name: logical_dns_cluster
  type: LOGICAL_DNS
  load_assignment:
    cluster_name: logical_dns_cluster
    endpoints:
    - lb_endpoints:
      - endpoint:
          address:
            socket_address:
              address: web.example.com
              port_value: 80

EDS (Endpoint Discovery Service)

通过 xDS 动态下发端点,适合 Kubernetes、服务网格等动态环境。

clusters:
- name: eds_cluster
  type: EDS
  eds_cluster_config:
    eds_config:
      api_config_source:
        api_type: GRPC
        grpc_services:
        - envoy_grpc:
            cluster_name: xds_cluster

ORIGINAL_DST

用于透明代理场景,直接转发到原始目的地址。

clusters:
- name: original_dst_cluster
  type: ORIGINAL_DST
  lb_policy: ORIGINAL_DST_LB

工程实践建议

  • 小规模、实例固定可用 STATIC,动态扩缩容推荐 STRICT_DNS。
  • 云原生/服务网格环境优先 EDS,便于与控制面集成。
  • LOGICAL_DNS 适合大规模 Web 服务,减少连接池频繁重建。
  • ORIGINAL_DST 主要用于透明代理、流量劫持等特殊场景。
  • 配合健康检查、负载均衡策略,提升整体可用性。

合理选择服务发现机制,是微服务架构高可用的基础。建议结合实际业务和基础设施动态性选型。

文章导航

章节内容

这是章节的内容页面。

章节概览