dapr / dapr

Dapr is a portable, event-driven, runtime for building distributed applications across cloud and edge.
https://dapr.io
Apache License 2.0
24.13k stars 1.91k forks source link

[Proposal] Use QUIC as experimental transport for internal gRPC server #6008

Open ItalyPaleAle opened 1 year ago

ItalyPaleAle commented 1 year ago

In what area(s)?

/area runtime

Describe the proposal

The internal gRPC server is used by Dapr sidecars to communicate with each other during service invocation, and it currently uses "regular" gRPC, which relies on TCP-based HTTP/2.

One possible area of improvement could be to offer support for QUIC as an additional transport layer for this channel. This, which will initially be experimental, is meant to be deployed side-by-side with the existing HTTP/2-based transport.

QUIC is now an IETF standard (RFC9000) and it's underpinning HTTP/3. It offers some really nice benefits:

POC

Here's a very rough POC demonstrating how QUIC could be used for the Dapr internal gRPC server. It works, although I have only done some very simple tests at this point (e.g. I haven't tested load-balancing across multiple instances, and I suspect that may require more work).

The POC is possible thanks to forking sssgun/grpc-quic.

Caveats

Considerations

Given the above caveats, a possibility could be to just wait for go-grpc to add support for HTTP/3 natively. This would be ideal, and it will happen, but at this point it's unclear when that will happen as it doesn't seem like it's being prioritized. If we were to move forward with offering QUIC in Dapr today, we should consider that as an experimental, preview feature for now.

dapr-bot commented 1 year ago

This issue has been automatically marked as stale because it has not had activity in the last 60 days. It will be closed in the next 7 days unless it is tagged (pinned, good first issue, help wanted or triaged/resolved) or other activity occurs. Thank you for your contributions.

dapr-bot commented 1 year ago

This issue has been automatically closed because it has not had activity in the last 67 days. If this issue is still valid, please ping a maintainer and ask them to label it as pinned, good first issue, help wanted or triaged/resolved. Thank you for your contributions.