KP's Thoughts

Data center with 1k Machines1 machine has a file of 1TBFile should be on all 999 other machinesWe want to duplicate a 1 TB file from one machine in a cluster to 999 other ones?- Machines are very close in networking, same datacenter. Good throughput across machinesCan we break up the 1 TB file?-> up to design, but we want to have the full file present on each machine before we complete.Can we assume all machines are like a fully connected graph?How long can this process take?-> Speed is a very important factor (2 network requests are our upper bound)-> Correctness (full file needs to be available)10 Gb/s -> network interfaces, optimally a Tb file would take ~ 1000 sec ---this is the upper limit, splitting across machines splits this bucket. Upper bound: 999,000 sec Machine 01 TB file forward to M101 Machine 1 Machine 2 Machine 3 forward to m102 forward to m103 Machine 0:- preprocess: optimal way to distributepayloads + forwards to N machines such thatall 1000 get the message in some depth DExample: if we use N = 3, logbase3(1000) ~ 73 Gb/s -> 3000 sec21000 sec Daemon If file_received == 1TB file: write(gather bytes)metadata.pop()forward(File, meatadata[-1]) File: FileContent: Metadata: [machines] Machine 0 knows that there's 999 machines-> // n -> // nuntil there's only 1 machine leftpush leaf node to metadata[999, 777, 333, 200]for metadata in splits: forward(File, 3 machines it starts off with) [999, 777, 333, 200] [999, 777, 333, 200] [999, 777, 333, 200] What if machine 2 crashes? Machine 2 comes back online after some timeMachine 2 comes back online, checks if it has the File?If it doesn't it will ask Machine 0 for the fileAlways:Forward the message normally to its children, and children (if they have the package) can discard the message?-> Hash of file contents? So that we make sure we don't discard any updates?---Can we ask any other machine? Maybe?