www.wikidata.de-de.nina.az
Amazon Dynamo ist eine verteilte Hashtabelle die bei der Firma Amazon com intern genutzt wird Wie auch das Google File System ist Dynamo fur eine konkrete Anwendung optimiert die auf die Anforderungen einiger Amazon Web Services zugeschnitten ist die eine hohe Ausfallsicherheit benotigen Amazon Logo Inhaltsverzeichnis 1 Anforderungen 2 Aufbau 2 1 Consistent Hashing 2 2 Sloppy Quorum und Hinted Handoff 2 3 Vector Clocks 2 4 Anti Entropie durch Merkle Trees 2 5 Gossip basiertes Protokoll 3 DynamoDB 4 Quellen 5 EinzelnachweiseAnforderungen BearbeitenAmazon Anwendungen erwarten dass ein Speichersystem hochverfugbar und extrem ausfallsicher ist Insbesondere muss in jeder Situation gespeichert werden konnen even if disks are failing network routes are flapping or data centers are being destroyed by tornados selbst wenn Festplatten versagen Netzwerkverbindungen verruckt spielen oder Rechenzentren von Tornados zerstort werden Werner Vogels amazon com 1 Das System muss jederzeit inkrementell skalierbar sein um Belastungsspitzen abdecken zu konnen beispielsweise im Weihnachtsgeschaft Komplizierte Datenbankzugriffe werden vermieden der Zugriff erfolgt direkt uber einen Schlussel Weiterhin muss an dieser Stelle auch nicht auf Sicherheit geachtet werden da sich das System in einer freundlichen Umgebung innerhalb der Amazon Services befindet die von aussen abgeschottet ist Aufbau BearbeitenDynamo baut auf einem Netz vollstandig gleichberechtigter Rechner auf d h es gibt keine zentrale Steuerung oder Verwaltung jeder Knoten kann jede Aufgabe wahrnehmen Diese Architektur wurde gewahlt um die Skalierbarkeit des Systems zu gewahrleisten Dienste wie der Shopping Cart Service der Dienst der den Warenkorb verwaltet erwarten dass auf das Speichersystem immer schreibend zugegriffen werden kann das System hoch verfugbar ist und geringe Latenzzeiten aufweist Da die in den ACID Kriterien definierten Eigenschaften der Konsistenz und der hohen Verfugbarkeit gegensatzlich sind wurde im Gegensatz zu traditionellen Datenbanksystemen die Konsistenz zu einer eventual consistency irgendwann schliesslich konsistent aufgeweicht Eine weitere Eigenschaft war dass uberwiegend kleine weniger als 1 MB grosse Dateien in Form von key value Paaren gespeichert werden sollen Komplizierte Datenbankanfragen mussen nicht unterstutzt werden Um die gewunschten Eigenschaften zu erreichen wurde eine Reihe bereits in anderem Zusammenhang bekannter Verfahren genutzt Consistent Hashing Sloppy Quorum und Hinted Handoff Vector Clocks Anti Entropie durch Merkle Trees Gossip basiertes ProtokollConsistent Hashing Bearbeiten Hauptartikel Konsistente Hashfunktion Alle Rechner sind als Ring angeordnet zumindest logisch physikalisch ist die Vernetzung anders Aus jedem Key wird mittels MD5 ein Hashwert berechnet Jedem Knoten ist nun ein bestimmter Teil des Wertebereichs des Ergebnisses der Hashfunktion zugeordnet zu dem der jeweilige Knoten die zugehorige Datei speichert Eine bestimmte Anzahl der im Ring nachfolgenden Knoten speichern zudem eine Kopie wobei die Gesamtzahl der speichernden Knoten konfigurierbar ist Um die Ausfallsicherheit zu maximieren werden Knoten nicht nur auf unterschiedliche Rechner und Racks sondern auch verschiedene Rechenzentren verteilt nbsp Konsistentes Hashing bei Dynamo mit sechs Knoten und dreifacher Redundanz lEin Beispiel fur den Fall von insgesamt sechs Knoten mit redundanter Speicherung auf jeweils drei Knoten N 3 findet sich in nebenstehender Abbildung Da es sich um eine heterogene Systemlandschaft handelt bei der die Speicherkapazitat der eingesetzten Knotenrechner unterschiedlich sein kann und zudem manche Dateien haufiger nachgefragt werden als andere nutzt Dynamo sogenannte virtuelle Knoten Das Konzept virtueller Knoten ermoglicht dass sich auf einem physikalischen Knoten mehrere virtuelle Knoten desselben Rings befinden konnen Dies ermoglicht eine bessere Auslastung bei unterschiedlichen Speicherkapazitaten der physikalischen Knoten da durch die Gleichverteilung der Hashfunktion die Speicherauslastung fur alle Knoten gleich gross ist und so einem physischen Knoten mit hoherer Speicherkapazitat mehrere virtuelle Knoten zugeordnet werden konnen Sloppy Quorum und Hinted Handoff Bearbeiten Um die Ausfallsicherheit des Systems zu gewahrleisten wurden neben dem Parameter N der Anzahl an Knoten auf denen repliziert wird noch die Parameter R Read Lesen und W Write Schreiben eingefuhrt die ebenfalls konfigurierbar sind Diese Parameter sind so ahnlich auch schon aus Quorumsystemen bekannt Allerdings wurden sie hier soweit abgewandelt dass man von sloppy schlampig sprechen kann Diese legen fest wie viele der Knoten eine Lese oder Schreiboperation als erfolgreich melden mussen damit die Aktion als erfolgreich gilt In der Standardkonfiguration ist das Tupel N R W mit den Werten 3 2 2 belegt Dies bedeutet dass jede Datei dreimal gespeichert wird ein Lesezugriff als erfolgreich gilt sobald mindestens zwei Knoten die Datei zuruckliefern und ein Schreibzugriff als erfolgreich gilt sobald mindestens zwei Knoten den Zugriff als erfolgreich melden Die Parameter erlauben es auch einer Anwendung das System genau fur ihren Bedarf anzupassen Beispielsweise wurde eine Konfiguration von 3 1 3 dafur sorgen dass man eine Art Lesepuffer realisiert hat nur ein Knoten muss fur ein Lesezugriff antworten alle Kopien mussen immer erfolgreich geschrieben werden da N W wohingegen ein System mit W 1 fur schnellstmogliche Schreibzugriffe optimiert ist Die Konfiguration 1 1 1 wiederum realisiert einfach ein ganz normales allerdings auch nicht hoch verfugbares Dateisystem entsprechend mit Replikation auch als 2 2 2 3 3 3 usw Falls der Koordinatorknoten der Knoten in dessen Bereich der Hashwert eigentlich fallt nicht verfugbar ist greift das sogenannte Hinted Handoff Wenn im Beispiel der obigen Abbildung der Hashwert 3 und Knoten A nicht verfugbar ware so wurde die Kopie stattdessen an Knoten D weitergegeben Handoff mit dem Vermerk Hinted dass diese Datei eigentlich zu Knoten A gehort Darum speichert D diese Kopien auch in einer separaten lokalen Datenbank und fragt von Zeit zu Zeit bei A nach ob der Knoten wieder verfugbar ist Sobald dies der Fall ist werden alle hinted Kopien an A ubertragen Nach erfolgreichem Transfer kann D das hinted Objekt loschen Vector Clocks Bearbeiten Durch die Sloppy Quorum Konfiguration von 3 2 2 kann es unter Umstanden zu unterschiedlichen Versionen kommen Da Updates auch im Hintergrund weitergegeben werden durfen z B an den dritten Knoten kann es sein dass nach einem erfolgreichen Schreibzugriff der aber nur zwei Knoten erreicht hat direkt ein Lesezugriff folgt der nun moglicherweise zwei verschiedene Versionen zuruckliefert Um diesen Konflikt zu losen gibt es die sogenannten Vektoruhren auch Vector Clocks genannt die im Prinzip einfach nur Versionszahler sind Jede Datei enthalt einen Vektor aus Tupeln der Form Knoten ID Versionsnummer wobei bei einem Update jeder Knoten immer seine in der Datei enthaltene Versionsnummer um eins erhoht In dem beschriebenen Problemfall wurde nun der Koordinator beispielsweise fur denselben Knoten einmal die Version 14 und einmal Version 15 zuruckbekommen und anhand dieser Versionsnummern erkennen konnen welche Version die neueste ist Dementsprechend wurde der anfragende Client auch nur die neueste Version mit der Versionsnummer 15 zuruckgeliefert bekommen Problematisch wird es eigentlich nur wenn der eigentliche Koordinator aus irgendeinem Grund ausgefallen ist und es gleichzeitig zu parallelem Zugriff kommt Beispielsweise konnte sich folgender Ablauf ergeben Knoten A koordiniert ein Write A 1 Knoten A koordiniert ein Write A 2 Knoten A fallt aus Knoten B koordiniert ein Write A 2 B 1 Gleichzeitig koordiniert Knoten C ein Write A 2 C 1 Knoten A ist wieder verfugbar Knoten A koordiniert ein Read und bekommt die Version A 2 B 1 und die Version A 2 C 1 zuruckgeliefert In diesem Fall ist nicht entscheidbar ob die Version von B oder C die neuere ist und die Auflosung wird in die Anwendungsebene verschoben der Client erhalt beide Versionen Im Beispiel des Shopping Cart Service wurden beispielsweise beide Versionen vereinigt werden und von Knoten A die neue Version A 3 B 1 C 1 geschrieben werden Dies ist aber abhangig von der jeweiligen Anwendung Sofern eine Anwendung es vorzieht sich nicht um Fehlerauflosung zu kummern so gibt es auch einfache last write wins Strategien vorimplementiert Anti Entropie durch Merkle Trees Bearbeiten Durch das Hinted Handoff konnen weitere Probleme entstehen Beispielsweise ist folgender Ablauf moglich Knoten A fallt aus Knoten B C und D mussen neue Replikas speichern Ein Write wird von B koordiniert D markiert die Datei als Hinted Handoff Knoten D fallt aus Knoten A ist wieder verfugbar bekommt aber weil D offline ist die Kopie nicht zuruckgespielt Problem A bekommt gar nicht mit dass es eine alte Version hat und es zu dem Zeitpunkt nur N 1 Kopien gibt Um dieses Problem zu umgehen vergleicht A beim Neustart seine Kopien mit denen von B und C Um allerdings den Traffic und die Rechenbelastung moglichst gering zu halten werden dafur sogenannte Merkle Trees verwendet Merkle Trees sind Baume die in ihren Blattern Hashwerte der Dateien haben in der Wurzel einen Hash uber alle Hashs und in den Knoten dazwischen entsprechende Hashs fur den Teilbaum Dadurch mussen A und B zunachst nur den Wurzelhash austauschen und konnen dann feststellen ob ihre Kopien alle identisch sind oder nicht Falls nicht wird der Baum traversiert bis das schuldige Blatt gefunden ist Anschliessend kann entsprechend uber die Vector Clocks geschaut werden welches die neuere Version ist und diese entsprechend kopiert werden Im Fall dass analog zum Beispiel die Netzwerkverbindung zu A abreisst und A das direkt gar nicht mitbekommt wird entweder A beim nachsten Read mit Hilfe der Vector Clocks feststellen dass eine alte Version vorliegt oder im Rahmen der regelmassigen Gossipnachrichten da dort auch die Hashs der Merkle Trees ubermittelt werden Gossip basiertes Protokoll Bearbeiten Damit bei einem temporaren Ausfall eines Knotens nicht jedes Mal die gesamte Kreisstruktur neu aufgebaut werden muss gibt es die Hinted Handoffs Allerdings muss es auch moglich sein Knoten dauerhaft aus dem Netz zu entfernen oder hinzuzufugen Um dies einfach zu ermoglichen wird per Kommandozeilentool oder Browser von einem Administrator nach Login auf einem beliebigen Knoten ein Eintrag in einer entsprechenden Konfigurationsdatei vorgenommen Diese Anderung wird dann an alle anderen Knoten des Rings uber ein Gossip basiertes Protokoll kommuniziert Uber dieses Protokoll wird sowohl die Aufteilung der virtuellen Knoten auf den Rechnern als auch eine Liste der Rechner standig aktuell gehalten Ein einfaches Beispiel fur das explizite Hinzufugen von Knoten X zu Netzwerk ABCD ware dann wie folgt Schritt Aktion Tabelle von A Tabelle von B Tabelle von C Tabelle von D Tabelle von X1 Ausgangszustand ABCD ABCD ABCD ABCD X2 X wird bei A angemeldet ABCDX ABCD ABCD ABCD ABCDX3 A kommuniziert mit B ABCDX ABCDX ABCD ABCD ABCDX4 C kommuniziert mit D ABCDX ABCDX ABCD ABCD ABCDX5 B kommuniziert mit D ABCDX ABCDX ABCD ABCDX ABCDX6 A kommuniziert mit C ABCDX ABCDX ABCDX ABCDX ABCDX7 Endzustand erreicht ABCDX ABCDX ABCDX ABCDX ABCDXDie Reihenfolge bei der Kommunikation wer sich mit wem austauscht ist dabei zufallig und es muss sich nicht bei jeder Kommunikation eine Anderung ergeben im Beispiel Schritt 4 Wird ein Knoten entfernt oder hinzugefugt muss sich zwangslaufig auch die Aufteilung der virtuellen Knoten auf die physikalischen Rechner verandern wofur es mehrere Verfahren gibt 1 Die einfachste Variante davon ist im Fall einer nicht heterogenen Systemlandschaft dass auf jedem physikalischen Rechner die gleiche Anzahl an gleich grossen virtuellen Knoten liegen soll Beim Entfernen eines Knotens werden somit die betreffenden virtuellen Knoten auf zufallig ausgewahlte physikalische Knoten kopiert die weniger virtuelle Knoten als der Rest des Rings besitzen Umgekehrt ubernimmt ein neu hinzukommender Knoten virtuelle Knoten von voll ausgelasteten Knoten ebenfalls zufallig ausgewahlt DynamoDB BearbeitenSeit 2012 wird Dynamo von Amazon Web Services als Speicherservice unter dem Namen DynamoDB angeboten Der IaaS Dienst unterscheidet sich jedoch in einigen Punkten von der ursprunglichen Dynamoimplementierung Beispielsweise bietet DynamoDB ein Bigtable ahnliche Schnittstelle bei dem mehrdimensionale Schlussel auf einen Wert abbilden Damit lasst sich eine Tabellenstruktur ahnlich der einer relationalen Datenbank darstellen Quellen BearbeitenPaper zum Thema Amazon DynamoEinzelnachweise Bearbeiten a b Werner Vogels Amazon s Dynamo In allthingsdistributed com 2 Oktober 2007 abgerufen am 21 Marz 2017 Abgerufen von https de wikipedia org w index php title Amazon Dynamo amp oldid 229590062