-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Locality endpoint discovery service (LEDS) #10373
Comments
IEDS can be confused with delta/incremental xDS. Naming suggestion: How about Locality-EDS (LEDS)? I don't have full context, but my understanding is this xDS resource represents a set of endpoints within a locality? |
I like LEDS as a name option. Let's see if anyone has any other ideas. |
Another naming suggestion would be Named Endpoint Discovery Service (NEDS). |
+1 for LEDS |
Still I am not quite sure how this new discovery service would achieve incremental updates for endpoints. Is that mean that we can assign a config source for each endpoint and provide resource name for it? That is to say, When EDS handler is processing the config source, it will send individual request for each endpoint? If that is so, the xDS server may be overwhelmed by the flush of requests I thought.
CC yuqi.lxp@alibaba-inc.com,
|
For each locality/priority. So the LEDS resource is One other thing that occurs to me is that if we implement this correctly, many users would probably end up using static clusters with fixed |
There is no attribute marking added or removed endpoints. How can the Envoy determinate which endpoints to delete and which to add? Is that mean this implementation must cooperate with Delta xDS to make it function properly? I’m still worried about the performance of this, because even we’ve got EGDS with size=20 we got quite a lot of EGDS messages within Istio Pilot’s full push.
|
@mattklein123 I understand that the LEDS cannot reduce the amount of data transmission between the management server and the Envoy through the LEDS without the realization of delta XDS. In the case of non-delta XDS, when one of the endpoints in the locality changes, the whole data should still be pushed to the Envoy, and the use of LEDS will bring some complexity instead. |
@gengleilei are you talking about Pilot? LEDS will require delta xDS support, I believe Pilot must have some support here already from the VHDS work, CC @brian-avery @costinm |
I don't think any of the VHDS work has merged yet. But we shouldn't make Envoy decisions due to limitations in Pilot's implementation. I don't think there is any reason we cannot support delta xDS, we just haven't yet. We can have delta XDS just for LEDS and still use SOTW XDS for ADS, right? If so then it won't be too hard to implement I think. |
Pedantically it won't require delta xDS support (e.g. if we implement it right per above we could use it with static clusters and get mostly the same behavior as today), but it will require delta support for the CPU savings that you are looking for. |
@howardjohn yeah, I think having delta xDS (on a distinct connection to the ADS one) just for LEDS would be fine. @mattklein123 the protocol extension for namespace/attribute that is in the proposal above requires that we add something to the discovery request message. Are you suggesting we would do this for SoTW |
I would recommend consistency here since I don't see any reason not to have it? |
@mattklein123 really depends on use case, all things being equal we're pushing more towards putting complexity/advanced stuff in incremental xDS and leaving SoTW simple. It might make sense for LDS in proxyless servers in SoTW though, so probably fine to do it in both places. |
@mattklein123 Would you mind to paste the IEDS protobuf definition onto this issue? |
Harvey and I chatted about this and agreed to go with the namespace approach. I'll let him propose the specific proto changes. |
This is an RFC for the introduction of namespaces to xDS. The idea is that we now have structured resource naming (when opting in) of the form <authority>/<qualifiers>/<opaque resource name>. The resource name is present in the ConfigSource, reflected in discovery requests and used to filter resources in discovery responses by a client. This feature is backported from the UDPA-TP strawman and is intended to support envoyproxy#10373, gRPC xDS resource selection and federation use cases. Signed-off-by: Harvey Tuch <htuch@google.com>
This comment has been minimized.
This comment has been minimized.
@gnz00 the second statement "doesn’t handle the scenario where there is a large number of endpoints with the same locality attribute" is true for SotW LEDS xDS, but for delta LEDS xDS each endpoint in a locality would be a first class xDS resource under this proposal, capable of independent delivery. On-demand EDS is an interesting thought experiment; what criteria would a fetch be made with? When we have too few available connections? When existing backends are too heavily loaded? For subset LB, when we miss on a subset? |
This comment has been minimized.
This comment has been minimized.
VHDS can return routes with unknown clusters today, but there is no corresponding on-demand CDS implementation. That would be pretty reasonable to add though. I think it depends somewhat on what dimension of scalability we're talking. If it's O(20k) endpoints and a single cluster/route, then we needs something like LEDS. If it's O(20k) clusters with relatively few hosts, then on-demand CDS is going to be more attractive. BTW, the point regarding subsetting is well taken. LEDS, on-demand CDS, etc. are for those situations where subsetting doesn't work or the sizes of configs are still too large even after subsetting. |
This comment has been minimized.
This comment has been minimized.
Can we please split the most recent part of this conversation into a new issue? It's not really related to the LEDS proposal. Building on-demand CDS directly into Envoy is a fine thing to tackle. It's actually possible to build today without any core changes (some people have built FaaS systems this way using Envoy) but no one has done it in OSS. |
The design here should ideally reflect kubernetes/enhancements#2094 (and specifically ideas such as kubernetes/enhancements#2094 (comment)) when understanding endpoint scalability requirements. |
Here's LEDS design doc. |
cc @stevenzzzz |
This is a very exciting feature! It looks like work on it has paused? I also wanted to ask 2 design questions (which should be relevant even if this work isn't picked up again until later).
|
LEDS integration was done in: #18195 |
Not sure I fully grok your question, but I think this requires an EDS-cluster have named hosts (DNS), and this is not supported at the moment.
There is warming between EDS->LEDS, and there is no requirement to resend the already sent locality-weights, only the ones that were updated. |
A group of us met this morning to discuss how to move the EGDS issue and PR forward:
The consensus at this point is that we would like to hold on working on and merging EGDS as currently specified and instead develop something that we are tentatively calling IEDS (Individual Endpoint Discovery Service). Note that better name suggestions are appreciated here!
The general idea of IEDS will be to allow a sub-API of EDS to provide individual endpoints within a defined locality/priority. This will avoid quite a bit of complexity around shuffling endpoints within localities/priorities. Additionally, localities/priorities rarely change in a deployment.
The high level flow of the IEDS API will be:
lb_endpoints
to either be specified inline as today or instead pointed at a config source that configures the IEDS endpointenvoy/api/envoy/config/endpoint/v3/endpoint_components.proto
Line 109 in e1962d7
envoy/api/envoy/service/discovery/v3/discovery.proto
Line 42 in e1962d7
To avoid confusion, note that we are not tackling merging/patching as mentioned here: #8400. That is a much larger project that should not block this effort.
cc @envoyproxy/maintainers @htuch @markdroth @snowp @wgallagher @tomwans @gengleilei @hzxuzhonghu @seflerZ @lambdai @howardjohn @ramaraochavali
The text was updated successfully, but these errors were encountered: