集群简介

Cluster 是 Envoy 的核心概念之一,代表了后端服务的一个集合,用来路由出站请求。这个概念在负载均衡、服务发现和故障处理中扮演了关键角色。

Cluster 的定义与功能

Cluster 是 Envoy 配置中定义的逻辑服务端点的集合。每个 Cluster 包含了一组逻辑上相似的服务实例,这些服务实例能够处理相同类型的请求。Envoy 将请求路由到这些实例,通常基于配置的负载均衡策略。

服务发现类型

Envoy 支持多种服务发现机制,适用于不同规模和动态性的后端服务:

  • STATIC:静态配置 IP/端口,适合后端实例固定的小型场景。
  • STRICT_DNS:定期异步解析 DNS,适合实例经常变动、支持 DNS 解析的服务。
  • LOGICAL_DNS:只在新建连接时解析 DNS,适合大规模 Web 服务,减少连接池抖动。
  • EDS(Endpoint Discovery Service):通过 xDS 动态下发端点,适合大规模、动态编排环境。
  • ORIGINAL_DST:用于透明代理场景,直接转发到原始目的地址。

工程实践建议:小规模可用 STATIC,云原生/容器环境推荐 EDS,动态 DNS 推荐 STRICT_DNS。

健康检查与异常检测

  • 主动健康检查:定期向后端实例发送 HTTP/TCP/gRPC/Redis 检查请求,判定健康状态。
  • 被动健康检查(异常检测):通过 outlier detection 机制,自动剔除响应异常的实例。

典型配置片段:

health_checks:
  - timeout: 1s
    interval: 5s
    unhealthy_threshold: 3
    healthy_threshold: 2
    http_health_check:
      path: "/healthz"

熔断与流量控制

  • 熔断(Circuit Breaker):限制最大连接数、请求数、重试数等,防止后端雪崩。
  • 连接池化:提升高并发下的连接复用效率。
  • 超时与重试:可配置请求超时和自动重试,增强健壮性。

熔断配置示例:

circuit_breakers:
  thresholds:
    - priority: DEFAULT
      max_connections: 1000
      max_requests: 2000
      max_pending_requests: 100
      max_retries: 3

负载均衡策略

Envoy 支持多种负载均衡算法,满足不同业务需求:

  • 轮询(ROUND_ROBIN):默认,适合大多数场景。
  • 最少请求(LEAST_REQUEST):优先分配给当前负载低的实例。
  • 一致性哈希(RING_HASH/MAGLEV):适合会话保持、缓存等场景。
  • 随机(RANDOM):简单高效,适合无状态服务。

负载均衡配置示例:

lb_policy: LEAST_REQUEST

高级特性与工程价值

  • 子集选择:基于元数据实现灰度发布、版本路由等。
  • 连接预热:集群初始化时预热连接,提升冷启动性能。
  • 流量镜像与速率限制:支持流量复制和限流,便于测试和防护。

动态能力

通过 xDS API(如 CDS/EDS),可实现集群和端点的动态增删改查,无需重启。


工程实践建议:合理配置健康检查、熔断和负载均衡策略,是保障微服务系统高可用和弹性的关键。

文章导航

章节内容

这是章节的内容页面。

章节概览