Softwarearchitektur verstehen und entscheiden

Aaron KreisÜber mich
Architekturstile

Peer to Peer

Knoten tauschen Daten direkt untereinander aus

Die Idee und ihr Nutzen

Eine Versicherung muss eine neue Version ihrer Beratungssoftware auf Tausende Laptops ihrer Mitarbeitenden bringen. Normalerweise lädt jeder Laptop die komplette Datei von einem zentralen Server der Versicherung. Stattdessen erhält jeder Laptop die Datei in Stücken. Hat ein Laptop ein Stück erhalten, kann er es direkt an andere Laptops weitergeben. Jeder Laptop ist dann zugleich Empfänger und Lieferant, und der zentrale Server muss nicht mehr jede Kopie selbst ausliefern. Dieses Verfahren heißt Peer to Peer, auf Deutsch etwa „von Gleichem zu Gleichem“. Gemeint ist, dass ein Laptop ein Stück direkt an einen anderen, gleichgestellten Laptop gibt.

Bausteine: Freigegebene Quelle: hält die neue Version; Laptop A: empfängt und liefert; Laptop B: empfängt und liefert; Laptop C: empfängt und liefert; Laptop D: empfängt und liefert. Verbindungen: Freigegebene Quelle → Laptop A; Freigegebene Quelle → Laptop B; Laptop A — Laptop B (tauschen Stücke); Laptop C — Laptop D; Laptop A — Laptop C; Laptop B — Laptop D. Jeder Laptop gibt Stücke, die er schon hat, an andere Laptops weiter; die freigegebene Quelle liefert nur noch einen Teil der Stücke.

Wie funktioniert es?

Die freigegebene Quelle, also der zentrale Server der Versicherung, stellt die neue Softwareversion bereit. Die große Datei ist in viele kleine Stücke zerlegt. Laptop A lädt die Stücke 1 und 2 von der freigegebenen Quelle, Laptop B die Stücke 2 und 3. Danach tauschen die Laptops Stücke untereinander. Laptop A gibt Stück 1 direkt an Laptop C weiter, und Laptop B gibt Stück 3 an Laptop D weiter. Laptop C fordert Stück 2 bei Laptop B an und erhält es von Laptop B. Das ist ein möglicher Ablauf: Wer welches Stück von wem erhält, ergibt sich daraus, welche Laptops gerade erreichbar sind und das Stück schon haben. Für jedes Stück gibt es eine Prüfsumme, eine aus dem Inhalt berechnete Kennzahl. Ändert sich auch nur ein Zeichen im Stück, ergibt sich eine andere Prüfsumme. Laptop C holt die Liste der erwarteten Prüfsummen von der freigegebenen Quelle und nicht vom liefernden Laptop, denn ein Laptop, der ein verändertes Stück liefert, könnte auch die passende Prüfsumme dazu liefern. Laptop C prüft jedes Stück gegen diese Liste. Wenn alle Stücke vorliegen, prüft Laptop C vor der Installation die digitale Signatur der ganzen Version. Die Signatur belegt, dass die Version von der Versicherung stammt. Stimmt die Prüfsumme eines Stücks nicht, verwirft Laptop C das veränderte Stück und lädt es bei einem anderen Laptop neu.

Die beteiligten Geräte heißen Peers, auf Deutsch etwa Gleichgestellte. Hier sind die Laptops A, B, C und D die Peers. Jeder Peer kann Daten empfangen und anbieten. Je nach Verfahren übernehmen einzelne Peers zusätzliche Rollen. Ein Beispiel ist ein Peer, der als Einstiegspunkt für neue Peers dient. Damit die Peers einander finden, kennt ein neuer Peer anfangs nur wenige feste Adressen, die Einstiegspunkte. Über die Einstiegspunkte erfährt der neue Peer die Adressen weiterer Peers. Viele Netze nutzen dafür eine verteilte Hashtabelle. Das ist ein Verzeichnis, das festhält, welcher Peer welche Daten hat, und das nicht auf einem Server liegt, sondern in Stücken auf alle Peers verteilt ist. Ein Peer lädt verschiedene Stücke gleichzeitig von mehreren anderen Peers. Hat er ein Stück erhalten und geprüft, bietet er es seinerseits anderen Peers an.

