-
Notifications
You must be signed in to change notification settings - Fork 2.1k
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
querier: Add option for different gRPC client Loadbalancing options for StoreAPI #1083
Comments
IMO we shouldnt really do this. I had a chat with grpc folks about 30min dns refresh interval hardcoded into go grpc package and they said PRs changing that arent welcome. And it doesnt make sense for them to implement all of the LB strategies in all the languages. ATM its easier to run envoy, nginx, etc to do this. In future they are working on grpc lb server |
This is the snippet from our chat:
|
IMO |
I don't think it is good as it does not evenly loadbalance the load. At least we might want to add option of changing this for first iteration.. Wonder if some more customized LB makes sense then? That is aware of client context? |
The only proper way to evenly balance the load and don't deal with upscale issues is to run sidecar proxies. The only other option is to add AFAIK the grpc lookaside loadbalancer, where grpc client would actually connect to lookaside server get it's routes from there and keep refreshing them is still in development https://grpc.io/blog/loadbalancing/ So we don't really have any good options currently, a part from asking users to use sidecar proxies. |
hmm maybe it's not that bad we could do something like on all of our grpc servers:
|
So I don't really understand the problem you are mainly trying to explain here. I don't think any dns refresh is needed. As you got answer is all about the broken connection and grpc client doing DNS lookup and choosing another host. Why is that problematic? However the actual issue here is not about that. It's about loadbalancing method we can use. In fact we already use one (you have to use something), which is pickfirst. I vote we should have round robin available and maybe some sticky round robin as well that is aware of client. I am pretty sure there are existing Golang implementation of this on the wild (: |
OK, so I talked with @povilasv offline and the issue with RR is:
(https://kubernetes.io/blog/2018/11/07/grpc-load-balancing-on-kubernetes-without-tears/) Maybe it's right. I would then suggest using something like this: |
@bwplotka Maybe you guys could seperate it out into a different go package? As importing kedge doesn't seem reasonable 🗡️ |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
We can indeed. Let's get back to this. (: |
Hello 👋 Looks like there was no activity on this issue for last 30 days. |
Closing for now as promised, let us know if you need this to be reopened! 🤗 |
Hello 👋 Looks like there was no activity on this issue for the last two months. |
Very needed, potentially blocking #3373 Also again mentioned here https://cloud-native.slack.com/archives/CK5RSSC10/p1604923594031700 |
Hello 👋 Looks like there was no activity on this issue for the last two months. |
Still valid. |
Hello 👋 Looks like there was no activity on this issue for the last two months. |
Hello 👋 Looks like there was no activity on this issue for the last two months. |
Closing for now as promised, let us know if you need this to be reopened! 🤗 |
I think it is still interesting. |
Hello 👋 Looks like there was no activity on this issue for the last two months. |
Is this still relevant after we have endpoint group? |
Currently if someone pass domain to
--store
of via file SD without dns loopups, the target is passed to gRPC DialContext which then if A lookup gives more than one response it loadbalance. However the default seems to bepickfirst
notroundrobin
, which might be confusing for some cases, like e.g smoothing the traffic to multiple replicas of store gateways.AC:
The text was updated successfully, but these errors were encountered: