EDS

Endpoint discovery architecture overview

ClusterLoadAssignment

[ClusterLoadAssignment proto]

Each route from RDS will map to a single cluster or traffic split across clusters using weights expressed in the RDS WeightedCluster.

With EDS, each cluster is treated independently from a LB perspective, with LB taking place between the Localities within a cluster and at a finer granularity between the hosts within a locality. For a given cluster, the effective weight of a host is its load_balancing_weight multiplied by the load_balancing_weight of its Locality.

  1. {
  2. "cluster_name": "...",
  3. "endpoints": [],
  4. "named_endpoints": "{...}",
  5. "policy": "{...}"
  6. }

cluster_name

(string, REQUIRED) Name of the cluster. This will be the service_name value if specified in the cluster EdsClusterConfig.

endpoints

(endpoint.LocalityLbEndpoints) List of endpoints to load balance to.

named_endpoints

(map<string, endpoint.Endpoint>) Map of named endpoints that can be referenced in LocalityLbEndpoints.

policy

(ClusterLoadAssignment.Policy) Load balancing policy settings.

ClusterLoadAssignment.Policy

[ClusterLoadAssignment.Policy proto]

Load balancing policy settings.

  1. {
  2. "drop_overloads": [],
  3. "overprovisioning_factor": "{...}"
  4. }

drop_overloads

(ClusterLoadAssignment.Policy.DropOverload) Action to trim the overall incoming traffic to protect the upstream hosts. This action allows protection in case the hosts are unable to recover from an outage, or unable to autoscale or unable to handle incoming traffic volume for any reason.

At the client each category is applied one after the other to generate the ‘actual’ drop percentage on all outgoing traffic. For example:

  1. { "drop_overloads": [
  2. { "category": "throttle", "drop_percentage": 60 }
  3. { "category": "lb", "drop_percentage": 50 }
  4. ]}
  • The actual drop percentages applied to the traffic at the clients will be

    “throttle”_drop = 60% “lb”_drop = 20% // 50% of the remaining ‘actual’ load, which is 40%. actual_outgoing_load = 20% // remaining after applying all categories.

overprovisioning_factor

(UInt32Value) Priority levels and localities are considered overprovisioned with this factor (in percentage). This means that we don’t consider a priority level or locality unhealthy until the percentage of healthy hosts multiplied by the overprovisioning factor drops below 100. With the default value 140(1.4), Envoy doesn’t consider a priority level or a locality unhealthy until their percentage of healthy hosts drops below 72%. For example:

  1. { "overprovisioning_factor": 100 }

Read more at priority levels and localities.

ClusterLoadAssignment.Policy.DropOverload

[ClusterLoadAssignment.Policy.DropOverload proto]

  1. {
  2. "category": "...",
  3. "drop_percentage": "{...}"
  4. }

category

(string, REQUIRED) Identifier for the policy specifying the drop.

drop_percentage

(type.FractionalPercent) Percentage of traffic that should be dropped for the category.