Tuesday, November 25, 2008

Some Thoughts On My Graduation Project

So .... well, now it's high time to prepare for my graduation, and I know I still have a lot to learn.

My graduation project is basically a P2P file sharing system based entirely on a DHT, so it will be completely decentralized, unlike most existing systems which use a hybrid approach, for instance, recent versions of bittorrent and eMule.

My partner Wilson Huang and I are assigned to do some kind of "application level" development, according to our mentor, so it is not required to implement low level functionalities like DHT and file transferring support, theorically. But in practice, it is not so easy to find appropriate libraries that support such functionalities, while staying unbloated. Complete systems like Vuze (formally Azureus) and Limewire are great P2P applications with DHT support, but they are far too feature-rich for us to adopt, on the other hand, the other implementations of DHT are either mainly for research purposes or not production-ready, which results in an annoying problem.

Finally we find the Mojito DHT, the DHT implementation of Limewire, which is based on the kademlia algorithm. It seems quite independent from other modules of the Limewire system, and better documented than most others. So all right, we will give it a shoot.

Considering the file transfer protocol, there were two appealing choices, bittorrent and ed2k. Both of them have solid implementations but require a server, which should not exist in our system. So we decided to design and implement our own protocol, using the bittorrent protocol and a simple bittorrent client named snark as reference.

We are going to implement the system in Java. Of course I am not a big fan of the java language, but choosing a language is not only about the language itself, but also about its libraries and the team's familiarity with it. Nevertheless, the good news is that I could plug in some clojure code anytime I want to ...... or not, simply for everyone's sake? ;)

No comments: