端点配置 (proto)

端点发现 架构概述

config.endpoint.v3.ClusterLoadAssignment

[config.endpoint.v3.ClusterLoadAssignment proto]

来自 RDS 的每个路由将映射到单个集群,或者使用 RDS WeightedCluster 中表达的权重跨集群进行流量拆分。

使用 EDS,每个集群从负载均衡的角度来看都是独立的,负载均衡发生在集群内的 Locality 之间,以及更细粒度地在 Locality 内的 Host 之间。每个端点的流量百分比由其 load_balancing_weight 和其 Locality 的 load_balancing_weight 共同决定。首先,将选择一个 Locality,然后根据其权重在该 Locality 内选择一个端点。

{
  "cluster_name": ...,
  "endpoints": [],
  "policy": {...}
}
cluster_name

(string, REQUIRED) 集群名称。如果在集群 EdsClusterConfig 中指定,这将是 service_name 值。

endpoints

(repeated config.endpoint.v3.LocalityLbEndpoints) 要负载均衡到的端点列表。

policy

(config.endpoint.v3.ClusterLoadAssignment.Policy) 负载均衡策略设置。

config.endpoint.v3.ClusterLoadAssignment.Policy

[config.endpoint.v3.ClusterLoadAssignment.Policy proto]

负载均衡策略设置。

{
  "drop_overloads": [],
  "overprovisioning_factor": {...},
  "endpoint_stale_after": {...},
  "weighted_priority_health": ...
}
drop_overloads

(repeated config.endpoint.v3.ClusterLoadAssignment.Policy.DropOverload) 用于修剪整体传入流量以保护上游主机的一项操作。此操作允许在主机无法从中断中恢复、无法自动扩展或由于任何原因无法处理传入流量量时进行保护。

在客户端,每个类别都会依次应用以生成所有传出流量的“实际”丢弃百分比。例如

{ "drop_overloads": [
    { "category": "throttle", "drop_percentage": 60 }
    { "category": "lb", "drop_percentage": 50 }
]}
应用于客户端流量的实际丢弃百分比将是

“throttle”_drop = 60% “lb”_drop = 20% // 剩余“实际”负载的 50%,即 40%。actual_outgoing_load = 20% // 应用所有类别后剩余。

Envoy 仅支持一个元素,如果存在多个元素,则会发出 NACK。其他支持 xDS 的数据平面不一定有此限制。

在 Envoy 中,此 drop_overloads 配置可以被运行时键 “load_balancing_policy.drop_overload_limit” 设置覆盖。此运行时键可以设置为 0 到 100 之间的任何整数。0 表示丢弃 0%。100 表示丢弃 100%。当 drop_overloads 配置和 “load_balancing_policy.drop_overload_limit” 设置同时存在时,两者中的最小值获胜。

overprovisioning_factor

(UInt32Value) 优先级级别和 Locality 被认为使用此因子(以百分比表示)超额配置。这意味着我们不会认为优先级级别或 Locality 不健康,直到健康主机的比例乘以超额配置因子降至 100 以下。使用默认值 140(1.4),Envoy 不会认为优先级级别或 Locality 不健康,直到其健康主机的百分比降至 72% 以下。例如

{ "overprovisioning_factor": 100 }

优先级级别Locality 处阅读更多信息。

endpoint_stale_after

(Duration) 最长使用此分配中的端点的时间。如果在此时间到期之前没有收到新分配,则端点将被视为陈旧,应将其标记为不健康。默认为 0,这意味着端点永远不会过时。

weighted_priority_health

(bool) 如果为真,则使用 负载均衡权重 确定健康和不健康的 Host 来确定优先级级别的健康状况。如果为假,则使用健康和不健康的 Host 的数量来确定优先级级别的健康状况,或者换句话说,假设每个 Host 的权重为 1 以进行此计算。

注意:这目前未针对 Locality 加权负载均衡 实现。

config.endpoint.v3.ClusterLoadAssignment.Policy.DropOverload

[config.endpoint.v3.ClusterLoadAssignment.Policy.DropOverload proto]

{
  "category": ...,
  "drop_percentage": {...}
}
category

(string, REQUIRED) 指定丢弃的策略标识符。

drop_percentage

(type.v3.FractionalPercent) 应针对该类别丢弃的流量百分比。