Cluster 是 Envoy 的核心概念之一,代表了后端服务的一个集合,用来路由出站请求。这个概念在负载均衡、服务发现和故障处理中扮演了关键角色。
Cluster 的定义与功能
Cluster 是 Envoy 配置中定义的逻辑服务端点的集合。每个 Cluster 包含了一组逻辑上相似的服务实例,这些服务实例能够处理相同类型的请求。Envoy 将请求路由到这些实例,通常基于配置的负载均衡策略。
主要属性
Envoy 的 Cluster 配置包括以下主要属性:
-
服务发现机制(Service Discovery):Envoy 支持多种服务发现机制,包括静态定义的 IP 列表、动态服务发现(如 DNS、Consul)以及集成的服务发现 API(如 EDS, Endpoint Discovery Service)。
-
健康检查(Health Checking):Cluster 支持配置健康检查,以便定期检查后端服务实例的健康状态。如果检查失败,相应的实例会从负载均衡中移除。
-
负载均衡策略(Load Balancing Strategies):Envoy 支持多种负载均衡策略,包括随机、轮询、最少请求、加权轮询等,以便根据不同需求分配流量。
-
传输协议(Transport Protocol):可配置为 TCP 或 HTTP,决定了 Envoy 如何与后端服务通信。
配置示例
下面是一个基本的 Cluster 配置示例,它使用静态地址列表和简单的轮询负载均衡策略:
static_resources:
clusters:
- name: service_cluster
connect_timeout: 0.25s
type: STATIC
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 192.168.1.10
port_value: 80
- endpoint:
address:
socket_address:
address: 192.168.1.11
port_value: 80
该配置定义了一个名为 service_cluster
的静态集群,使用**轮询(ROUND_ROBIN)**负载均衡策略,将请求分发到两个后端服务实例,分别位于IP地址 192.168.1.10:80
和 192.168.1.11:80
,连接超时时间为 0.25 秒。
动态能力
Envoy 的动态配置能力允许在不重启服务的情况下动态改变 Cluster 配置。例如,通过集成的 xDS API(如 CDS),可以实时添加、更新或删除 Cluster 配置。
高级特性
除了基础功能外,Cluster 还支持许多高级特性,如:
- 连接池化:减少了频繁建立连接的开销,提高了性能。
- 断路器:在后端服务超载时防止进一步的连接尝试,帮助服务恢复正常。
- 超时和重试:可配置的请求超时和重试机制,增强了请求的健壮性。
- 连接预热:在集群初始化时,Envoy 会执行连接预热,以确保在开始处理流量之前,所有主机都处于健康状态并且已准备好接受请求。
- 子集选择:Envoy 可以根据元数据将集群中的端点划分为多个子集,允许基于特定条件(如版本或环境)选择不同的后端服务。
- 流量控制:Envoy 支持流量控制策略,允许用户配置流量的速率限制和优先级,从而管理流量的流入和流出。