端点配置 (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 }
- 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) 应针对该类别丢弃的流量百分比。