Verteilte Datenbanksysteme 101
Oder verteilte Datenbanken - was bedeutet die FK " Web-Skala " eigentlich?
Verteilte Datenbanksysteme sind komplexe Lebewesen und in verschiedenen Geschmacksrichtungen erhältlich. Wenn ich mich an der Universität mit den Tiefen meiner schwer in Erinnerung gebliebenen Studien befasse, werde ich versuchen, einige der wichtigsten technischen Probleme beim Aufbau eines verteilten Datenbanksystems zu erklären.
Zunächst einige Begriffe
ACID-Eigenschaften (Atomicity, Consistency, Isolation and Durability): Dies sind die wichtigsten Invarianten, die erzwungen werden müssen, damit eine Transaktion zuverlässig durchgeführt werden kann, ohne dass unerwünschte Nebenwirkungen auftreten.
Atomicity setzt voraus , dass die Transaktion vollständig oder ein Rollback vollständig durchgeführt wurde. Teilweise abgeschlossene Transaktionen sollten niemals sichtbar sein, und das System muss so aufgebaut sein, dass dies verhindert wird.
Konsistenz erfordert, dass eine Transaktion niemals Invarianten (wie deklarative referenzielle Integrität) verletzt, die vom Datenbankschema garantiert werden. Wenn beispielsweise ein Fremdschlüssel vorhanden ist, sollte es nicht möglich sein, einen untergeordneten Datensatz einzufügen, der einem nicht vorhandenen übergeordneten Element entspricht.
Die Isolation erfordert, dass sich Transaktionen nicht gegenseitig stören. Das System sollte die gleichen Ergebnisse garantieren, wenn die Transaktionen parallel oder nacheinander ausgeführt werden. In der Praxis erlauben die meisten RDBMS-Produkte Modi, die die Isolierung gegen die Leistung abwägen.
Für die Dauerhaftigkeit ist es erforderlich, dass die Transaktion nach dem Festschreiben in einem dauerhaften Speicher verbleibt, der robust gegenüber Hardware- oder Softwarefehlern ist.
Im Folgenden werden einige der technischen Hürden erläutert, die diese Anforderungen für verteilte Systeme darstellen.
Shared Disk Architecture: Eine Architektur, in der alle Verarbeitungsknoten in einem Cluster auf den gesamten Speicher zugreifen können. Dies kann einen zentralen Engpass für den Datenzugriff darstellen. Ein Beispiel für ein Shared-Disk-System ist Oracle RAC oder Exadata .
Shared Nothing-Architektur: Eine Architektur, in der Verarbeitungsknoten in einem Cluster über einen lokalen Speicher verfügen, der für andere Clusterknoten nicht sichtbar ist. Beispiele für Shared-Nothing-Systeme sind Teradata und Netezza .
Shared Memory Architecture: Eine Architektur, in der mehrere CPUs (oder Knoten) auf einen gemeinsam genutzten Speicherpool zugreifen können. Die meisten modernen Server sind vom Typ Shared Memory. Shared Memory erleichtert bestimmte Vorgänge wie Caches oder atomare Synchronisationsprimitive, die auf verteilten Systemen viel schwieriger durchzuführen sind.
Synchronisation: Ein Oberbegriff, der verschiedene Methoden beschreibt, um den konsistenten Zugriff auf eine gemeinsam genutzte Ressource durch mehrere Prozesse oder Threads sicherzustellen. Dies ist auf verteilten Systemen viel schwieriger als auf gemeinsam genutzten Speichersystemen, obwohl einige Netzwerkarchitekturen (z. B. BYNET von Teradata) Synchronisationsprimitive im Netzwerkprotokoll hatten. Die Synchronisierung kann auch mit einem erheblichen Overhead verbunden sein.
Semi-Join: Ein Grundelement, das zum Verbinden von Daten verwendet wird, die sich auf zwei verschiedenen Knoten eines verteilten Systems befinden. Im Wesentlichen besteht es aus genügend Informationen zu den zu verbindenden Zeilen, die gebündelt und von einem Knoten an den anderen weitergeleitet werden, um die Verbindung aufzulösen. Bei großen Abfragen kann dies zu erheblichem Netzwerkverkehr führen.
Eventual Consistency: Ein Begriff, der zur Beschreibung der Transaktionssemantik verwendet wird, bei der die sofortige Aktualisierung (Konsistenz bei Lesevorgängen) aller Knoten eines verteilten Systems für die Leistung (und damit für einen höheren Transaktionsdurchsatz) bei Schreibvorgängen abgewogen wird. Eventuelle Konsistenz ist ein Nebeneffekt der Verwendung von Quorum Replication als Leistungsoptimierung zur Beschleunigung von Transaktions-Commits in verteilten Datenbanken, in denen mehrere Kopien von Daten auf separaten Knoten gespeichert sind.
Lamports Algorithmus: Ein Algorithmus zum Implementieren des gegenseitigen Ausschlusses (Synchronisation) zwischen Systemen ohne gemeinsamen Speicher. Normalerweise erfordert ein gegenseitiger Ausschluss innerhalb eines Systems eine atomare Lese-Vergleich-Schreib- oder ähnliche Anweisung eines Typs, der normalerweise nur auf einem gemeinsam genutzten Speichersystem praktikabel ist. Andere verteilte Synchronisationsalgorithmen existieren, aber Lamports war einer der ersten und ist der bekannteste. Wie die meisten verteilten Synchronisationsmechanismen hängt der Lamport-Algorithmus stark von der genauen Zeitsteuerung und Taktsynchronisation zwischen Clusterknoten ab.
Two Phase Commit (2PC): Eine Familie von Protokollen, die sicherstellen, dass Datenbankaktualisierungen, an denen mehrere physische Systeme beteiligt sind, konsistent festgeschrieben oder zurückgesetzt werden. Unabhängig davon, ob 2PC innerhalb eines Systems oder über mehrere Systeme hinweg über einen Transaktionsmanager verwendet wird, ist der Aufwand erheblich.
In einem zweiphasigen Festschreibungsprotokoll fordert der Transaktionsmanager die beteiligten Knoten auf, die Transaktion so fortzusetzen, dass sie garantieren kann, dass sie festgeschrieben wird, und signalisiert dann diesen Status. Wenn alle Knoten einen "Happy" -Status zurückgegeben haben, werden die Knoten zum Festschreiben aufgefordert. Die Transaktion wird weiterhin als offen betrachtet, bis alle Knoten eine Antwort senden, die angibt, dass das Festschreiben abgeschlossen ist. Wenn ein Knoten ausfällt, bevor signalisiert wird, dass der Festschreibevorgang abgeschlossen ist, fragt der Transaktionsmanager den Knoten erneut ab, wenn er wieder hochgefahren wird, bis er eine positive Antwort erhält, die angibt, dass die Transaktion festgeschrieben wurde.
Multi-Version Concurrency Control (MVCC): Verwaltung von Konflikten durch Schreiben neuer Versionen der Daten an einen anderen Speicherort und Anzeigen der alten Version der Daten durch andere Transaktionen, bis die neue Version festgeschrieben ist. Dies reduziert Datenbankkonflikte auf Kosten von zusätzlichem Schreibverkehr, um die neue Version zu schreiben und die alte Version dann als veraltet zu markieren.
Wahlalgorithmus: Verteilte Systeme, an denen mehrere Knoten beteiligt sind, sind von Natur aus weniger zuverlässig als ein einzelnes System, da es mehr Fehlermodi gibt. In vielen Fällen ist ein Mechanismus erforderlich, damit Cluster-Systeme den Ausfall eines Knotens beheben können. Wahlalgorithmen sind eine Klasse von Algorithmen, die zum Auswählen eines Leiters zum Koordinieren einer verteilten Berechnung in Situationen verwendet werden, in denen der Leiterknoten nicht zu 100% bestimmt oder zuverlässig ist.
Horizontale Partitionierung: Eine Tabelle kann durch ihren Schlüssel auf mehrere Knoten oder Speicherdatenträger aufgeteilt werden. Auf diese Weise kann ein großes Datenvolumen in kleinere Blöcke aufgeteilt und auf die Speicherknoten verteilt werden.
Sharding: Ein Datensatz kann in einer Architektur ohne gemeinsame Nutzung horizontal auf mehrere physische Knoten aufgeteilt sein. Wenn diese Partitionierung nicht transparent ist (dh der Client muss das Partitionsschema kennen und herausfinden, welcher Knoten explizit abgefragt werden soll), spricht man von Sharding. Einige Systeme (z. B. Teradata) teilen Daten auf Knoten auf, der Standort ist jedoch für den Client transparent. Der Begriff wird normalerweise nicht in Verbindung mit dieser Art von System verwendet.
Konsistentes Hashing: Ein Algorithmus zum Zuweisen von Daten zu Partitionen basierend auf dem Schlüssel. Es zeichnet sich durch eine gleichmäßige Verteilung der Hash-Schlüssel und die Fähigkeit aus, die Anzahl der Eimer effizient zu erweitern oder zu reduzieren. Diese Attribute sind nützlich, um Daten zu partitionieren oder Daten über einen Cluster von Knoten zu laden, wobei sich die Größe dynamisch ändern kann, wenn Knoten zum Cluster hinzugefügt oder daraus entfernt werden (möglicherweise aufgrund eines Fehlers).
Multi-Master-Replikation: Eine Technik, mit der Schreibvorgänge über mehrere Knoten in einem Cluster auf die anderen Knoten repliziert werden können. Diese Technik erleichtert die Skalierung, indem ermöglicht wird, dass einige Tabellen zwischen Servern partitioniert oder aufgeteilt werden und andere im gesamten Cluster synchronisiert werden. Schreibvorgänge müssen im Gegensatz zu einem Quorum auf alle Knoten repliziert werden, sodass Transaktions-Commits in einer replizierten Multi-Master-Architektur teurer sind als in einem replizierten Quorum-System.
Nicht blockierender Switch: Ein Netzwerk-Switch, der interne Hardware-Parallelität verwendet, um einen Durchsatz zu erzielen, der proportional zur Anzahl der Ports ohne interne Engpässe ist. Eine naive Implementierung kann einen Crossbar-Mechanismus verwenden, der jedoch eine O (N ^ 2) -Komplexität für N Ports aufweist und sich auf kleinere Switches beschränkt. Größere Switches können eine komplexere interne Topologie verwenden, die als nicht blockierender Minimal-Spanning-Switch bezeichnet wird, um eine lineare Durchsatzskalierung zu erzielen, ohne dass O (N ^ 2) -Hardware erforderlich ist.
Wie schwierig kann es sein, ein verteiltes DBMS zu erstellen?
Verschiedene technische Herausforderungen erschweren dies in der Praxis. Abgesehen von der zusätzlichen Komplexität beim Aufbau eines verteilten Systems muss der Architekt eines verteilten DBMS einige knifflige technische Probleme bewältigen.
Atomarität auf verteilten Systemen: Wenn die von einer Transaktion aktualisierten Daten auf mehrere Knoten verteilt sind, muss das Festschreiben / Zurücksetzen der Knoten koordiniert werden. Dies erhöht den Aufwand für Shared-Nothing-Systeme erheblich. Auf Systemen mit gemeinsam genutzten Datenträgern ist dies weniger problematisch, da der gesamte Speicher für alle Knoten sichtbar ist, sodass ein einzelner Knoten das Festschreiben koordinieren kann.
Konsistenz auf verteilten Systemen: Um das oben genannte Fremdschlüsselbeispiel zu verwenden, muss das System in der Lage sein, einen konsistenten Status zu bewerten. Wenn sich beispielsweise das übergeordnete und das untergeordnete Element einer Fremdschlüsselbeziehung auf verschiedenen Knoten befinden könnten, ist eine Art verteilter Sperrmechanismus erforderlich, um sicherzustellen, dass veraltete Informationen nicht zur Validierung der Transaktion verwendet werden. Wenn dies nicht erzwungen wird, können Sie beispielsweise eine Race-Bedingung haben, bei der der Elternteil gelöscht wird, nachdem sein Vorhandensein überprüft wurde, bevor das Einfügen des Kindes zugelassen wird.
Die verzögerte Durchsetzung von Einschränkungen (dh das Warten bis zur Bestätigung der DRI) erfordert, dass die Sperre für die Dauer der Transaktion aufrechterhalten wird. Diese Art der verteilten Sperrung ist mit einem erheblichen Mehraufwand verbunden.
Wenn mehrere Kopien von Daten gespeichert sind (dies kann auf Systemen ohne gemeinsame Nutzung erforderlich sein, um unnötigen Netzwerkverkehr durch Semi-Joins zu vermeiden), müssen alle Kopien der Daten aktualisiert werden.
Isolation auf verteilten Systemen: Wenn sich die in einer Transaktion betroffenen Daten auf mehreren Systemknoten befinden, müssen die Sperren und die Version (falls MVCC verwendet wird) auf den Knoten synchronisiert werden. Um die Serialisierbarkeit von Vorgängen zu gewährleisten, insbesondere auf Shared-Nothing-Architekturen, auf denen redundante Kopien von Daten gespeichert werden können, ist ein verteilter Synchronisationsmechanismus wie Lamports Algorithmus erforderlich, der auch einen erheblichen Overhead im Netzwerkverkehr mit sich bringt.
Haltbarkeit auf verteilten Systemen: Auf einem gemeinsam genutzten Festplattensystem ist das Problem der Haltbarkeit im Wesentlichen dasselbe wie bei einem System mit gemeinsam genutztem Speicher, mit der Ausnahme, dass verteilte Synchronisationsprotokolle weiterhin für mehrere Knoten erforderlich sind. Das DBMS muss Journal-Schreibvorgänge in das Protokoll schreiben und die Daten konsistent ausschreiben. Auf einem System ohne gemeinsame Nutzung können mehrere Kopien der Daten oder Teile der Daten auf verschiedenen Knoten gespeichert sein. Ein zweiphasiges Festschreibungsprotokoll ist erforderlich, um sicherzustellen, dass die Festschreibung über die Knoten hinweg korrekt erfolgt. Dies verursacht ebenfalls einen erheblichen Mehraufwand.
Auf einem System ohne gemeinsame Nutzung kann der Verlust eines Knotens bedeuten, dass dem System keine Daten zur Verfügung stehen. Um dies zu vermeiden, können die Daten auf mehrere Knoten repliziert werden. Konsistenz in dieser Situation bedeutet, dass die Daten auf alle Knoten repliziert werden müssen, auf denen sie sich normalerweise befinden. Dies kann zu einem erheblichen Mehraufwand beim Schreiben führen.
Eine in NoSQL-Systemen häufig durchgeführte Optimierung ist die Verwendung der Quorum-Replikation und der eventuellen Konsistenz, um eine träge Replikation der Daten zu ermöglichen und gleichzeitig ein gewisses Maß an Ausfallsicherheit der Daten zu gewährleisten, indem vor dem Melden der Transaktion als festgeschrieben in ein Quorum geschrieben wird. Die Daten werden dann träge auf die anderen Knoten repliziert, auf denen sich Kopien der Daten befinden.
Beachten Sie, dass "eventuelle Konsistenz" ein wichtiger Kompromiss in Bezug auf die Konsistenz ist, der möglicherweise nicht akzeptabel ist, wenn die Daten konsistent angezeigt werden müssen, sobald die Transaktion festgeschrieben ist. Beispielsweise sollte bei einer Finanzanwendung ein aktualisierter Saldo sofort verfügbar sein.
Shared-Disk-Systeme
Bei einem System mit gemeinsam genutzten Festplatten haben alle Knoten Zugriff auf den gesamten Speicher. Somit ist die Berechnung ortsunabhängig. Viele DBMS-Plattformen können auch in diesem Modus arbeiten - Oracle RAC ist ein Beispiel für eine solche Architektur.
Shared Disk-Systeme können erheblich skaliert werden, da sie eine M: M-Beziehung zwischen Speicherknoten und Verarbeitungsknoten unterstützen können. Ein SAN kann mehrere Controller haben und mehrere Server können die Datenbank ausführen. Diese Architekturen haben einen Switch als zentralen Engpass, aber Crossbar-Switches ermöglichen diesem Switch eine große Bandbreite. Ein Teil der Verarbeitung kann auf die Speicherknoten ausgelagert werden (wie im Fall von Oracle Exadata), wodurch der Datenverkehr auf der Speicherbandbreite verringert werden kann.
Obwohl der Switch theoretisch einen Engpass darstellt, bedeutet die verfügbare Bandbreite, dass Architekturen mit gemeinsam genutzten Festplatten sehr effektiv auf große Transaktionsvolumina skaliert werden können. Die meisten gängigen DBMS-Architekturen verwenden diesen Ansatz, da er eine ausreichende Skalierbarkeit und hohe Zuverlässigkeit bietet. Bei einer redundanten Speicherarchitektur wie Fibre Channel gibt es keinen einzigen Fehlerpunkt, da zwischen einem Verarbeitungsknoten und einem Speicherknoten mindestens zwei Pfade bestehen.
Shared-Nothing-Systeme
Shared-nothing-Systeme sind Systeme, bei denen zumindest ein Teil der Daten lokal auf einem Knoten gespeichert und für andere Knoten nicht direkt sichtbar ist. Dies beseitigt den Engpass eines zentralen Switch, sodass die Datenbank (zumindest theoretisch) mit der Anzahl der Knoten skaliert werden kann. Durch die horizontale Partitionierung können die Daten auf mehrere Knoten aufgeteilt werden. Dies kann für den Client transparent sein oder nicht (siehe oben unter Sharding).
Da die Daten von Natur aus verteilt sind, sind für eine Abfrage möglicherweise Daten von mehr als einem Knoten erforderlich. Wenn ein Join Daten von verschiedenen Knoten benötigt, wird eine Semi-Join-Operation verwendet, um genügend Daten zu übertragen, um den Join von einem Knoten auf einen anderen zu unterstützen. Dies kann zu einem hohen Datenaufkommen im Netzwerk führen. Daher kann die Optimierung der Datenverteilung einen großen Unterschied für die Abfrageleistung bedeuten.
Oft werden Daten über Knoten eines Shared-Nothing-Systems repliziert, um die Notwendigkeit von Semi-Joins zu verringern. Dies funktioniert auf Data Warehouse-Appliances recht gut, da die Dimensionen in der Regel um viele Größenordnungen kleiner sind als die Faktentabellen und problemlos über Knoten hinweg repliziert werden können. Sie werden in der Regel auch in Stapeln geladen, sodass der Replikationsaufwand geringer ist als bei einer Transaktionsanwendung.
Die inhärente Parallelität einer Shared-Nothing-Architektur macht sie für die Art von Table-Scan / Aggregate-Abfragen, die für ein Data-Warehouse charakteristisch sind, gut geeignet. Diese Art von Operation kann nahezu linear mit der Anzahl der Verarbeitungsknoten skaliert werden. Große Verknüpfungen über Knoten hinweg verursachen in der Regel einen höheren Aufwand, da die Semi-Join-Vorgänge viel Netzwerkverkehr generieren können.
Das Verschieben großer Datenmengen ist weniger nützlich für Transaktionsverarbeitungsanwendungen, bei denen der Aufwand für mehrere Aktualisierungen diese Art von Architektur weniger attraktiv macht als bei einer gemeinsam genutzten Festplatte. Daher wird diese Art von Architektur in Data-Warehouse-Anwendungen häufig nicht verwendet.
Sharding, Quorum-Replikation und mögliche Konsistenz
Die Quorum-Replikation ist eine Einrichtung, bei der ein DBMS Daten für eine hohe Verfügbarkeit repliziert. Dies ist nützlich für Systeme, die auf billigerer Standardhardware ohne integrierte Hochverfügbarkeitsfunktionen wie einem SAN arbeiten sollen. Bei diesem Systemtyp werden die Daten für Leseleistung und redundanten Speicher auf mehrere Speicherknoten repliziert, um das System gegen Hardwareausfälle eines Knotens resistent zu machen.
Die Replikation von Schreibvorgängen an alle Knoten ist jedoch O (M x N) für M Knoten und N Schreibvorgänge. Dies verteuert Schreibvorgänge, wenn der Schreibvorgang auf alle Knoten repliziert werden muss, bevor eine Transaktion festgeschrieben werden darf. Die Quorum-Replikation ist ein Kompromiss, mit dem Schreibvorgänge sofort auf eine Teilmenge der Knoten repliziert und dann von einer Hintergrundaufgabe träge auf die anderen Knoten geschrieben werden können. Schreibvorgänge können schneller festgeschrieben werden, wobei ein gewisses Maß an Redundanz gewährleistet wird, indem sichergestellt wird, dass sie auf eine minimale Teilmenge (Quorum) von Knoten repliziert werden, bevor die Transaktion als festgeschrieben an den Client gemeldet wird.
Das bedeutet, dass beim Ablesen von Knoten außerhalb des Quorums veraltete Versionen der Daten angezeigt werden, bis der Hintergrundprozess das Schreiben von Daten auf die restlichen Knoten abgeschlossen hat. Die Semantik ist als "Endgültige Konsistenz" bekannt und kann je nach den Anforderungen Ihrer Anwendung akzeptabel oder nicht akzeptabel sein, bedeutet jedoch, dass Transaktions-Commits bei der Ressourcennutzung näher an O (1) als an O (n) liegen.
Beim Sharding muss der Client über die Partitionierung von Daten in den Datenbanken informiert sein. Dabei wird häufig ein Algorithmus verwendet, der als "konsistentes Hashing" bezeichnet wird. In einer Sharded-Datenbank hat der Client den Schlüssel, um zu bestimmen, an welchen Server im Cluster die Abfrage gesendet werden soll. Da die Anforderungen auf die Knoten im Cluster verteilt sind, gibt es keinen Engpass mit einem einzelnen Abfragekoordinatorknoten.
Mit diesen Techniken kann eine Datenbank nahezu linear skaliert werden, indem dem Cluster Knoten hinzugefügt werden. Theoretisch ist eine Quorum-Replikation nur erforderlich, wenn das zugrunde liegende Speichermedium als unzuverlässig angesehen werden soll. Dies ist nützlich, wenn Commodity-Server verwendet werden sollen, ist jedoch von geringerem Wert, wenn der zugrunde liegende Speichermechanismus über ein eigenes Hochverfügbarkeitsschema verfügt (z. B. ein SAN mit gespiegelten Controllern und Mehrwegekonnektivität zu den Hosts).
Beispielsweise implementiert Googles BigTable die Quorum-Replikation nicht selbst, obwohl es sich in GFS befindet, einem Cluster-Dateisystem, das die Quorum-Replikation verwendet. BigTable (oder ein anderes Shared-Nothing-System) könnte ein zuverlässiges Speichersystem mit mehreren Controllern verwenden und die Daten auf die Controller verteilen. Ein paralleler Zugriff würde dann durch Partitionierung der Daten erreicht.
Zurück zu RDBMS-Plattformen
Es gibt keinen inhärenten Grund, warum diese Techniken nicht mit einem RDBMS verwendet werden könnten. Das Sperr- und Versionsmanagement wäre auf einem solchen System jedoch recht komplex, und jeder Markt für ein solches System dürfte ziemlich spezialisiert sein. Keine der gängigen RDBMS-Plattformen verwendet die Quorum-Replikation, und mir ist kein RDBMS-Produkt bekannt (zumindest keines mit einer signifikanten Akzeptanz), das dies tut.
Shared-Disk- und Shared-Nothing-Systeme können auf sehr große Workloads skaliert werden. Beispielsweise kann Oracle RAC 63 Verarbeitungsknoten (die selbst große SMP-Maschinen sein können) und eine beliebige Anzahl von Speichercontrollern im SAN unterstützen. Ein IBM Sysplex (ein Cluster aus zSeries-Mainframes) kann mehrere Mainframes (jeweils mit einer beträchtlichen Verarbeitungsleistung und einer eigenen E / A-Bandbreite) und mehrere SAN-Controller unterstützen. Diese Architekturen können sehr große Transaktionsvolumina mit ACID-Semantik unterstützen, setzen jedoch einen zuverlässigen Speicher voraus. Teradata, Netezza und andere Anbieter stellen leistungsstarke Analyseplattformen auf der Basis von Shared-Nothing-Designs her, die sich für extrem große Datenmengen eignen.
Bisher wird der Markt für billige, aber hochvolumige ACID-RDBMS-Plattformen von MySQL dominiert, das Sharding und Multi-Master-Replikation unterstützt. MySQL verwendet keine Quorum-Replikation, um den Schreibdurchsatz zu optimieren. Daher sind Transaktions-Commits teurer als auf einem NoSQL-System. Sharding ermöglicht sehr hohe Lesedurchsätze (z. B. verwendet Facebook MySQL in großem Umfang), sodass sich diese Art von Architektur gut auf leselastige Workloads skalieren lässt.
Eine interessante Debatte
BigTable ist eine Shared-Nothing-Architektur (im Wesentlichen ein verteiltes Schlüssel-Wert-Paar), auf die Michael Hausenblas weiter unten hinweist . Meine ursprüngliche Evaluierung umfasste die MapReduce-Engine, die nicht Teil von BigTable ist, aber normalerweise in Verbindung mit den gängigsten Implementierungen (z. B. Hadoop / HBase und das MapReduce-Framework von Google) verwendet wird.
Wenn Sie diese Architektur mit Teradata vergleichen, das eine physische Affinität zwischen Speicher und Verarbeitung aufweist (dh die Knoten verfügen über einen lokalen Speicher und nicht über ein gemeinsam genutztes SAN), könnten Sie argumentieren, dass BigTable / MapReduce über das global sichtbare parallele Speichersystem eine gemeinsam genutzte Festplattenarchitektur ist.
Der Verarbeitungsdurchsatz eines MapReduce-Systems wie Hadoop wird durch die Bandbreite eines nicht blockierenden Netzwerkschalters eingeschränkt. 1 Nicht blockierende Switches können jedoch aufgrund der Parallelität, die dem Design eigen ist, Aggregate mit großer Bandbreite verarbeiten, sodass sie in der Praxis nur selten eine signifikante Einschränkung der Leistung darstellen. Dies bedeutet, dass eine gemeinsam genutzte Festplattenarchitektur (möglicherweise besser als gemeinsam genutztes Speichersystem bezeichnet) für große Arbeitslasten skaliert werden kann, obwohl der Netzwerk-Switch theoretisch ein zentraler Engpass ist.
Der ursprüngliche Punkt war, zu beachten, dass ein partitioniertes Speichersubsystem mit mehreren Speicherknoten (z. B. BigTable-Tablet-Server oder SAN-Controller), obwohl dieser zentrale Engpass in Systemen mit gemeinsam genutzten Festplatten besteht, immer noch auf große Arbeitslasten skaliert werden kann. Eine nicht blockierende Switch-Architektur kann (theoretisch) so viele aktuelle Verbindungen verarbeiten, wie Ports vorhanden sind.
1 Natürlich stellen auch die verfügbaren Verarbeitungs- und E / A-Durchsätze eine Leistungsbeschränkung dar, aber der Netzwerk-Switch ist ein zentraler Punkt, durch den der gesamte Datenverkehr geleitet wird.