Search code examples
c++performancenetworkingdistributed-computingconsensus

Will split the block into chunks with erasure coding increasing the network throughput performance


Assuming we have a network with n nodes and there is a coordinator elected that sends commands to nodes. Let's further assume that the coordinator has horrible bandwidth(upload speed) and he wants to send a large file 10 GB in nodes in o(n) assumption time.

My idea now to optimize performance is to use the erasure coding technique to split the large files into chunks and send one chunk per node so that later on, nodes communicate with each other in o(n^2) assumption time to retrieve the whole block. Hence the bandwidth is shared between validators so the leader does not need to upload huge data and limit his bandwidth and the performance of consensus. Will this incur higher throughput performance? Or I make a hole in the water?

One more advantage of using erasure coding is that if some nodes are considered malicious/byzantine nodes and refuse to communicate and send their chunks the non-faulty nodes will still be able to retrieve messages with lesser chunks with the power of erasure coding


Solution

  • Coordinate with the clients to listen to a multicast stream over your local network. Once you are sure everyone you need to receive the 10 GB file is listening, send the file as a multicast.

    The advantage is that IP multicast can send information to a group of interested listeners over a local network with a single transmission. It is and ideal solution to your problem.

    You will need to handle some form of flow control, to catch up any that lost a packet during the transfer.

    There are a couple of caveats:

    • Consumer-grade networking equipment may not support multicast.
    • Make sure your WiFi infrastructure supports multicast over WiFi. For example, Cisco Meraki supports Multicast.
    • For networks involving multiple switches, you will need to enable multicast routing.