Implementation of Pharos Network Coordinates

 
Overview of Pharos
  • Network coordinates (NC) system is an efficient mechanism for Internet latency prediction with scalable measurements. Vivaldi coordinates is the representative distributed NC system, and it is deployed in many well-known Internet systems, such as Bamboo DHT (Distributed hash table), Stream-Based Overlay Network (SBON) and Azureus BitTorrent.
  • Pharos is a fully decentralized NC system. All nodes in Pharos form two levels of overlays, namely base overlay for long link prediction, and local cluster overlay for short link prediction. Vivaldi algorithm is applied to both base overlay and local cluster. As a result, each Pharos node has two sets of coordinates. The coordinates calculated in the base overlay, which is named global NC, is used for the global scale, and the coordinates calculated in the corresponding local cluster, which is named local NC, covers a smaller range of distance.
  • To form the local cluster, Pharos uses a method similar to binning and chooses some nodes called anchors to help node clustering. This method only requires a one-time measurement (with possible periodic refreshes) by the client to a small, fixed set of anchors. Any stable nodes which are able to response ICMP ping message can serve as anchor, such as the existing DNS servers.
  • The experimental results show that Pharos greatly outperforms Vivaldi in Internet distance prediction without adding any significant overhead.
Papers of Pharos
  • Yang Chen, Yongqiang Xiong, Xiaohui Shi, Jiwen Zhu, Beixing Deng, Xing Li. Pharos: Accurate and Decentralized Network Coordinate System. To appear in IET Communications. [PDF] (Journal Version)
  • Yang Chen, Yongqiang Xiong, Xiaohui Shi, Beixing Deng, Xing Li. Pharos: A Decentralized and Hierarchical Network Coordinate System for Internet Distance Pediction. In Proceeding of the 50th Annual IEEE Global Telecommunications Conference (GLOBECOM'07), Washington, D.C., USA, Nov. 2007. [PDF] (Conference Version)
Implementation
  • Our implement of Pharos is based on Pyxida library.
  • In our implementation, we build two layer NC architecture for Pharos, they are global layer NC and cluster layer NC. In each layer, NC is computed with Vivaldi. The hosts around the world will be divided into three groups: American Cluster, Asian-Pacific Cluster and European Cluster. At the beginning, host will ping different anchors to find its cluster.
Download
  • Download PlanetLab_Pharos Alpha (only for Linux) Here
Usage
  • Till now we just give an Alfa test version of Pharos for Linux. You can download PlanetLab_Pharos.zip and extract it to your user's directory (for example:if your user name is Jim, extract the files to /home/Jim/ ).

    Go to the user's home directory. Use the following command to run Pharos.

    sudo python pharos/pharos.py

    Make sure that you have installed Java runtime enviroment (sun jre) 1.5 or above.

 
Tools
  • Here are some small tools to get network coordinates of hosts or estimate rtt between two hosts in Pharos NC system. The tools are written by Python. We use Python xmlrpc lib to communicate with remote host. (Here to download)

    Here are some example of tool usage:

    Get the global NC: python getPharosBaseNC.py planetlab1.cs.ucla.edu

    Get the local NC: python getPharosClusterNC.py planetlab1.cs.ucla.edu

    Estimate rtt between hosts: python pharosEstimateRtt.py planetlab1.cs.ucla.edu planetlab1.cs.purdue.edu