Brunet: a remarkably great P2P library

While I was a post-doc at UCLA, I started work on a library to implement P2P protocols, which we called Brunet. Unfortunately, Brunet has never been publicized as well as it should have been. This post is an attempt to bring some attention to it.

Brunet is a Free Software (GPL licensed) library for P2P networking written in C# and developed using Mono, but it also runs on Microsoft’s .Net platform. Here are the basic features of Brunet:

  1. Network transports are abstracted as Edge objects. We have TCP, UDP and TLS/SSL transports now.
  2. Completely distributed UDP NAT traversal (TCP NAT traversal is a to-do item).
  3. Implementation of Chord/Kleinberg/Symphony type ring topology for routing.
  4. DHT implementation.
  5. Both packet based and RPC based communication primitives. New protocols
    are easy to add using one or the other of these approaches.
  6. XML-RPC bridge to allow calling or serving RPC methods with XML-RPC clients or servers. We have examples of this using standard Python.
  7. Distributed tunneling system to maintain topology in the presence of some routing difficulties (untraversable NATs, BGP outages, firewalls, etc.).

We have deployed Brunet on PlanetLab for over two years. You can see information on some of the running nodes on our node statistics page.

Brunet is used as the basis for our IPOP (IP over P2P) project. IPOP builds a virtual IP network which allows nodes to communicate even if some of them are behind firewalls or NATs (as is often the case these days).

The WOW/Grid Appliance project uses IPOP and Brunet’s DHT to produce self-managing grids for large-scale, wide-area grid computing. You can download images of the grid appliance for many virtual machines/hypervisors to try them out yourself.

We encourage outside use of any of the above projects and we welcome code contributions to Brunet. If you are interested in any of the above projects, please join our ACISP2P Google Group. You can download the Brunet code using Mercurial. You can also browse the Brunet documentation online.

Publications

:

  1. P. Oscar Boykin, Jesse S. A. Bridgewater, Joseph S. Kong, Kamen M. Lozev, Behnam A. Rezaei, Vwani P. Roychowdhury, A Symphony Conducted by Brunet, arXiv:0709.4048v1
  2. A. Ganguly, A. Agrawal, P. O. Boykin, R. J. Figueiredo, Wow: Self-Organizing Wide Area Overlay Networks Of Virtual Workstations, Journal of Grid Computing, Vol. 5, No. 2, pp. 151-172 2007. [bib]
  3. Arijit Ganguly, Abhishek Agrawal, P. Oscar Boykin and Renato Figueiredo, “IP over P2P: Enabling Self-Configuring Virtual IP Networks for Grid Computing”, In Proceedings of the 20th IEEE International Parallel and Distributed Processing Symposium (IPDPS), Rhodes Island, Greece. [ppt talk, pdf talk]
  4. Arijit Ganguly, Abhishek Agrawal, P. Oscar Boykin, Renato Figueiredo, “WOW: Self-Organizing Wide Area Overlay Networks of Virtual Workstations”, In Proceedings of the 15th IEEE International Symposium on High Performance Distributed Computing (HPDC), pages 30-41. Paris.
  5. Arijit Ganguly, David Wolinsky, P. O. Boykin, Renato Figueiredo, “Decentralized Dynamic Host Configuration in Wide-Area Overlay Networks of Virtual Workstations”. In Workshop on Large-Scale and Volatile Desktop Grids (PCGrid), 03/2007

5K (3.11 miles) in 18:32 (5:58/mile)

Since I am out of Gainesville this weekend, I could not participate in the Dog Days 5K race. Instead, I ran in the 2007 Paws For Life 5K-9 Road Race in my mother’s home town of Wake Forest, NC (google map of Wake Forest).

I had hoped to run a sub-18-minute 5K this race, but I did not make my goal. I ran 18:32, which is less than 5:58/mile, and I came in second place (the winner was at 18:02). A couple of notes about this race. First, I went out too fast. I should have ran the first mile in 5:32 according to my calculations, but I ran it in about 5:20. I ran the first 1/3 of mile at about 4:40. I think the my early error cost me in the end. Secondly, there was a very long hill in the middle (which I guess was about half a mile long). I was on track for time even at the end of the hill, but it took more out of me than I thought. At that point, I let the number two runner pass me, and decided to focus on the time. I probably should have stayed with him since running with a person can be easier than running against the clock. Lastly, I started my kick at the end a little late.

So, next race, my plan is to go out a little slower than I think I should for the first half mile or so, since I almost always go out too fast. Secondly, I want to try to find a runner that is a little faster than me, and not let him get away from me.

I’ve updated several photos to my Flickr photoset: Paws for Life 5K 2007. Here’s a humorous photo of me after the race:
me appearing to spit out my drink

PS: My Mother took the photographs. Thanks Mom!

Update 12/3/2007: I got the data out of my watch to plot my speed as a function of distance (in miles/minute, so lower is faster). You can clearly see the big hill in the middle of the race (it was about 1/2 mile) and it’s major impact on my speed.

speed vs. time plot