-
Notifications
You must be signed in to change notification settings - Fork 74
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add ORCA specification #105
base: main
Are you sure you want to change the base?
Conversation
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
Signed-off-by: Andres Guedez <[email protected]>
5ef5390
to
3d8efda
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for updating this!
Please let me know if you have any questions about any of this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please move all of this to a top-level "doc" directory (i.e., instead of orca/
, it should be doc/orca/
).
|
||
# Background | ||
|
||
Data plane load balancers (DPLBs), for example an Envoy proxy or gRPC-LB client, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/gRPC-LB/gRPC/
Data plane load balancers (DPLBs), for example an Envoy proxy or gRPC-LB client, | ||
receive HTTP or gRPC requests from clients, make LB decisions and proxy the request and | ||
corresponding response to/from backends. These load balancing (LB) decisions are driven by LB | ||
assignments delivered by the control plane load balancer (CPLB) via EDS in the Universal Data Plane |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
UDPA was an alternate name that we were pursuing for xDS for a while, but it's been dropped. I think we should just remove the "in the Universal Data Plane API (UDPA)" part -- it's clear enough what EDS is.
# Known DPLB Implementations | ||
|
||
## gRPC | ||
TODO: [Repository]() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The repo differs by language:
algorithms for working with aggregated data and the mechanics of how new balancing decisions are | ||
delivered to data plane load balancers. | ||
|
||
# Background |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this description is a little too xDS-centric: it describes ORCA solely in the context of ORCA-to-LRS propagation, even though ORCA can be used without using xDS at all.
I would like to see this section re-written to explain how ORCA can be used to share data between endpoints and clients for things like client-side WRR. We can then add a section at the end to show how it can be used in conjunction with xDS by propagating ORCA data into LRS load reports.
The definition for this service can be found at | ||
https://github.com/cncf/xds/blob/main/xds/service/orca/v3/orca.proto. | ||
|
||
Alternatively, an HTTP endpoint can be exposed by the load reporting server. A GET or HEAD request |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This paragraph seems to describe a possible future improvement, not something that's part of the existing ORCA spec. I suggest either removing it or moving it to a "Possible future improvements" section.
|
||
# Reporting | ||
|
||
## Inline Per-Request Format |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we need to provide some guidance about when it's useful to choose per-request vs. OOB reporting.
I think we should recommend that the vast majority of applications use per-request reporting. OOB reporting should be considered only for traffic patterns that do not result in per-request reports being delivered often enough to stay fresh, such as a client with very sparse traffic or an application whose traffic is mostly long-running streams.
We should also point out that OOB reporting is good for utilization but doesn't make much sense for query cost reporting.
|
||
![Sidecar Integration Diagram](./orca-spec-sidecar.jpg) | ||
|
||
The advantage of a sidecar model is that the application requires no modification as in the example |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is true only if the sidecar is capable of determining the metrics that the endpoint wishes to report to its clients. For example, this would probably work for things like CPU or memory utilization, which the sidecar can determine in a fairly generic way. But it won't work for application-specific things, like custom utilization metrics or query cost metrics -- those will always require cooperation on the part of the application.
## gRPC | ||
TODO: [Repository]() | ||
|
||
[Design](https://github.com/grpc/proposal/blob/master/A51-custom-backend-metrics.md) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It may also be useful to refer to the following designs as well:
to this endpoint will return a response with the `endpoint-load-metrics` header that contains the | ||
load report in one of the formats listed above. | ||
|
||
# ORCA Integration Considerations |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this section also needs to be updated, since it no longer seems that relevant as currently written. In general, I think users are not going to choose a sidecar or library model based solely on ORCA; instead, they will probably have one of those models already and will want to know what the options are for adding ORCA support.
I think what we should be explaining here is that there are cases where a smart data plane like Envoy or gRPC can handle ORCA for you, transparently to the application, and there are other cases where the application will need to generate the ORCA data directly.
Add a standalone ORCA specification under the top-level orca/ directory.
This specification is intended to be continuously updated as the format evolves.
Signed-off-by: Andres Guedez [email protected]