Technischer Überblick über die Infinidat-Speicherarchitektur

InfiniBox ist ein modernes Speichersystem, das sofort auf die rechte Seite des magischen Quadrats fiel. Was ist seine Einzigartigkeit?

Ein kurzer Hintergrund

Was ist InfiniBox? Dies ist ein Infinidat-Speichersystem. Was ist Infinidat? Dies ist ein Unternehmen, das von Moshe Yanay (Erfinder von Symmetrix und XIV) gegründet wurde, um ein ideales Speicherprojekt auf Unternehmensebene zu implementieren.

Das Unternehmen wurde als Softwareentwickler gegründet, der auf bewährten Geräten basiert, dh SDS ist, aber als einzelnes monolithisches Set geliefert wird.

Einführung

In diesem Artikel werden wir das InfiniBox-Speichersystem, seine Architektur, seine Funktionsweise und die Erzielung einer hohen Zuverlässigkeit (99,99999%), Leistung und Kapazität zu einem relativ niedrigen Preis betrachten. Da die Basis des Speichersystems seine Software ist und insbesondere bei diesem System der Schwerpunkt auf Software liegt, gibt es keine schönen Fotodrüsen.

Warum brauchen Sie ein anderes Speichersystem auf dem Markt?

Es gibt eine Reihe von Aufgaben, für die eine sehr große Kapazität benötigt wird, während Zuverlässigkeit und Leistung ebenfalls wichtig sind. Zum Beispiel Cloud-Systeme, Standardaufgaben großer Unternehmen, das Internet der Dinge, Genforschung, Sicherheitssysteme für große Strukturen. Es ist ziemlich schwierig, das optimale Speichersystem für solche Aufgaben zu finden, besonders wenn man den Preis betrachtet. Mit Blick auf solche Aufgaben wurde die Softwarearchitektur von InfiniBox erstellt.

Adressierung

Wie kann ich unbegrenzt Datenmengen speichern? Durch unbegrenzten Adressraum. Zu diesem Zweck verwendet InfiniBox den Adressraum VUA - Virtual User Address. Alle auf der InfiniBox erstellten Objekte, auf die der Benutzer zugreifen kann (Volumes, Snapshots, Dateisysteme), sind in dieser VUA enthalten, und die Gesamtgröße dieser Objekte entspricht der aktuellen Größe der VUA. Die Adressierung ist dünn und nicht mit Festplatten verbunden. Das heißt, die VUA-Größe kann viel größer sein als die verfügbare Festplattenkapazität und ist tatsächlich unbegrenzt.



Als nächstes müssen wir diesen Raum in Teile aufteilen, die wir bedienen werden, damit es einfacher ist, mit ihnen zu arbeiten.



Der gesamte Adressraum ist in 6 Teile unterteilt - VU (virtuelle Einheit - virtuelles Stück). Der Adressraum jedes Objekts, z. B. eines Volumes, ist gleichmäßig auf diese Teile verteilt. Die Aufzeichnung erfolgt in Blöcken von 64 kB, und dabei können Sie unglaublich einfach und schnell verstehen, zu welcher VU diese Volume-Adresse gehört (der Rest der LBA / 64 kB-Division, die Modulo-Funktion, wird für die minimale Anzahl von CPU-Zyklen sehr schnell ausgeführt).

VUs vereinfachen nicht nur die Arbeit mit kleineren Räumen, sondern sind auch die erste Abstraktionsebene von physischen Festplatten und die Grundlage für die Systemfehlertoleranz auf Controller-Ebene. Beispielsweise gibt es 3 Controller (physische Server), von denen jeder für den Betrieb verantwortlich ist und die Hauptsteuerung für zwei VUs sowie die Sicherung für zwei andere VUs darstellt. Die Steuerung bedient nicht die VU, für die sie eine Reserve ist, sondern empfängt gleichzeitig Metadaten und Schreibvorgänge von der anderen Steuerung für diese VU, so dass sie bei einem Ausfall der Hauptsteuerung sofort alle Arbeiten mit dieser VU aufnimmt.



