dotnet / dotnet/yarp

Proxy can divert routes to support A/B testing, service rollout etc

Open
#126 15 comments 13 reactions 0 assignees View on GitHub
Priority:1 Type: Idea User Story
Dominant language
C#
Stars
9.6k
Forks
933
Avg merge
12d 18h
Merged PRs (30d)
2

Description

A/B testing is a common scenario for proxies, letting services incrementally upgrade/experiment using live traffic.

How does a service decide which requests to route to which test group?
- Assuming all requests are stateless you could decide this randomly on a per-request basis.
- For a stateful service you'd want to do a random assignment and then use affinization (https://github.com/microsoft/reverse-proxy/issues/45).
- A service may also decide to statically affinitize based on known groups like tenants (e.g. move small customers before big ones).

Initial theory:
- This is a separate feature from load balancing. Within a load balancing set we assume all servers are equally able to handle a request aside from considerations of health and load. You'd select a test group and then load balance within that group.
- This should take advantage of the routing layer. For something like tenant based affinity that information may already be part of the route definition.
- Alternatively we could put it into the route config (ProxyRoute), allowing it to specify multiple backends and an assignment strategy.
- This should be compatible with retry mechanisms to allow failing over to the other test group.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.