Die digitale Signatur belegt die Herkunft nur, wenn Laptop C die Signatur mit dem echten Schlüssel der Versicherung prüft, etwa mit einem Schlüssel, den die IT-Abteilung bei der Einrichtung des Laptops hinterlegt hat. Dass ein Stück von einem Kollegenlaptop kommt, macht es nicht vertrauenswürdig. Ist gerade kein eingeschalteter Peer im Besitz eines bestimmten Stücks, muss der Empfänger warten oder das Stück von der freigegebenen Quelle laden. Fertige Stücke ändern sich nicht mehr; beim Weitergeben muss deshalb kein Peer Änderungen abgleichen. Anders ist es, wenn Peers Daten abgleichen sollen, die sich ständig ändern. Ein Beispiel sind gemeinsam bearbeitete Dateien. Dann braucht das Netz zusätzlich Regeln für den Fall, dass zwei Peers dieselbe Datei gleichzeitig verschieden geändert haben. Ob die Verteilung durch zusätzliche Peers wirklich schneller wird, hängt davon ab, wie schnell die Leitungen der Peers sind, ob das Netz direkte Verbindungen zwischen Geräten erlaubt und ob die Peers tatsächlich Stücke weitergeben.

Peer-to-Peer: Laptops verteilen die signierte Softwareversion untereinander

Beteiligte: Freigegebene Quelle: signierte Version und Prüfsummenliste; Laptop A: Peer: lädt und gibt weiter; Laptop B: Peer: lädt und gibt weiter; Laptop C: Peer: lädt und gibt weiter; Laptop D: Peer: lädt und gibt weiter. Ablauf: 1. Laptop A lädt die Stücke 1 und 2 von der freigegebenen Quelle. 2. Laptop B lädt die Stücke 2 und 3 von der freigegebenen Quelle. 3. Laptop A gibt Stück 1 direkt an Laptop C weiter. 4. Laptop B gibt Stück 3 an Laptop D weiter. 5. Laptop C fordert Stück 2 bei Laptop B an. 6. Laptop B schickt Stück 2 an Laptop C. Wer welches Stück von wem erhält, ergibt sich daraus, welche Laptops gerade erreichbar sind und das Stück schon haben. 7. Laptop C holt die Prüfsummenliste von der freigegebenen Quelle, nicht vom liefernden Laptop. 8. Laptop C prüft jedes Stück gegen die Prüfsummenliste. Wenn alle Stücke vorliegen, prüft Laptop C die Signatur der ganzen Version. 9. Stimmt die Prüfsumme eines Stücks nicht, verwirft Laptop C das veränderte Stück und lädt es bei einem anderen Laptop neu.

Wann ist es sinnvoll und wann nicht?

Peer to Peer lohnt sich

  • Große Dateien sollen an sehr viele Empfänger verteilt werden. Beispiele sind Softwareaktualisierungen und Videodateien. Beim üblichen Aufbau muss der zentrale Server jede Kopie einzeln versenden. Bei einer Datei von 2 Gigabyte und 5.000 Laptops sind das 10.000 Gigabyte, die alle durch die Leitung dieses einen Servers gehen. Der Server und seine Leitung werden zum Engpass, und die Verteilung dauert lange. Mit Peer to Peer schickt die freigegebene Quelle jedes Stück nur an wenige Laptops, und die übrigen Laptops erhalten es untereinander.
  • Die Zahl der Empfänger wächst. Beim üblichen Aufbau muss der zentrale Server für jeden weiteren Laptop eine weitere ganze Kopie versenden. Mit Peer to Peer sendet jeder Laptop, der Stücke erhalten hat, selbst Stücke an andere Laptops. Mit jedem weiteren Laptop kommt so auch ein weiterer Lieferant hinzu, und die Last verteilt sich auf mehr Leitungen.
  • Die Verteilung soll weiterlaufen, auch wenn einzelne Teilnehmer oder der zentrale Server ausfallen. Fällt beim üblichen Aufbau der zentrale Server aus, kann kein Laptop mehr weiterladen. Mit Peer to Peer laden die Laptops fehlende Stücke weiter von anderen Laptops, sofern diese Laptops die Stücke schon haben und die Prüfsummenliste bereits vorliegt.
  • Eine Anwendung soll ganz ohne zentralen Server funktionieren. Manchmal möchte niemand einen Server betreiben, oder ein zentraler Server könnte abgeschaltet oder angegriffen werden. Ein Beispiel ist der Abgleich von Ordnern zwischen den eigenen Geräten einer Person. Ohne Peer to Peer läuft jeder Abgleich über einen Server, den jemand betreiben muss. Mit Peer to Peer gleichen die Geräte die Ordner direkt untereinander ab.