Bei einem Ausfall eines Controllers übernehmen die beiden anderen seine Aufgabe - arbeiten mit seiner VU.



Adressierung, Schnappschüsse, Caching



VUA ist ein virtueller Adressraum, der dem Benutzer zur Verfügung steht und praktisch unbegrenzt ist. VDA (Virtual Disk Address) ist ein virtueller interner Speicherplatz. Die Größe wird im Voraus streng von der Anzahl und Kapazität der Festplatten bestimmt (abzüglich der Parität, Metadaten und des Speicherplatzes zum Ersetzen ausgefallener Laufwerke). Die Verbindung zwischen VUA und VDA wird über einen Trie (Präfixbaum) organisiert. Jeder Eintrag im Baum ist ein Zeiger vom Benutzerraum (VUA) zum Innenraum (VDA). Durch die Adressierung in Form eines Präfixbaums können Sie Blöcke beliebiger Größe adressieren. Das heißt, wenn ein Element beliebiger Größe (Datei, serieller Datenstrom, Objekt) zu den Datenträgern hinzugefügt wird, kann es mit einem Datensatz im Baum adressiert werden, und der Baum bleibt kompakt.

Das wichtigste Merkmal des Baums ist jedoch seine hohe Leistung beim Suchen und Erweitern des Baums. Die Suche wird während des Lesevorgangs durchgeführt, wenn der Block mit der angegebenen Adresse auf der Festplatte gefunden werden muss. Die Erweiterung des Baums erfolgt während eines Schreibvorgangs, wenn wir neue Daten zur Festplatte hinzufügen und dem Baum eine Adresse hinzufügen müssen, an der sie gefunden werden können. Die Leistung ist bei der Arbeit mit großen Strukturen äußerst wichtig, und der Präfixbaum ermöglicht es Ihnen, sie mit einem großen Spielraum für die Zukunft zu erreichen, beispielsweise im Falle einer Erhöhung des Festplattenvolumens.

Was kann über die Beziehung zwischen VUA und VDA gesagt werden:

  1. Die VUA-Größe kann die VDA-Größe weit überschreiten
  2. VUA hat nichts mit VDA zu tun, bis dort Thin Provisioning geschrieben ist
  3. Mehr als eine VUA kann auf einen VDA verweisen (Snapshots / Klone)

Die Organisation von VUA und VDA, die Verbindungen zwischen ihnen und die Adressierung dieser Verbindungen ermöglichen es Ihnen daher, sehr schnelle Snapshots und Thin Provisioning zu implementieren. Da beim Erstellen eines Snapshots nur die Metadaten im Speicher aktualisiert werden und während der Arbeit ständig ausgeführt wird, dauert dieser Vorgang keine Zeit. In der Regel beenden klassische Speichersysteme beim Erstellen von Snapshots die Aktualisierung von Metadaten und / oder E / A, um die Transaktionsintegrität zu gewährleisten. Dies führt zu einer ungleichmäßigen E / A-Latenz. Das betreffende System funktioniert anders: Es stoppt nichts und der Zeitstempel aus den Blockmetadaten (64 + 4 KB) wird verwendet, um festzustellen, ob sich die Operation im Snapshot befindet. Somit kann das System Hunderttausende von Aufnahmen machen, ohne die Arbeit zu verlangsamen.Die Leistung eines Volumes mit Hunderten von Snapshots und eines Volumes ohne Snapshots ist nicht anders. Da alles im Speicher ausgeführt wird und dies reguläre Prozesse sind, können Dutzende von Schnappschüssen pro Sekunde für Datenträgergruppen erstellt werden. Auf diese Weise können Sie die asynchrone Replikation für Snapshots implementieren, wobei der Unterschied zwischen den Kopien in Sekunden oder weniger liegt, ohne die Leistung zu beeinträchtigen. Dies ist ebenfalls wichtig.

Schauen wir uns das System als Ganzes an, wie die Daten ablaufen. Operationen werden über die Ports aller drei Controller (Server) empfangen. Port-Treiber arbeiten im Benutzerbereich, sodass Sie sie einfach neu starten können, wenn eine Kombination von Ereignissen an den Ports den Treiber aussetzt. In klassischen Implementierungen erfolgt dies im Kernel und das Problem wird durch einen Neustart des gesamten Controllers gelöst.

