-
Notifications
You must be signed in to change notification settings - Fork 0
/
term-project.txt
46 lines (37 loc) · 2.09 KB
/
term-project.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
The IPFS simulator is going to be single process application that simulates IPFS network under different network conditions,
simulates predefined data transfers and provides statistics on simulation.
The goal is to enable quick iterations in routing algorithm development, before thousands of full-fledged
IPFS daemons are spun (using https://github.com/ipfs/iptb).
The simulator would have configuration to specify following "starting situation":
* whether node is NATed
* percentage of "unique" content, small and big blocks
* speed of node's network up/down
* connection latency
* amount of storage available
* amount of pubsub channels, number of subscribers
* clustering with some other nodes
While running, it will be possible to specify:
* amount of interest in various blocks to go up and down
* normal/important blocks (e.g. blocks requested from browser are much more important to
retrieve than backup of some blocks). Same goes for sending unique content.
(Currently IPFS does not support blocks prioritization, so it is more of theoretical part).
Output of the simulator would have graphs of blocks traversal speed, pubsub speed, etc
Obviously this should be written in go, to facilitate thousands of goroutines that represent hosts and networks.
Execution Phase I
~~~~~~~~~~~~~~~~~
* Start N nodes, that are connected on average by C connections, with average bandwidth B.
* Populate nodes with blocks of varying size.
* Use simple routing algorithm that asks each connected node whether it has desired block
* Start simulation with scenario that H nodes want to receive blocks with different popularity.
* Print statistics with details:
- how much time taken
- how many blocks discovered, not discovered
Execution Phase II
~~~~~~~~~~~~~~~~~~
Iterative improvements on the Phase I
* improve on routing algorithm to use DHT
* use different up/down bandwidth for nodes
* add connection latency
* ability for routing algorithm to disconnect wasteful connections and establish new, supposedly useful ones
* nodes clustering support (when nodes have unlimited network between them)
* blocks transfer prioritization