Peer to Peer ist nicht das Richtige

  • Ein zentraler Server muss Regeln durchsetzen, Daten sichern und Zugriffsrechte prüfen. So ist es bei typischen Geschäftsanwendungen wie der Schadenbearbeitung. Mit Peer to Peer hätte jeder Laptop eigene Kopien der Schadendaten und gäbe sie direkt an andere Laptops weiter, ohne dass ein zentraler Server die Zugriffsrechte prüft. Stattdessen baut das Entwicklungsteam die Anwendung nach Client Server: Alle Geräte beziehen ihre Daten vom zentralen Server, und nur der zentrale Server ändert und speichert sie. So prüft der zentrale Server jede Anfrage auf Zugriffsrechte, und die Datensicherung erfasst alle Daten an einem Ort.
  • Das Netz lässt keine direkten Verbindungen zwischen den Geräten zu. Das verhindern zum Beispiel Heimrouter oder Firewalls, also Schutzprogramme, die Netzverbindungen filtern. Die Laptops könnten dann keine Stücke tauschen und würden doch die ganze Datei von der freigegebenen Quelle laden. Stattdessen laden alle Laptops die Datei gleich vom zentralen Server und brauchen kein zusätzliches Programm, das Stücke mit anderen Laptops tauscht. Reicht die Leitung des zentralen Servers dafür nicht aus, legt die Versicherung die Datei zusätzlich auf Server an mehreren Standorten.
  • Nur wenige Empfänger brauchen kleine Dateien. Dann laden alle Empfänger die Dateien direkt vom zentralen Server. Bei 50 Laptops und einer Datei von 20 Megabyte geht insgesamt nur 1 Gigabyte durch die Leitung des Servers. Die Laptops brauchen kein Programm, das andere Peers findet und Stücke prüft.
  • Die Versicherung kann die neue Version auf mehrere Server an verschiedenen Standorten legen, die alle dieselbe Datei bereithalten. Dann lädt jeder Laptop die ganze Datei vom Server seines Standorts, und jeder Server liefert nur die Kopien für seinen Standort. Die Laptops brauchen kein Programm, das Stücke tauscht, und das Netzteam muss keine direkten Verbindungen zwischen Laptops erlauben.

Nachteile und typische Fehler

Auf jedem Laptop muss ein Exemplar desselben Programms laufen, das andere Peers findet, Stücke anbietet und jedes empfangene Stück prüft, weil das Stück von einem beliebigen anderen Laptop stammen kann. Weil alle Laptops dasselbe Programm verwenden, verstehen sie dieselben Anfragen und können mit jedem anderen Laptop Stücke tauschen. Dieses Programm belegt einen Teil der Leitung und der Rechenzeit des Laptops. Ohne zentralen Server gibt es keinen Rechner, der weiß, welcher Peer welche Daten hat, und keinen, der bei widersprüchlichen Änderungen entscheidet; welcher Peer welche Daten hat, halten die Peers deshalb gemeinsam in der verteilten Hashtabelle fest, und für widersprüchliche Änderungen braucht das Netz eigene Regeln. Die Laptops sind teils im Büro, teils von zu Hause aus mit dem Firmennetz verbunden. Firewalls in Firmennetzen und die Adressumsetzung in Heimroutern, bei der mehrere Geräte sich eine öffentliche Adresse teilen, verhindern oft direkte Verbindungen zwischen Peers. Das Netzteam muss solche Verbindungen gezielt erlauben. Die Versicherung muss außerdem die freigegebene Quelle mit der Prüfsummenliste und den Schlüssel für die Signatur betreiben und schützen. Wie stark die freigegebene Quelle tatsächlich entlastet wird, lässt sich vorab kaum sagen, weil es auch davon abhängt, wie viele Laptops gleichzeitig eingeschaltet sind.