Als nächstes wird der Stream in Abschnitte von 64 KB + 4 KB unterteilt. Was sind diese zusätzlichen 4 KB? Dies ist ein Schutz vor stillen Fehlern und enthält Prüfsummen, Zeit und zusätzliche Informationen zum Vorgang, mit denen dieser Vorgang klassifiziert und das Caching optimiert und vorausgelesen wird.



Das Aufzeichnen von Caching ist eine ziemlich einfache Sache, die zum Lesen nicht gesagt werden kann. Lese-Caching funktioniert gut, wenn wir wissen, was wir lesen sollen. Klassische Systeme verwenden Read-Ahead-Algorithmen mit sequentiellem Zugriff. Aber was tun mit willkürlich? Vollständig wahlfreier Zugriff ist in der Arbeit von realen Anwendungen äußerst selten, selbst wenn er korrekt emuliert wird, ist es ziemlich schwierig, einen Generator für echte Zufallszahlen zu schreiben. Wenn wir jedoch jede E / A-Operation separat betrachten, wie dies in klassischen Systemen der Fall ist, sind alle willkürlich und unvorhersehbar, mit Ausnahme der vollständig sequentiellen. Wenn Sie jedoch einige Zeit den gesamten E / A-Stream betrachten, sehen Sie Muster, die verschiedene Vorgänge kombinieren.

Der Systemcache weiß im Grunde nichts über Volumes, Dateien und logische Strukturen, die auf VUA basieren. Der Cache betrachtet nur Abschnitte und deren Metadaten, wobei das Caching auf deren Verhalten und Attributen basiert. Auf diese Weise können Sie Abhängigkeiten zwischen verschiedenen Anwendungen finden, die tatsächlich verbunden sind. Für Eingabe-Ausgabe-Operationen werden Aktivitätsvektoren konstruiert.



Das System sammelt Statistiken, erstellt diese Aktivitätsvektoren und versucht dann, die aktuellen E / A zu identifizieren und an bekannte Vektoren zu binden oder neue zu erstellen. Nach der Identifizierung erfolgt ein prädiktives Lesen gemäß dem Vektor, dh das Verhalten von Anwendungen wird vorhergesagt, und das prädiktive Lesen wird für eine scheinbar willkürliche Last durchgeführt.

Brennen Sie auf Discs

Zum Schneiden sind 14 Abschnitte in Streifen zusammengesetzt. Dies geschieht durch einen speziellen Prozess, bei dem Abschnitte für einen solchen Streifen ausgewählt werden.



Als nächstes werden zwei Paritätsabschnitte betrachtet - der Streifen ist zum Schreiben auf Datenträger bereit. Die Parität wird durch mehrere Operationen auf der Basis von XOR gezählt, was zweimal schneller ist als auf der Basis des Reed-Solomon-Codes. Ein weiterer Streifen (14 + 2 Abschnitte) ist einer RAID-Gruppe (RG) zugeordnet. Eine RAID-Gruppe ist nur ein Objekt zum Speichern mehrerer Streifen, nichts weiter. Die Streifen werden wie unten gezeigt übereinander gruppiert, und die vertikale Spalte wird als Mitglied der RAID-Gruppe bezeichnet. VDS (Virtual Disk Space) ist der für Benutzerdaten verfügbare Speicherplatz, und VDA ist die darin enthaltene Adresse.



Eine Spalte oder ein Mitglied einer RAID-Gruppe wird auf eine Festplatte (PD - Physical Drive) in einem Regal (Disk Unit) geschrieben. Der Ort, an dem ein Mitglied der RAID-Gruppe geschrieben wird, wird als Festplattenpartition (DP - Drive Partition) bezeichnet. Die Anzahl der DP auf der Festplatte ist konstant und beträgt 264. Die Größe hängt von der Größe der Festplatte ab. Mit diesem Design können Sie alle Festplatten gleichmäßig laden. Gleichzeitig verteilt der Algorithmus Spalten einer RAID-Gruppe so weit wie möglich voneinander entfernt auf verschiedene Festplatten und Regale. Dies führt dazu, dass bei einem Ausfall von zwei Festplatten die Anzahl der gemeinsamen Streifen gleichzeitig minimal ist und das System innerhalb von Minuten vom Schutzzustand N auf N + 1 wechselt und die Streifen neu erstellt, bei denen zwei Spalten sofort fehlen (Zuverlässigkeit beträgt sieben Neunen) )



