gzz-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz] PEG: Available overlays


From: Hermanni Hyytiälä
Subject: [Gzz] PEG: Available overlays
Date: 28 Jul 2003 16:06:59 +0300

==========================================================================
PEG available_overlays--hemppah: Available overlays
==========================================================================

:Authors:  Hermanni Hyytiälä
:Date-Created: 2003-06-18
:Last-Modified: $Date: 2003/07/28 09:10:55 $
:Revision: $Revision: 1.29 $
:Status:   Incomplete

.. :Stakeholders:
.. :Scope:    Major|Minor|Trivial|Cosmetic
.. :Type:     META|Policy|Architecture|Interface|Implementation

.. Affect-PEGs:

The purpose of this PEG document is to give a short overview of existing
structured
P2P overlays which have an open source implementation. 

The reason for creating this PEG document is that the current
implementation 
of GISP [5]_ seems to have (too) many obvious security exploits.
Therefore we need 
to examine other available structured overlays which have an open source
implementation in hope for finding a more mature P2P platform. 

The list of implemented overlays is as of July 2003.

Issues
======

None.

Terminology
===========

This section briefly covers the terminology used in this document. 

Abstractions
    The following text for the abstraction definitions is taken from 
    `Towards a Common API for Structured P2P Overlays`_ by Frank Dabek
et al.

.. _DHT: 

    DHT
        The DHT abstraction provides the same functionality as a 
        traditional hashtable, by storing the mapping between a
        key and a value. This interface implements a simple store
        and retrieve functionality, where the value is always stored
        at the live overlay node(s) to which the key is mapped by
        the KBR layer. Values can be objects of any type. For ex-ample,
the DHT 
        implemented as part of the DHash inter-face in CFS stores 
        and retrieves single disk blocks by their content-hashed keys.

.. _DOLR:

    DOLR
        The DOLR abstraction provides a decentralized direc-tory
        service. Each object replica (or endpoint) has an
        objectID and may be placed anywhere within the system.
        Applications announce the presence of endpoints by pub-lishing
        their locations. A client message addressed with
        a particular objectID will be delivered to a nearby end-point
        with this name. Note that the underlying distributed
        directory can be implemented by annotating trees associ-ated
        with each objectID; other implementations are pos-sible.
        One might ask why DOLR is not implemented on
        top of a DHT, with data pointers stored as values; this is
        not possible because a DOLR routes messages to the near-est
        available endpoint providing a locality property not
        supported by DHTs. An integral part of this process is the
        maintenance of the distributed directory during changes
        to the underlying nodes or links.

Redundancy
    What techniques are used for redundancy     

Fault tolerance against hostile nodes
    What techniques are used against hostile nodes    

Activity of development
    How actively a software is being developed.

Developer
    Who is developing a software.

Language
    What programming language is used to program a software + additional
    software packages which are required.

License
    Under what license a software is distributed.

Other notes
    Other miscellaneous notes.

Implemented overlays
====================

In this section we list the structured P2P overlays which have an open
source
implementation. Please notice that features described for each
implementation 
are deliberately kept as short as possible. For more depth information 
the overlays we suggest reading the original publications.

Chord [1]_
----------

Abstraction
    DHT_/DOLR_

Redundancy
    Replication, backup links.

Fault tolerance against hostile nodes
    (undefined)

Activity of development
    Quite high.

    According to the Chord [1]_ website:

        At this point no official release for 
        Chord is available, but you are welcome to check out the latest
version 
        from the CVS repository. This version is experimental, under
active 
        development, and may frequently be broken.

Developer
    MIT (research community)

Language
    C++ (GCC 2.95, not 2.96, although 3.x should work)

