linkerd2/proxy
Oliver Gould a2d537f5c4
Use a load-aware balancer (#251)
Currently, the conduit proxy uses a simplistic Round-Robin load
balancing algorithm. This strategy degrades severely when individual
endpoints exhibit abnormally high latency.

This change improves this situation somewhat by making the load balancer
aware of the number of outstanding requests to each endpoint. When nodes
exhibit high latency, they should tend to have more pending requests
than faster nodes; and the Power-of-Two-Choices node selector can be
used to distribute requests to lesser-loaded instances.

From the finagle guide:

    The algorithm randomly picks two nodes from the set of ready endpoints
    and selects the least loaded of the two. By repeatedly using this
    strategy, we can expect a manageable upper bound on the maximum load of
    any server.

    The maximum load variance between any two servers is bound by
    ln(ln(n))` where `n` is the number of servers in the cluster.

Signed-off-by: Oliver Gould <ver@buoyant.io>
2018-02-07 09:39:31 -08:00
..
controller-grpc Move the Rust gRPC bindings to a dedicated crate (#275) 2018-02-06 10:31:48 -08:00
convert Move the Rust gRPC bindings to a dedicated crate (#275) 2018-02-06 10:31:48 -08:00
futures-mpsc-lossy Move the Rust gRPC bindings to a dedicated crate (#275) 2018-02-06 10:31:48 -08:00
router Move the Rust gRPC bindings to a dedicated crate (#275) 2018-02-06 10:31:48 -08:00
src Use a load-aware balancer (#251) 2018-02-07 09:39:31 -08:00
tests Move the Rust gRPC bindings to a dedicated crate (#275) 2018-02-06 10:31:48 -08:00
Cargo.toml Use a load-aware balancer (#251) 2018-02-07 09:39:31 -08:00
Dockerfile Remove proxy/Dockerfile-deps (#279) 2018-02-06 13:01:38 -08:00