Infolgedessen sieht der logische Aufbau des gesamten Systems recht einfach aus und ist in der folgenden Abbildung dargestellt.



Physische Implementierung

Das System ist so aufgebaut, dass alle seine Komponenten gemäß dem N + 2- oder 2N-Schema geschützt sind, einschließlich Strom- und Datenkanälen innerhalb des Arrays. Hier ist das Implementierungsdiagramm für die Stromversorgung.

ATS (Automatic Transfer Switch) - ATS, Phasenschalter
BBU (Battery Backup Unit) - USV, unterbrechungsfreie Stromversorgung
Knoten - Controller



Mit diesem Schema können Sie die Controller und die Speicherintegrität bei komplexen Ereignissen schützen, z. B. bei einem Stromausfall und einer vorübergehenden Abschaltung eines Stromkreises. Die USVs sind verwaltbar, sodass Sie genaue Ladeinformationen erhalten und die Cache-Größe flexibel ändern können, sodass der Controller immer Zeit hat, sie zurückzusetzen. Das heißt, das System wird den Cache im Gegensatz zum klassischen Schema viel früher aktiv nutzen, wenn der Cache nur eingeschaltet wird, wenn der Akku vollständig aufgeladen ist.

Hier ist ein Diagramm der Datenkanäle innerhalb des Systems.



Die Controller sind über Infiniband miteinander verbunden und über SAS mit den Laufwerken verbunden. Jeder Controller kann auf jede Festplatte im System zugreifen. Wenn die Verbindung zwischen dem Controller und der Festplatte nicht funktioniert, kann der Controller Daten über einen anderen Controller anfordern, der über Infiniband als Proxy fungiert. Regale enthalten SAS-Switches für den gleichzeitigen Zugriff auf Festplatten. Jedes Regal enthält 60 Platten. Die Regale können zwei, vier oder acht sein, was insgesamt bis zu 480 Platten mit 3, 4, 6, 8 oder 12 TB entspricht. Die dem Benutzer zur Verfügung stehende Gesamtkapazität beträgt mehr als 4,1PB ohne Komprimierung. Apropos Komprimierung: Um eine Komprimierung ohne Leistungseinbußen zu implementieren, wird der Speicher nicht komprimiert. Daher arbeitet das System manchmal mit noch schneller aktivierter Komprimierung. Wenn Sie lesen, müssen Sie weniger lesen, die Prozessorleistung reicht mit einem Rand aus.und während der Aufnahme geht die Antwort direkt aus dem Speicher und die Komprimierung erfolgt asynchron während der direkten Aufnahme auf Discs.

Die Controller enthalten zwei Gruppen von Festplatten in sich: eine System zum Leeren des Arbeitsspeichers und die zweite auf der SSD zum Zwischenspeichern von Lesevorgängen (bis zu 368 TB pro System). Ein derart großer Cache ermöglicht das vorausschauende Lesen großer Blöcke. Da die Daten im Streifen mit ungefähr derselben Zugriffshäufigkeit ausgewählt werden, verringern solche großen Blöcke nicht nur die Belastung der physischen Festplatten, sondern haben auch große Chancen, in naher Zukunft gefragt zu sein.

Zusammenfassung

Wir haben also über ein sehr interessantes Speichersystem gesprochen, das eine moderne Architektur aufweist und hohe Kapazität, hohe Zuverlässigkeit, hervorragende Leistung und angemessene Kosten bietet.



Quellen
1 https://techfieldday.com/video/infinidat-solution-deep-dive/
2 https://support.infinidat.com/hc/en-us

All Articles