Additional requirements
    * Self-certifying File System (http://sfs.net)
    * autoconf, automake, etc.
    * Berkeley DB 3.X 

License
    BSD-like

Other notes
    No support for network locality- do not take network latencies into
account
    when building neighbor links.

    Includes a Chord [1]_ simulator.
    

Tapestry [2]_
--------------

Abstraction
    DOLR_

Redundancy
    According to `Tapestry: A Resilient Global-scale Overlay for Service
    Deployment`_:

        Tapestry is highly resilient under dynamic conditions,
        providing a near optimal success rate for requests
        under high churn rates, and quicly recovering from
        massive membership events in under a minute.
    
    According to the Tapestry [2]_ website:

        Tapestry offers fault-resilient mechanisms for both object 
        location and point to point message delivery.  For object
location, 
        Tapestry generates a small number of deterministic and
independent 
        GUIDs for each object.  An object server publishes an object's 
        availability on all of its GUIDs, and a client issues Tapestry
locate 
        requests for all of the object GUIDs in parallel.  This greatly 
        increases availability under fault conditions, while improving 
        general performance and reducing performance variability.  For
point 
        to point message delivery, Tapestry provides pre-calculated
backup 
        routes at each overlay hop.  UDP soft-state beacons measure
up-to-date 
        link conditions. Tapestry uses such information and simple
fault-avoidance 
        protocols to route messages around failures, providing
successful 
        delivery with high probability if a path between the endpoints
exists.

    
Fault tolerance against hostile nodes
    * PKI is used while creating node identifiers
    * MACs are used to maintain integrity of overlay traffic
    * Monitoring system for maintaining neighbor links

Activity of development
    Active.

    Tapestry  1.0 (April 2002)

    According to the Tapestry [2]_ website::

        Tapestry Version 1.0 contains the following functionality:

        * Basic Tapestry Java code running on the SEDA stage-driven
event model
        * Tapestry node insertion
              o Using a static configuration built from configuration
files
              o Using the dynamic iterative insertion of single nodes to
existing 
                Tapestry networks
        * Support for multiple backup links per route entry
        * Object location
              o Object publication with optional tags
              o Object location with optional tags
              o TapestryFailure messages returned upon the failure of a 
                TapestryLocateMsg
        * Message routing
              o Routing messages to an exact GUID match
              o Routing messages to the node closest in ID to a given
GUID
        * An initial self-optimizing componentthat monitors link
conditions to 
          decide when to use backup routes   
      
      
     According to the Tapestry [2]_ website, Tapestry Version 2.0
contains the 
     following new functionality::

        * Algorithms for adapting to changing network conditions
              o API messages allowing the application to tell the local
node 
                to enter or leave a Tapestry overlay
              o Recovery algorithms to large scale failures in the
network
              o A resilient parallel insertion algorithm that supported
large flash 
               crowds adding themselves to the overlay
        * Patchwork: a soft-state network monitoring component that uses
          soft-state beacons to monitor link quality to a node's
neighbors. 
          As link qualities change, nodes can be replaced by backups in
the 
          routing table in order to reduce packet loss in overlay
routing.
        * A distributed testing framework: nodes can set themselves to
be 
          configured as FullTestMember nodes, and await explicit control
          instructions from a central FullTestDriver node. Instructions
are 
          sent via FullTestMsg messages, and include join, leave,
publish, 
          routeToObject and routeToNode operations. The results and
resulting 
          latencies are returned to the FullTestDriver.
        * Interweave: a simple file sharing application
        * Shuttle: a decentralized instant messaging protocol 

Developer
    University of Berkeley (research community)

Language
    Java (Sun JDK 1.3 or a compatible Java Development and Runtime
environment).
    The Java interface libraries for the BerkeleyDB database 

Additional requirements
    * The Cryptix JCE library (included with the 2.0 release)
    * UNIX make program
    * The Java interface libraries for the BerkeleyDB database 
      (included with the 2.0 release) 
    
License
    BSD-like

Other notes
    Support for network locality when building neighbor links.

    Why Oceanstore_ uses Tapestry [2]_? 
    See http://www.oceanstore.org/info/whytapestry.html 

Kademlia [3]_
-------------

Abstraction
    DHT_

Redundancy
    No simulation or test results published (not even in the original
publication)
    In *theory*, however, the "free-choice" feature
    gives peers freedom to adapt different conditions. However, the
    author of SharkyPy says:
    
        Kademlia has (in my taste, that's why I decided to drop it) a
bad
        hole which makes it's use in remote querying for packets pretty
useless:
        When you have key->value mappings, which have an equal key, in even in
        semi-large networks it gets very unprobable that you get all mappings,
        the more hosts there are, the less probable it is, and the more
mappings
        there are, the less probable it is too. I've tried to remedy this in a
        later implementation, at the cost of lookup speed, but have never
        managed to get all entries when the network had over 100 nodes. (the
        later implementation is based on my own server-framework and uses no
        threads, btw.) This made it unusable for me, as basically I basically
        had to change the lookup-algorithm to query all nodes (back to
gnutella,
        then...), to get all answers. And that's what is important in the
        network I designed it for.


Fault tolerance against hostile nodes
    Nothing said, expect the "free-choice" feature. 

Activity of development
    Java development discontinued, C++ version
    is under development.

Developer
    New York University (research community).

Language
    Java (Sun JDK 1.3 or a compatible Java Development and Runtime
environment (?))

License
    GPL (Java), "Free for non-commercial use" (C++)

Other notes
    The implementation of the Java version is discontinued. 

Pastry [4]_
-----------

Abstraction
    DHT_

Redundancy
   Backup links.

Fault tolerance against hostile nodes
   According to the release notes of 1.2, "Security support does not
exist in 
    this release. Therefore, the  software should only be run in trusted
    environments. Future releases will include security."

Activity of development
    Active
    
    Current release is 1.3 (July 23, 2003), no release notes available
for 1.3 yet    

Developer
    Microsoft Research and Rice University (research community)

Language
    Java (requires a Java runtime version 1.4), C# (not known)

License
    BSD-like license (Java), MSR-EULA (C#)

Other notes
    Support for network locality - Pastry [4]_ actively replicates the
objects and 
    places them at random locations in the network. Result: When
locating
    nearby object it might require the client to route to a distant
replica of 
    the object.
    
    According to the Pastry [4]_ website:

        Future releases will address efficiency, 
        security, interoperability and will provide additional 
        application components like a generic distributed 
        hash table implementation, replica management, 
        caching, etc.

GISP [5]_
---------

Abstraction
    DHT_/DOLR_

Redundancy
    Chord [1]_-like (since GISP uses similar routing tables as Chord)

Fault tolerance against hostile nodes
    Based on our own initial experiments: the fault tolerance
    is relatively weak - no specific techiques used.

Activity of development
    Quite active.

Developer
    Daishi Kato (software engineering community)

Language
    Java (requires a Java runtime version 1.4)

License
    Sun Project JXTA License Version 1.1

Other notes
    Uses 10x more cache as Chord [1]_ for routing table.

    Includes a GISP [5]_ simulator.

Circle [6]_
-----------

Abstraction
    DHT_

Redundancy
    Not-known

Fault tolerance against hostile nodes
    According to Info-Anarchy Wiki:

        Problems are: The DHT implementation is 
        vulnerable to denial of service attacks.    

Activity of development
    Active, the current version is 0.35 (30 May 2003)

Developer
    Paul Harrison (software engineering community)

Language
    Python (version 2.0 or higher, 2.2 preferred, GTK+-2 and PyGTK) 

License
    GPL

Other notes
    Uses MD5 hashes for generating IDs.
    

Khashmir [7]_
-------------

Abstraction
    DHT_ (Kademlia [3]_ algorithm)

Redundancy
    Not known

Fault tolerance against hostile nodes
    According to the authors:

        Note that Khashmir currently isn't very 
        attack resistant.

Activity of development
    Not active
    
    The current version is "3 - Alpha" (2002-09-02)

Developer
    Four developers (software engineering community)

Language
    Python

License
    MIT License

Other notes
    (none)

MLDonkey [8]_
-------------

Abstraction
    DHT_ (Kademlia [3]_ algorithm)

    (MLDonkey [8]_ is compatible with Overnet_, and Overnet claims that
it does 
    Kademlia [3]_ and multisource downloading)

Redundancy
    Not known (we can imagine that redundancy is relatively high since
MLDonkey
    is widely deplyed)

Fault tolerance against hostile nodes
    Not known (we can imagine that fault tolerance is relatively high
since MLDonkey
    is widely deplyed)

Activity of development
    Very active

    The current version is 2.5-3 (May 26th 2003) 

Developer
    12 developers (according to Savannah's project page, software
engineering 
    community)

Language
    Objective-Caml (a compiler, not a interpreter)

License
    GPL

Other notes
    Supported P2P networks include eDonkey, Overnet, Bittorrent,
    Gnutella (Bearshare, Limewire,etc),  Gnutella2  (Shareaza),  
    Fasttrack  (Kazaa, Imesh, Grobster), Soulseek  (beta),  
    Direct-Connect  (alpha), and  Opennap  (alpha).
 
    Networks can be enabled/disabled.

    Widely deployed in real life.

    Overnet is not a free specification ,i.e., change control is in the
Overnet 
    company's hands.

    According to the `MLDonkey CVS source server`_ (check this_ too),
MLDonkey [8]_ 
    uses MD4 hashes for Overnet/EDonkey2K IDs::
     
        peer: an overnet peer in the following format:
        md4: the peer md4
        ip:  the peer ip
        int16: the peer port 
        int8: the peer kind/uptime/last seen ?
    
    Original Overnet uses MD5 (and 2^128 space) for nodeIDs and data
items
    (http://www.overnet.com/documentation/how.html, 
    http://bitzi.com/help/locallinks)

SharkyPy [9]_
-------------

Abstraction
    DHT_ (Kademlia [3]_ algorithm)

Redundancy
    According to the author:

        "It is being used in real code located at Sprachenzentrum der
Universität des 
        Saarlandes (http://www.szsb.uni-saarland.de/tandem), and has
been running for 
        several months now. Stable."

Fault tolerance against hostile nodes
    No specific techniques used: "it should work as is"

Activity of development
    The current version is 0.2b3 (16th February 2003)

    According to the post_ to the `python-list`_ by the author (posted
04 Feb 2003)::

        SharkyPy 0.2
        ------------

        SharkyPy is a library for creating a distributed hash table
using
        Python. It uses the Kademlia-Protocol
(http://kademlia.scs.cs.nyu.edu/)
        over XMLRPC.

        In constrast to alternatives like khashmir it does not need
twisted or
        any other library, and can even run without a persistence
backend (as
        long as the daemon is kept running). Persistence backends
currently only
        exist for MySQL.

        SharkyPy has been coded to only run with Python 2.3 at the
moment, as it
        uses some new features such as enumerate, etc. But it should
only be a
        matter of time to make it backwards compatible.

        - easily integrated into any program.
        - uses a standard protocol which should also be able to run over
a
          HTTP-proxy (this is still being worked on).
        - loosely based on the Kademlia Java reference implementation,
taking
          features like concurrent node queries into account.
        - completely implemented without external dependencies.

        URL: http://www.heim-d.de/~heikowu/SharkyPy
        License: LGPL (the source doesn't state this yet)
        Categories: Networking

        Heiko Wundram (address@hidden or address@hidden)

        PS: Still looking for co-developers... :)
    
    and here's an another message_ (posted 17 Feb 2003)::

        The third public beta of SharkyPy has just now been released.
This beta
        adds new functionality to SharkyPy in the following areas:

        1) Refactoring/Cleaning of most classes, and introduction of
           Borg-patterns to reduce overhead.
        2) Integration of (public-key) signatures into DHT-values, by
using
           Andrew M. Kuchlings PyCrypto package.
        3) Protocol specification is transmitted with every RPC-call, so
that
           future protocols won't break the program.
        4) Several other buxfixes/changes not listed here.

        This version should be considered even more beta than the
previous
        versions, as most of the functionality has only been tested over
a
        limited timespan (half a day). It works for me(tm). And it works
solely
        when using a version of Python 2.3.

        The feature consolidation process will start, when several other
        amendments have been made to the source.

        A stable version 0.2 will be released in about two weeks.
Anybody who is
        interested in trying out SharkyPy so far is encouraged to do so,
and
        should send any bugreports to me.

Developer
    Sprachenzentrum der Universität des Saarlandes / Heiko Wundram
(research community)

Language
    Python

License
    LGPL

Other notes
    According to the author of SharkyPy:
    
        This implementation is heavily based on threads, which makes it
        pretty resource-intensive on the computer it is running on. I never
        intended it to serve more than 30-40 clients, so this didn't matter to
        me. When you use it as a P2P network backend, things will certainly
look
        different.

Changes
=======

While reviewing the different features of open source implementations of
structured P2P overlays we can conclude that Tapestry seems to be the
most
mature currently available. Specifically, other implementations
lack of features w.r.t. redundancy and fault tolerance that the Tapestry
implementation currently supports. Other reasons for choosing Tapestry
in order of 
importance:

- The license
- The activity of development
- The implementation language

As a result, we recommend using Tapestry's open source implementation
with Storm.
For detailed changes and information about using Tapestry with Storm,
please
see the `storm_with_tapestry--hemppah` PEG document.
 

.. [1] http://www.pdos.lcs.mit.edu/chord/
.. [2] http://www.cs.berkeley.edu/~ravenben/tapestry/
.. [3] http://kademlia.scs.cs.nyu.edu
.. [4] http://research.microsoft.com/~antr/Pastry/
.. [5] http://gisp.jxta.org/
.. [6] http://thecircle.org.au/
.. [7] http://khashmir.sourceforge.net/ 
.. [8] http://www.nongnu.org/mldonkey/ 
.. [9] http://www.heim-d.uni-sb.de/~heikowu/SharkyPy/

.. _`Towards a Common API for Structured P2P Overlays`:
http://www.cs.berkeley.edu/~ravenben/publications/pdf/apis.pdf
.. _`Tapestry: A Resilient Global-scale Overlay for Service Deployment`:
http://www.cs.berkeley.edu/~ravenben/publications/pdf/tapestry_jsac.pdf
.. _Overnet: http://www.overnet.com
.. _Oceanstore: http://www.oceanstore.org
.. _`MLDonkey CVS source server`:
http://savannah.nongnu.org/cgi-bin/viewcvs/mldonkey/mldonkey/docs/overnet.txt?rev=1.1&content-type=text/vnd.viewcvs-markup
.. _this:
http://savannah.nongnu.org/cgi-bin/viewcvs/mldonkey/mldonkey/src/networks/donkey/donkeyOvernet.ml?rev=1.4&content-type=text/vnd.viewcvs-markup
.. _post:
http://mail.python.org/pipermail/python-list/2003-February/143876.html
.. _`python-list`: http://mail.python.org/mailman/listinfo/python-list
.. _message:
http://mail.python.org/pipermail/python-list/2003-February/148394.html





reply via email to

[Prev in Thread] Current Thread [Next in Thread]