Nemo is a performance-based overlay multicast protocol for streaming applications. Nemo achieves high delivery ratio without sacrificing end-to-end latency or incurring additional costs. Based on two simple techniques:
Multicast is an efficient mechanism to support group communication applications such as audio and video conferencing, multi-party games and content distribution. It decouples the size of the receiver set from the amount of state kept at any single node and potentially avoids redundant communication in the network. The limited deployment of IP Multicast, a best effort network layer multicast protocol, has led to considerable interest in alternate approaches that rely only on end-systems. In an end-system multicast approach participating peers organize themselves into an overlay topology for data delivery. Each edge in this topology corresponds to a unicast path between two end-systems or peers in the underlying Internet. All multicast-related functionality is implemented at the peers instead of at routers, and the goal of the multicast protocol is to construct and maintain an efficient overlay for data transmission.
Among the proposed end system multicast protocols, tree-based systems have proven to be highly scalable and efficient in terms of physical link stress, state and control overhead, and end-to-end latency. Conventional tree structures, however, are highly dependent on the reliability of non-leaf nodes. The high degree of transiency of end systems is one of the main challenges for these architectures, as they are built out of autonomous, unpredictable end systems. Measurement studies of widely used application-layer/peer-to-peer systems have reported median session times ranging from an hour to a minute. Achieving high delivery ratios under these conditions, without incurring additional costs or sacrificing end-to-end latencies is the goal of this project.
Nemo is a latency-optimized, multicast protocol that builds a structurally resilient overlay by exploiting the alternative paths introduced through co-leaders. In Nemo, participating peers are organized into clusters based on network proximity, with every peer being a member of a cluster at the lowest layer. Each of these clusters selects a leader that becomes a member of the immediately higher layer. In part to avoid dependency on a single node, every cluster leader recruits a number of co-leaders to form its crew. The process is repeated, with all peers in a layer being grouped into clusters, crew members selected, and leaders promoted to participate in the next-higher layer. Thus peers can lead more than one cluster in successive layers of this logical hierarchy. Co-leaders improve the resilience of the multicast group by avoiding dependencies on single nodes and providing alternative paths for data forwarding.
If you use maven to manage your project, you won't need to download Nemo by itself as maven will automatically take care for that. Just add the following dependency to your pom.xml.
<project> ... <dependencies> ... <dependency> <groupId>edu.nwu</groupId> <artifactId>nemo</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> </dependencies> ... </project>
If you are using eclipse to develop your project, you might want instruct maven to fetch the sources for autocompletion as well:
mvn -Declipse.downloadSources=true eclipse:eclipse