Skip to content
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

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
Open

Conversation

AndresGuedez
Copy link

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]

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]>
Copy link
Contributor

@markdroth markdroth left a 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.

Copy link
Contributor

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,
Copy link
Contributor

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
Copy link
Contributor

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]()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

algorithms for working with aggregated data and the mechanics of how new balancing decisions are
delivered to data plane load balancers.

# Background
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Contributor

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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Contributor

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants