|
|
@ -50,7 +50,11 @@ closed issue should also be included. |
|
|
|
|
|
|
|
|
|
|
|
* xDS APIs should support eventual consistency. For example, if RDS references a |
|
|
|
* xDS APIs should support eventual consistency. For example, if RDS references a |
|
|
|
cluster that has not yet been supplied by CDS, it should be silently ignored |
|
|
|
cluster that has not yet been supplied by CDS, it should be silently ignored |
|
|
|
and traffic not forwarded until the CDS update occurs. |
|
|
|
and traffic not forwarded until the CDS update occurs. Stronger consistency |
|
|
|
|
|
|
|
guarantees are possible if the management server is able to sequence the xDS |
|
|
|
|
|
|
|
APIs carefully (for example by using the ADS API below). By following the |
|
|
|
|
|
|
|
`[CDS, EDS, LDS, RDS]` sequence for all pertinent resources, it will be |
|
|
|
|
|
|
|
possible to avoid traffic outages during configuration update. |
|
|
|
|
|
|
|
|
|
|
|
* The API is primarily intended for machine generation and consumption. It is |
|
|
|
* The API is primarily intended for machine generation and consumption. It is |
|
|
|
expected that the management server is responsible for mapping higher level |
|
|
|
expected that the management server is responsible for mapping higher level |
|
|
@ -59,6 +63,11 @@ closed issue should also be included. |
|
|
|
used to generate xDS configuration are beyond the scope of the definitions in |
|
|
|
used to generate xDS configuration are beyond the scope of the definitions in |
|
|
|
this repository. |
|
|
|
this repository. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* REST-JSON API equivalents will be provided for the basic singleton xDS |
|
|
|
|
|
|
|
subscription services CDS/RDS/RDS/LDS/RLDS. Advanced APIs such as HDS, ADS and |
|
|
|
|
|
|
|
EDS multi-dimensional LB will be gRPC only. This avoids having to map |
|
|
|
|
|
|
|
complicated bidirectional stream semantics onto REST. |
|
|
|
|
|
|
|
|
|
|
|
* Listeners will be immutable. Any updates to a listener via LDS will require |
|
|
|
* Listeners will be immutable. Any updates to a listener via LDS will require |
|
|
|
the draining of existing connections for the specific bound IP/port. As a |
|
|
|
the draining of existing connections for the specific bound IP/port. As a |
|
|
|
result, new requests will only be guaranteed to observe the new configuration |
|
|
|
result, new requests will only be guaranteed to observe the new configuration |
|
|
@ -92,6 +101,34 @@ Unless otherwise stated, the APIs with the same names as v1 APIs have a similar |
|
|
|
* Rate Limit Discovery Service (RLDS). This is the same as RLS in v1. |
|
|
|
* Rate Limit Discovery Service (RLDS). This is the same as RLS in v1. |
|
|
|
* [Route Discovery Service (RDS)](api/rds.proto). |
|
|
|
* [Route Discovery Service (RDS)](api/rds.proto). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In addition to the above APIs, an aggregation API will be provided to allow for |
|
|
|
|
|
|
|
fine grained control over the sequencing of API updates across discovery |
|
|
|
|
|
|
|
services: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* [Aggregated Discovery Service (ADS)](api/ads.proto). While fundamentally Envoy |
|
|
|
|
|
|
|
employs an eventual consistency model, ADS provides an opportunity to sequence |
|
|
|
|
|
|
|
API update pushes and ensure affinity of a single management server for an |
|
|
|
|
|
|
|
Envoy node for API updates. ADS allows one or more APIs to be delivered on a |
|
|
|
|
|
|
|
single gRPC bidi stream by the management server, and within an API to have all |
|
|
|
|
|
|
|
resources aggregated onto a single stream. Without this, some APIs such as RDS |
|
|
|
|
|
|
|
and EDS may require the management of multiple streams and connections to |
|
|
|
|
|
|
|
distinct management servers. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ADS will allow for hitless updates of configuration by appropriate sequencing. |
|
|
|
|
|
|
|
For example, suppose *foo.com* was mappped to cluster *X*. We wish to change |
|
|
|
|
|
|
|
the mapping in the route table to point *foo.com* at cluster *Y*. In order to |
|
|
|
|
|
|
|
do this, a CDS/EDS update must first be delivered containing both clusters *X* |
|
|
|
|
|
|
|
and *Y*. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Without ADS, the CDS/EDS/RDS streams may point at distinct management servers, |
|
|
|
|
|
|
|
or when on the same management server at distinct gRPC streams/connections |
|
|
|
|
|
|
|
that require coordination. The EDS resource requests may be split across two |
|
|
|
|
|
|
|
distinct streams, one for *X* and one for *Y*. ADS allows these to be |
|
|
|
|
|
|
|
coalesced to a single stream to a single management server, avoiding the need |
|
|
|
|
|
|
|
for distributed synchronization to correctly sequence the update. With ADS, |
|
|
|
|
|
|
|
the management server would deliver the CDS, EDS and then RDS updates on a |
|
|
|
|
|
|
|
single stream. |
|
|
|
|
|
|
|
|
|
|
|
## Terminology |
|
|
|
## Terminology |
|
|
|
|
|
|
|
|
|
|
|
Some relevant [existing terminology](https://lyft.github.io/envoy/docs/intro/arch_overview/terminology.html) is |
|
|
|
Some relevant [existing terminology](https://lyft.github.io/envoy/docs/intro/arch_overview/terminology.html) is |
|
|
|