JKad

JKad - eine Java-Implementierung des Kademlia-Protokolls, zugeschnitten auf die Anforderungen akademischer Forschung

JKad ist eine an unserem Lehrstuhl in Rahmen unserer BitTorrent-Messungen entwickelte Implementierung des Kademlia-Protokolls, das für die Verteilte Hashtabelle (engl. Distributed Hash Table, DHT) im BitTorrent-Netzwerk verwendet wird. Eine DHT ist ein Peer-to-Peer (P2P)-Netzwerk, das die Funktionalität einer Hashtabelle implementiert, also es erlaubt, Schlüssel/Wert-Paare im P2P-Netzwerk zu speichern und wieder abzurufen. Den Prozess des Abfragens eines Schlüssels nennt man einen Lookup. Es existieren mehrere Kademlia-basierte DHTs, deren Implementierungen voneinander abweichen und daher zueinander inkompatibel sind. JKad ist kompatibel zur DHT des BitTorrent-Mainline-Clients, welche mit mehreren Millionen an Teilnehmern zu den meistgenutzten P2P-Netzwerken gehört.

JKad ist komplett in Java implementiert und wurde mit Hinblick auf den Einsatz im akademischen Umfeld entwickelt. JKad ist dazu gedacht, als Bibliothek in andere Softwarelösungen eingebunden zu werden, kann aber für Testzwecke auch mit Hilfe eines einfachen, mitgelieferten Kommandozeilen-Client gestartet werden. Im Vergleich zu anderen Kademlia-Bibliotheken unterscheidet sich JKad insbesondere in den folgenden Punkten:

  • Skalierbarkeit: Im Gegensatz zu üblicherweise mit Filesharing-Clients ausgelieferten Bibliotheken wurde JKad mit dem Ziel entwickelt, über lange Zeiträume eine hohe Anzahl von Lookups pro Sekunde ausführen zu können. Daher ist JKad im Hinblick auf Speichermanagement und Threadsicherheit explizit für diesen Anwendungsfall ausgelegt. Im Rahmen der an unserer Forschungsgruppe durchgeführten Messungen hat JKad diese Last über Wochen ohne Neustarts zu schultern.
  • Synchrone und asynchrone Transaktionen: Um eine einfache Anwendbarkeit zu gewährleisten ermöglicht es JKad, alle angebotenen DHT-Transaktionen (wie etwa einen Lookup, das Eintragen eines Schlüssels oder das Ausführen eines Kademlia-PING) sowohl synchron (als blockierenden Methodenaufruf) als auch asynchron (durch Übergabe einer Callback-Funktion) auszuführen. Dies erleichtert die Einbindung von JKad in eigene Projekte und umgeht typische Threading-Probleme.
  • Objektorientiertes Logging: JKad beinhaltet eine ereignisbasierte Logging-Engine, die es ermöglicht, JKad um sogenannte Logger zu erweitern. Logger bieten eine einfache Möglichkeit, beim Auftreten selbstdefinierter Ereignisse beliebige JKad-interne Informationen (etwa den aktuellen Zustand der Routing-Tabelle) an die Anwendung zu übergeben, die JKad verwendet. Hierdurch wird es möglich, auf unterschiedlichste Ereignisse zu reagieren und die Funktionsweise des Kademlia-Protokolls zu analysieren.
  • Erweiterbarkeit: JKad wurde mit Hinblick auf eine leichte Erweiterbarkeit entwickelt. Insbesondere ist es leicht möglich, die Bibliothek um neue Transaktionen (wie etwa alternative Lookup-Implementierungen) zu erweitern. 
  • Framework-Architektur: JKad wurde als Framework ausgelegt, das es ermöglicht, auch andere Kademlia-Derivate wie etwa das von Emule verwendete KAD zu unterstützen. Allerdings wird zurzeit nur die BitTorrent Mainline DHT unterstützt.

Im Rahmen unserer Forschungsarbeiten wurden zudem zwei weitere, über das übliche Kademlia-Protokoll hinaus gehende Funktionen integriert, die im Folgenden kurz beschrieben werden. Eine detaillierte Beschreibung wird nach Veröffentlichung der zugehörigen Forschungsarbeit zur Verfügung gestellt.

  • Optimierung des Lookup-Algorithmus: Der Lookup Algorithmus wurde hinsichtlich Laufzeit und Overhead optimiert. Im Vergleich etwa zum Open Source Client Transmission (V. 2.12) wurde die durchschnittliche Laufzeit eines Lookups um mehr als das 25-fache reduziert, wobei gleichzeitig die Anzahl der versendeten Pakete um etwa 15% gesenkt werden konnte.
  • Selbstoptimierung des Lookups zur Laufzeit: JKad ist in der Lage, die Parametrisierung des DHT-Lookups zur Laufzeit automatisch an die aktuell vorherrschenden Eigenschaften der DHT anzupassen. Das hierfür verwendete Verfahren beruht auf zur Laufzeit durchgeführten Simulationen und ist nicht nur auf die mitgelieferte Lookup-Implementierung, sondern auch auf Alternativ-Implementierungen anwendbar.

JKad ist inklusive Quellcode auf Anfrage unter GPL (Version 3) erhältlich.