This PR implements a new distributed Quic client which supports message chunking in order to implement a fair usage of network resources between competing processes.
Each process has its own message queue where messages are submitted. The congestion_control_worker implements a round robin strategy to process messages from all existing Environments/Processes.
On the Quic server side chunks are collected and sent messages are reconstructed.
This is still a WIP version and I still have some open questions.
How to better manage quinn::Connection? Previous version of the distributed client managed node to node connections in its own task (future). Now I had an idea to lazy initialize the connection once the guest tries to send a message, but the problem is since the host call just forwards the message into a queue we must check for connection issues during round robin chunking. This can be problematic since we don't want to suspend the algorithm to wait for re-connecting.
How do we dropping the Sender once the process is dead? Currently there is no way to notify anything outside of the Environment trait that a process has finished its execution.
Do we process Quic server responses? Previous version of the client supported request/response message communication. We never finished this discussion the Process::send has no guaranties about message reaching its destination. So we can just implement pushing out chunks without any confirmation. Otherwise we would need a separate task on the client side to receive responses from the server.
This PR implements a new distributed Quic client which supports message chunking in order to implement a fair usage of network resources between competing processes.
Each process has its own message queue where messages are submitted. The
congestion_control_worker
implements a round robin strategy to process messages from all existing Environments/Processes.On the Quic server side chunks are collected and sent messages are reconstructed.
This is still a WIP version and I still have some open questions.
quinn::Connection
? Previous version of the distributed client managed node to node connections in its own task (future). Now I had an idea to lazy initialize the connection once the guest tries to send a message, but the problem is since the host call just forwards the message into a queue we must check for connection issues during round robin chunking. This can be problematic since we don't want to suspend the algorithm to wait for re-connecting.Sender
once the process is dead? Currently there is no way to notify anything outside of theEnvironment
trait that a process has finished its execution.Process::send
has no guaranties about message reaching its destination. So we can just implement pushing out chunks without any confirmation. Otherwise we would need a separate task on the client side to receive responses from the server.Tasks TODO:
quinn::Connection
Sender
)