服务发现机制
服务发现是微服务架构的基础能力,Envoy 支持多种服务发现机制,适应不同规模和动态性的后端服务。合理选择服务发现类型,是保障系统高可用和弹性的关键。
服务发现类型概览
类型 | 说明 | 适用场景 |
---|---|---|
STATIC | 静态配置 IP/端口 | 实例固定、小规模 |
STRICT_DNS | 定期异步解析 DNS | 动态扩缩容、支持 DNS |
LOGICAL_DNS | 仅新建连接时解析 DNS | 大规模 Web 服务、减少抖动 |
EDS | xDS 动态下发端点 | 云原生、容器编排、动态环境 |
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 主要用于透明代理、流量劫持等特殊场景。
- 配合健康检查、负载均衡策略,提升整体可用性。
合理选择服务发现机制,是微服务架构高可用的基础。建议结合实际业务和基础设施动态性选型。