4 ms·
In theory, there are incremental paths to achieve that objective, while serving clients all the way along. 1. Define a P2P ready data model and protocol (whic
by gritzko 8y ago
In theory, there are incremental paths to achieve that objective, while serving clients all the way along.
1. Define a P2P ready data model and protocol (which they have, Merkle forest and everything)
2. Run a single server/cluster, make a very lightweight client library for that
3. Expand the server to a makeshift CDN (start simple, e.g. rsync like mirrors)
4. Federate the CDN (still in a hierarchical fashion, so you always know whom you are talking to). Also, look for peers on the local subnet (broadcast is simple).
5. Expand that to a friend-of-a-friend network, use PEX like peer finding (PEX is shockingly simple https://en.m.wikipedia.org/wiki/Peer_exchange https://en.m.wikipedia.org/wiki/Peer_exchange)
6. Go full P2P, talk to strangers on the Net, use DHT or anything.
The only trick is to start with a data model that can go all the way to (6). So backward compatibility/ installed base issues do not stop you at earlier stages. Think globally, act locally.
The dangerous thing is
deploying an untested complex codebase to serve the most hardcore use case for live customers on Day#1. That may not work. Because even all these shockingly simple steps will turn quite long and tedious in practice. There will be "issues". Advancing one step a year is quite impressive if done under the full load.