Typische Fehler und woran man sie erkennt:

  • Prüfsummen vom falschen Absender: Laptop C übernimmt die erwartete Prüfsumme für Stück 2 von Laptop B, der auch Stück 2 liefert. Liefert Laptop B ein verändertes Stück 2, schickt Laptop B die passende Prüfsumme gleich mit, und das veränderte Stück besteht die Prüfung. Laptop C bietet das veränderte Stück dann selbst anderen Laptops an. Erst die Prüfung der Signatur vor der Installation zeigt, dass die Version verändert ist. Erkennbar ist das daran, dass Prüfsummen nie bei der freigegebenen Quelle abgefragt werden.
  • Nur Herunterladen: Einzelne Peers laden nur herunter, ohne selbst etwas weiterzugeben. Laptop D erhält zum Beispiel Stück 3, bietet es aber keinem anderen Laptop an. Die Last bleibt bei der freigegebenen Quelle und wenigen Laptops. Erkennbar ist das an Laptops, die viel empfangen und nichts senden.
  • Nicht erreichbares Stück: Die Laptops sind so eingestellt, dass sie fehlende Stücke nur bei anderen Laptops anfordern und nie bei der freigegebenen Quelle. Laptops werden ständig ein- und ausgeschaltet. Sind gerade alle Laptops mit einem bestimmten Stück ausgeschaltet, erhält kein anderer Laptop dieses Stück, und die Verteilung bleibt kurz vor dem Ende stehen. Erkennbar ist das an vielen Laptops, denen dasselbe letzte Stück fehlt.
  • Gesperrte Direktverbindungen: Die Firewall des Firmennetzes oder der Heimrouter verhindert direkte Verbindungen zwischen Laptops. Alle Laptops laden dann doch die ganze Datei von der freigegebenen Quelle. Bei 5.000 Laptops und einer Datei von 2 Gigabyte gehen wieder 10.000 Gigabyte durch die Leitung der freigegebenen Quelle. Erkennbar ist das an fehlgeschlagenen Verbindungsversuchen zwischen Peers und einer unverändert hohen Last an der freigegebenen Quelle.
  • Ungeprüfte Signatur: Ein Laptop prüft die Prüfsummen, aber nicht die Signatur der ganzen Version, oder er hat den Schlüssel der Versicherung nie geprüft. Ein Angreifer legt eine gefälschte Version mit passender Prüfsummenliste auf die freigegebene Quelle. Der Laptop findet keine falsche Prüfsumme und installiert die gefälschte Version. Erkennbar ist das an Installationen ohne Eintrag einer Signaturprüfung im Protokoll.

Weiterführend

Verwandte Ansätze

  • Eventual Consistency: Änderungen erreichen die Peers zeitversetzt, und erst nach einer Weile haben alle denselben Stand.
  • Consistent Hashing: ein Verfahren, auf dem viele verteilte Verzeichnisse aufbauen, um festzulegen, welcher Peer welche Einträge verwaltet.
  • Shared Nothing Architecture: beschreibt ebenfalls Rechner ohne gemeinsamen Speicher. Daraus folgt aber nicht, dass die Rechner gleichberechtigt direkt miteinander Daten tauschen.

Werkzeuge und Umsetzungen

  • libp2p: Bibliothek für Netze aus gleichberechtigten Teilnehmern mit Suche nach Peers, Verbindungsaufbau und Verschlüsselung.
  • IPFS: verteiltes System, das Dateien über ihren Inhalt statt über den Namen eines Servers findet und abruft.
  • Syncthing: gleicht Ordner direkt zwischen den eigenen Geräten ab, ohne zentralen Server für die Daten.
  • libtorrent: Bibliothek für das Verteilverfahren BitTorrent, bei dem Dateien in Stücken zwischen Peers getauscht werden.

Quellen