DE202015009260U1 - Effiziente Datenlesungen von verteilten Speichersystemen - Google Patents

Effiziente Datenlesungen von verteilten Speichersystemen Download PDF

Info

Publication number
DE202015009260U1
DE202015009260U1 DE202015009260.8U DE202015009260U DE202015009260U1 DE 202015009260 U1 DE202015009260 U1 DE 202015009260U1 DE 202015009260 U DE202015009260 U DE 202015009260U DE 202015009260 U1 DE202015009260 U1 DE 202015009260U1
Authority
DE
Germany
Prior art keywords
blocks
group
maintenance
data
storage devices
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE202015009260.8U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of DE202015009260U1 publication Critical patent/DE202015009260U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0727Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a storage system, e.g. in a DASD or network based storage system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/805Real-time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1028Distributed, i.e. distributed RAID systems with parity

Abstract

System zum Verteilen von Daten (312) in einem verteilten Speichersystem (100), das System umfassend: einen nicht flüchtigen Speicher (204), der eine Datei empfängt (310); einen Computerprozessor (202) in Kommunikation mit dem nicht-flüchtigen Speicher (204), der Computerprozessor (202): die empfangene Datei (310) in Blöcke (330) teilend, wobei die Blöcke (330) Datenblöcke (330nD) und Nicht-Datenblöcke (330nC) sind; und das Gruppieren (806) eines oder mehrerer der Datenblöcke (330nD) und eines oder mehrerer der Nicht-Datenblöcke (330nC) in einer Gruppe (G), wobei ein oder mehrere Blöcke (330) der Gruppe (G) von anderen Blöcken (330) der Gruppe (G) rekonstruiert werden können; und Speichergeräte (114, 114a–n) in Kommunikation mit dem Computerprozessor (202) und dem nicht-flüchtigen Speicher (204), der Computerprozessor (202) die Blöcke (330) der Gruppe (G) auf den Speichergeräten (114, 114a–n) speichernd beruhend auf einer Wartungshierarchie (400) des verteilten Speichersystems (100) die Wartungshierarchie (400) umfassend Wartungsdomänen (402, 402a–e) mit aktivem und inaktivem Zustand, jedes Speichergerät (114, 114a–n) ist mit einer Wartungsdomäne (402, 402a–e) verbunden, der Computerprozessor (202) die Blöcke (330) einer Gruppe (G) auf zahlreiche Wartungsdomänen (402, 402a–e) verteilend, um die Zugänglichkeit der Gruppe (G) zu erhalten, wenn eine Wartungsdomäne (402, 402a–e) sich in einem inaktiven Zustand befindet.

Description

  • TECHNISCHES GEBIET
  • Diese Offenbarung bezieht sich auf effiziente Datenlesungen von verteilten Speichersystemen. Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
  • HINTERGRUND
  • Ein verteiltes System besteht im Allgemeinen aus vielen lose gekoppelten Computer, die jeweils üblicherweise eine Rechenressource (z. B. einen oder mehrere Prozessoren) und/oder Speicherressourcen (z. B. Speicher, Flash-Speicher und/oder Datenträger) beinhalten. Ein verteiltes Speichersystem überlagert auf den Speicherressourcen des verteilten Systems eine Speicherabstraktion (z. B. einen Schlüssel/Wert-Speicher oder ein Dateisystem). In dem verteilten Speichersystem kann ein auf einem Computer laufender Serverprozessor die Speicherressourcen dieses Computers zu Client-Prozessen exportieren, die auf anderen Computer laufen. RPCs (Remote Procedure Calls, entfernte Prozeduraufrufe) können Daten von Server-Prozessen an Client-Prozesse übertragen. Alternativ kann Remote Direct Memory Access (RDMA, Speicherfernzugriff) verwendet werden, um Daten von der Server-Hardware an Client-Prozesse zu übertragen.
  • ZUSAMMENFASSUNG
  • Ein Aspekt der Offenbarung stellt ein Verfahren der Verteilung von Daten auf ein verteiltes Speichersystem dar. Das Verfahren beinhaltet das Empfangen einer Datei in einem nicht flüchtigen Speicher und das Unterteilen der empfangenen Datei in mehrere Segmente unter Verwendung eines Computerprozessors, der mit dem nicht flüchtigen Speicher kommuniziert. Diese Verfahren beinhaltet auch die Gruppierung eines oder mehrerer Datenblöcke in einer Gruppe. Ein oder mehrere Blöcke der Gruppe können von anderen Blöcken der Gruppe rekonstruiert werden. Wahlweise beinhaltet das Verfahren weiterhin die Verteilung von Blöcken der Gruppe auf Speichergeräte des verteilten Speichersystems auf der Basis einer Hierarchie des verteilten Speichersystems. Die Hierarchie beinhaltet Wartungsdomänen mit aktiven und inaktiven Zuständen. Darüber hinaus ist jedes Speichergerät einer Wartungsdomäne zugeordnet. Die Blöcke einer Gruppe werden auf zahlreiche Wartungsdomänen verteilt, um die Möglichkeit zu erhalten, die Blöcke der Gruppe zu rekonstruieren, wenn sich eine Wartungsdomäne in einem inaktiven Zustand befindet.
  • Implementierungen der Offenlegung können eines oder mehrere der folgenden optionalen Merkmale beinhalten. In einigen Implementierungen umfasst das Verfahren ferner die Beschränkung der Anzahl von Blöcken einer Gruppe, die auf die Speichergeräte einer beliebigen Wartungsdomäne verteilt sind,
  • In einigen Implementierungen umfasst das Verfahren die Bestimmung einer Verteilung der Blöcke einer Gruppe auf die Speichergeräte durch Bestimmen einer ersten zufälligen Auswahl von Speichergeräten, die mit einer Anzahl von Blöcken der Gruppe übereinstimmt und der Bestimmung, ob die Auswahl der Speichergeräte in der Lage ist, die Zugänglichkeit der Gruppe zu erhalten, wenn eine oder mehrere Einheiten sich in einem inaktiven Zustand befinden. In einigen Beispielen umfasst das Verfahren weiterhin die Bestimmung einer zweiten zufälligen Auswahl von Speichergeräten, die mit der Anzahl von Blöcken der Gruppe übereinstimmt oder die Änderung der ersten zufälligen Auswahl von Speichergeräten durch Hinzufügen oder Entfernen eines oder mehrerer zufällig ausgewählten Speichergeräte, wenn die erste zufällige Auswahl von Speichergeräten nicht in der Lage ist, die Zugänglichkeit der Gruppe zu erhalten, wenn eine oder mehrere Wartungsdomänen sich in einen inaktiven Zustand befinden. Das Verfahren kann ferner die Bestimmung der ersten zufälligen Auswahl von Speichergeräten mithilfe einer einfachen Stichprobe, einer einfachen Wahrscheinlichkeitsstichprobe, einer geschichteten Stichprobe oder einer Cluster-Stichprobe umfassen.
  • In einigen Implementierungen umfasst das Verfahren die Bestimmung einer Verteilung der Blöcke der Gruppe auf die Speichergeräte durch Auswahl einer fortlaufenden Anzahl von Speichergeräten entsprechend einer Anzahl von Blöcken der Gruppe aus einer geordneten Ringliste der Speichergeräte der verteilten Speicherung. Wenn die ausgewählten Speichergeräte gemeinsam in der Lage sind, die Zugänglichkeit der Gruppe zu erhalten, wenn eine oder mehrere Wartungsdomänen sich in einem inaktiven Zustand befinden, umfasst das Verfahren ferner die Auswahl einer weiteren aufeinanderfolgenden Anzahl von Speichergeräten aus der geordneten Ringliste entsprechend der Anzahl von Blöcken der Gruppe. Das Verfahren kann die Bestimmung der geordneten Ringliste von Speichergeräten des verteilten Speichersystems umfassen. Benachbarte Speichergeräte der geordneten Ringliste sind verschiedenen Wartungsdomänen zugeordnet. In einigen Beispielen ist eine Schwellenanzahl aufeinanderfolgenden Speichergeräte in der geordneten Ringliste jeweils verschiedenen Wartungsdomänen zugeordnet oder befinden sich jeweils an verschiedenen geographischen Standorten.
  • In einigen Implementierungen umfasst das Verfahren die Bestimmung der Wartungshierarchie der Wartungsdomänen (z. B. Mithilfe des Computerprozessors), wobei die Wartungshierarchie Wartungsstufen besitzt und jede Wartungsstufe eine oder mehrere Wartungsdomänen umfasst. Das Verfahren umfasst ferner das Zuordnen jeder Wartungsdomäne zu mindestens einem Speichergerät. In einigen Beispielen umfasst jede Wartungsdomäne Speichergeräte, die von einer einzigen Stromversorgungseinheit oder einer einzigen Stromversorgungs-Busleitung betrieben werden.
  • Das Verfahren kann die Teilung der empfangenen Datei in Streifen beinhalten. Jede Datei enthält einen Fehlerkorrekturcode. Der Fehlerkorrekturcode ist entweder ein verschachtelter Code oder ein geschichteter Code. Die Nicht-Datenblöcke umfassen Code-Prüfungsblöcke, Wort-Prüfungsblöcke und Code-Prüfungswort-Prüfungsblöcke.
  • Ein weitere Aspekt der Offenbarung stellt ein System der Verteilung von Daten auf ein verteiltes Speichersystem dar. Das System beinhaltet nicht flüchtigen Speicher, einen Computerprozessor und Speichergeräte. Der nicht-flüchtige Speicher empfängt eine Datei. Der Computerprozessor kommuniziert mit dem nicht flüchtigen Speicher und unterteilt die empfangenen Dateien in Segmente. Die Blöcke sind Datenblöcke und Nicht-Datenblöcke. Der Computerprozessor gruppiert ferner einen oder mehrere der Datenblöcke oder einen oder mehrere der Nicht-Datenblöcke in einer Gruppe. Ein oder mehrere Blöcke der Gruppe können von anderen Blöcken der Gruppe rekonstruiert werden. Die Speichergeräte kommunizieren mit dem Computerprozessor und dem nicht flüchtigen Speicher. Der Computerprozessor speichert die Blöcke der Gruppe basierend auf einer Wartungshierarchie des verteilten Speichersystems auf den Speichergeräten. Die Wartungshierarchie beinhaltet Wartungsdomänen mit aktiven und inaktiven Zuständen. Jedes Speichergerät ist einer Wartungsdomäne zugeordnet. Der Computerprozessor verteilt die Blöcke einer Gruppe auf zahlreiche Wartungsdomänen, um die Zugänglichkeit der Gruppe zu erhalten, wenn sich eine Wartungsdomäne in einem inaktiven Zustand befindet.
  • Implementierungen dieses Aspekts können eine oder mehrere der folgenden optionalen Merkmale enthalten. In einigen Beispielen beschränkt der Computerprozessor eine Anzahl von Blöcken der Gruppe, die auf Speichergeräte einer beliebigen Wartungsbereich verteilt sind. Der Computerprozessor kann eine Verteilung der Blöcke der Gruppe auf die Speichergeräte durch Bestimmen einer ersten zufälligen Auswahl von Speichergeräten bestimmen, die mit einer Anzahl von Blöcken der Gruppe übereinstimmt und durch Bestimmen, ob die Auswahl der Speichergeräte in der Lage ist, die Zugänglichkeit der Gruppe zu erhalten, wenn eine oder mehrere Wartungsdomänen sich in einem inaktiven Zustand befinden. Der Computerprozessor kann eine zweite zufällige Auswahl von Speichergeräten bestimmen, die mit einer Anzahl von Blöcken der Gruppe übereinstimmt, wenn die erste zufällige Auswahl von Speichergeräten nicht in der Lage ist, die Zugänglichkeit der Gruppe zu erhalten, wenn eine oder mehrere Wartungsdomänen sich in einem inaktiven Zustand befinden.
  • In einigen Implementierungen ändert der Computerprozessor die erste zufällige Auswahl von Speichergeräten durch Hinzufügen oder Entfernen einer oder mehrerer zufällig ausgewählten Speichergeräte, wenn die erste zufällige Auswahl von Speichergeräten nicht in der Lage ist, die Zugänglichkeit der Datei zu erhalten, wenn eine oder mehrere Wartungsdomänen sich in einem inaktiven Zustand befinden. Der Computerprozessor kann die erste zufällige Auswahl von Speichergeräten mithilfe einer einfachen Stichprobe, einer einfachen Wahrscheinlichkeitsstichprobe, einer geschichteten Stichprobe oder einer Cluster-Stichprobe bestimmen.
  • In einigen Beispielen bestimmt der Computerprozessor eine Verteilung der Blöcke auf die Speichergeräte durch Auswahl einer fortlaufenden Anzahl von Speichergeräten entsprechend einer Anzahl von Blöcken der Gruppe aus einer geordneten Ringliste der Speichergeräte des verteilten Speichersystems. Darüber hinaus kann der Computerprozessor eine weitere fortlaufende Anzahl von Speichergeräten aus der geordneten Ringliste entsprechend der Anzahl von Blöcken der Gruppe auswählen, wenn die ausgewählten Speichersysteme gemeinsam unfähig sind, die Zugänglichkeit der Gruppe zu erhalten, wenn eine oder mehrere Wartungsdomänen sich in einem inaktiven Zustand befinden.
  • In einigen Implementierungen bestimmt der Computerprozessor die geordnete Ringliste der Speichergeräte des verteilten Speichersystems, wobei benachbarte Speichergeräte auf der geordneten Ringliste verschiedenen Wartungsdomänen zugeordnet sind. Zusätzlich oder alternativ kann eine Schwellenanzahl aufeinanderfolgender Speichergeräte in der geordneten Ringliste jeweils verschiedenen Wartungsdomänen zugeordnet werden. Zusätzlich oder alternativ kann sich eine Schwellenanzahl fortlaufender Speichergeräte in der sortierten Ringliste an jeweils unterschiedlichen geographischen Standorten befinden.
  • In einigen Beispielen bestimmt der Computerprozessor eine Wartungshierarchie von Wartungsdomänen und ordnet jede Wartungsdomäne mindestens einem Speichergerät zu. Die Wartungshierarchie hat Wartungsstufen, wobei jede Wartungsstufe eine oder mehrere Wartungsdomänen umfasst. Jede Wartungsdomäne kann Speichergeräte umfassen, die von einer einzigen Stromversorgungseinheit oder einer einzigen Stromversorgungs-Busleitung betrieben werden.
  • In einigen Implementierungen teilt der Computerprozessor die empfangene Datei in Streifen, wobei jede Datei einen Fehlerkorrekturcode enthält. Der Fehlerkorrekturcode ist entweder ein verschachtelter Code oder ein geschichteter Code. Die Nicht-Datenblöcke umfassen Code-Prüfungsblöcke, Wort-Prüfungsblöcke und Code-Prüfungswort-Prüfungsblöcke.
  • Die Einzelheiten einer oder mehrerer Implementierungen der Offenlegung sind in den begleitenden Zeichnungen und der nachstehenden Beschreibung dargelegt. Andere Merkmale, Objekte und Vorteile sind aus der Beschreibung und den Zeichnungen sowie aus den Patentansprüchen ersichtlich.
  • BESCHREIBUNG DER ZEICHNUNGEN
  • 1A ist eine schematische Ansicht eines exemplarischen verteilten Speichersystems.
  • 1B ist eine schematische Ansicht eines exemplarischen Speichersystems mit einer Zelle von Speicherhosts, die von einem Verwalter verwaltet werden.
  • 2 ist eine schematische Ansicht eines exemplarischen Verwalters für ein verteiltes Speichersystem.
  • 3A ist eine schematische Ansicht einer beispielhaften Datei, die in Streifen aufgeteilt ist.
  • 3B ist eine schematische Ansicht einer beispielhaften Datei, die in Datensegmente und Codesegmente unterteilt ist.
  • 3C ist eine schematische Ansicht einer exemplarischen Reed-Solomon-Kodierungstechnik.
  • 3D3F sind schematische Ansichten von beispielhaften geschichteten Kodierungstechniken.
  • 3G ist eine beispielhafte Anordnung von Operationen zum Speichern von Daten mithilfe geschichteter Kodierungstechniken.
  • 3H3J sind schematische Ansichten von beispielhaften verschachtelten Kodierungstechniken.
  • 3K ist eine exemplarische Anordnung von Operationen zum Speichern von Daten mithilfe verschachtelter Kodierungstechniken.
  • 4A4C sind schematische Ansichten einer beispielhaften Wartungshierarchie.
  • 5A ist ein Ablaufdiagramm einer beispielhaften Anordnung von Operationen für die zufällige Auswahl einer Gruppe von Speicherressourcen.
  • 5B ist eine schematische Ansicht einer exemplarischen zufälligen Auswahl von Speichergeräten.
  • 6A ist ein Ablaufdiagramm einer beispielhaften Anordnung von Operationen für die zufällige Auswahl einer Gruppe von Speicherressourcen, die dann die Speichergeräte innerhalb der Gruppe stichprobenartig aktualisiert.
  • 6B ist eine schematische Ansicht einer exemplarischen zufälligen Auswahl an Speichergeräten.
  • 7A ist ein Ablaufdiagramm einer beispielhaften Anordnung von Operationen für die Auswahl einer Gruppe von Speicherressourcen aus einer Ringliste.
  • 7B ist eine schematische Ansicht einer exemplarischen Auswahl an Speichergeräten aus einer sortierten Liste.
  • 8 ist eine schematische Ansicht einer beispielhaften Anordnung von Operationen für die Verteilung von Daten in einem Speichersystem.
  • Gleiche Referenzsymbole in den verschiedenen Zeichnungen weisen auf gleiche Elemente hin.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Speichersysteme umfassen mehrere Redundanzschichten, in denen Daten repliziert und in zahlreichen Rechenzentren gespeichert werden. Rechenzentren beherbergen Computersysteme und die dazugehörigen Komponenten, wie z. B. Datenfernübertragungen und Speichersysteme 100 (1A und 1B). Rechenzentren beinhalten normalerweise Backup-Stromversorgungen, redundante Kommunikationsanschlüsse, Umgebungskontrollen (um eine konstante Temperatur zu bewahren) sowie Sicherheitsgeräte. Rechenzentren können große Betriebe in einer industriellen Größenordnung sein, die sehr viel Strom verbrauchen (z. B. so viel wie eine kleine Stadt). Rechenzentren können sich an verschiedenen geographischen Standorten befinden (z. B. in unterschiedlichen Städten, in unterschiedlichen Ländern und auf unterschiedlichen Kontinenten). In einigen Beispielen erfordern die Rechenzentren oder ein Teil dieser Wartung (beispielsweise aufgrund eines Stromausfalls oder der Trennung eines Teils des Speichersystems zum Austausch von Teilen oder einem Systemausfall oder einer Kombination davon). Die in diesem Rechenzentren gespeicherten Daten können während des Wartungszeitraums für die Benutzer nicht zur Verfügung stehen, was zu einer Beeinträchtigung oder dem Stillstand der Operationen des Benutzers führt. Daher ist es wünschenswert, ein verteiltes Speichersystem 100 bereitzustellen, wobei der Benutzer gespeicherte Daten abrufen oder ungesunde oder verlorene Daten rekonstruieren kann, obwohl das Speichersystem 100 oder Teile desselben gewartet werden oder ein Systemausfall erfolgte.
  • Unter Bezugnahme auf 1A und 1B, in einigen Implementierungen umfasst eine verteiltes Speichersystem 100 lose gekoppelte Speicher-Hosts 110, 110a–n (z. B. Computer oder Server), die jeweils eine Rechenressource 112 besitzen (z. B. einen oder mehrere Prozessoren oder zentrale Recheneinheiten (CPUs)), die mit Speicherressourcen 114 kommuniziert (z. B. Speicher, Flash-Speicher, Dynamic Random Access Memory (DRAM), Phase Changing Memory (PCM) und/oder Disks), die für das Caching von Daten 312 verwendet werden können. Eine Speicherabstraktion (z. B. Schlüssel/Wert-Speicher oder Dateisystem), die die Speicherressourcen 114 überlagert, gestattet die skalierbare Nutzung der Speicherressourcen 114 durch einen oder mehrere Clients 120, 120a–n. Die Clients 120 können mit den Speicher-Hosts 110 über ein Netzwerk 130 (z. B. über RPC) kommunizieren.
  • In einigen Implementierungen ist das verteilte Speichersystem 100 „einseitig”, wodurch der Bedarf von Server-Jobs zur Beantwortung von Remote Procedure Calls (RPC) von Clients 120 zum Speichern oder Abrufen der Daten 312 auf ihren entsprechenden Speicher-Hosts 110 nicht mehr besteht und es sich somit auf spezielle Hardware verlassen kann, um anstelle dessen die Fernabfragen 122 zu verarbeiten. „Einseitig” bezieht sich auf das Verfahren, bei dem der größte Teil der Anforderungsverarbeitung auf den Speicher-Hosts 110 in der Hardware und nicht durch Software, die auf den CPUs 112 der Speicher-Hosts 110 ausgeführt wird, erfolgen kann. Anstelle eines Prozessors 112 auf einem Speicher-Host 110 (z. B. ein Server), der einen Server-Prozess 118 ausführt, der den Zugang der entsprechenden Speicherressource 114 (z. B. Nicht-flüchtiger Speicher) zu Client-Prozessen 128 exportiert, die auf den Clients 120 ausgeführt werden, können die Clients 120 direkt durch einen Netzwerk-Schnittstellen-Controller (NIC) 116 des Speicher-Hosts 110 auf die Speicherressource 114 zugreifen. Mit anderen Worten, ein Client-Prozess 128, der auf einem Client 120 ausgeführt wird, kann direkt mit einer oder mehreren Speicherressourcen 114 zusammenarbeiten, ohne dass eine Routine eines Server-Prozesses 118 ausgeführt werden muss, die auf den Rechenressourcen 112 ausgeführt wird. Diese einseitige verteilte Speicherarchitektur bietet relativ hohen Durchsatz und geringe Latenzzeit, da die Clients 120 ohne Verknüpfung mit den Rechenressourcen 112 der Speicher-Hosts 110 auf die Speicherressourcen 114 zugreifen können. Dies hat die Wirkung, dass die Anforderungen von Speicher 114 und die CPU-Zyklen entkoppelt werden, die in zweiseitigen verteilten Speichersystemen 100 typischerweise auftreten. Das einseitige verteilte Speichersystem 100 kann die Fernspeicherressourcen 114 ungeachtet der Tatsache nutzen, ob auf diesem Speicher-Host 110 freie CPU-Zyklen verfügbar sind; darüber hinaus kann ein einseitiges System Cache-Anforderungen 122 mit sehr vorhersehbarer, geringer Latenzzeit bedienen, da einseitige Operationen nicht um die Server-CPU 112-Ressourcen kämpfen, selbst wenn die Speicher-Hosts 110 mit hoher CPU-Auslastung ausgeführt werden. Das einseitige verteilte Speichersystem 100 gestattet somit eine höhere Nutzung von Cluster-Speicher 114 und Ressourcen der CPU 112 als herkömmliche zweiseitige Systeme, während es eine vorhersehbare, geringe Latenz liefert.
  • In einigen Implementierungen beinhaltet das verteile Speichersystem 100 einen Speicherlogikanteil 102, einen Datenkontrollanteil 104 und einen Datenspeicheranteil 106. Der Speicherlogikanteil 102 kann ein Transaktionsanwendungsprogrammierschnittstelle (API) 350 beinhalten (z. B. eine einseitige Transaktionssystem-Client-Bibliothek), die für den Zugang zu den zugrundeliegenden Daten 312 zum Beispiel über RPC oder einseitige Operationen verantwortlich ist. Der Datenkontrollanteil 104 kann die Zuordnung und den Zugang zu den Speicherressourcen 114 mit Aufgaben verwalten, wie z. B. das Zuordnen von Speicherressourcen 114, das Registrieren von Speicherressourcen 114 beim entsprechenden Netzwerk-Schnittstellen-Controller 116, das Einrichten von Verbindungen zwischen den Clients) 120 und den Speicher-Hosts 110, das Handhaben von Fehlers im Falle von Maschinenausfällen usw. Der Datenspeicheranteil 106 kann die lose gekoppelten Speicher-Hosts 110, 110a–n beinhalten.
  • Das verteilte Speichersystem 100 kann die Daten 312 in eine, Dynamic Random Access Memory (DRAM) 114 speichern und die Daten 312 direkt von den Remote-Hosts 110 über Remote Direct Memory Access(RDMA)-fähige Netzwerk-Schnittstellen-Controller 116 liefern. Eine Netzwerkschnittstelle 116 (auch bekannt als Netzwerkkarte, Netzwerkadapter oder LAN-Adapter) kann eine Hardwarekomponente eines Computers sein, die eine Berechnungsressource 112 mit dem Netzwerk 130 verbindet. Sowohl die Speicher-Hosts 110a–n als auch der Client 120 können einen Netzwerkschnittstellen-Controller 116 für die Netzwerkkommunikation haben. Ein Host-Prozess 118, der auf dem Rechenprozessor 112 des Speicher-Hosts 110 ausgeführt wird, registriert einen Satz Remote Direct Memory zugänglicher Regionen 115a–n des Speichers 114 mit dem Netzwerk-Interface-Controller 116. Der Host-Prozess 118 kann die entfernten Speicherbereiche mit Direktzugriff 115a–n des Speichers 114 mit einer Berechtigung nur zum Lesen oder zum Lesen/Schreiben registrieren. Der Netzwerk-Schnittstellen-Controller 116 des Speicher-Hosts 110 erstellt einen Client-Schlüssel 302 für jede registrierte Speicherregion 115a–n.
  • Die von den Netzwerk-Schnittstellen-Controllern 116 durchgeführten einseitigen Operationen können auf einfaches Lesen, Schreiben und Compare-und-Swap-Operationen beschränkt werden, von denen keines ausreichend ausgereift sein mag, um als direkten Ersatz für die Software-Logik zu dienen, die durch einen herkömmlichen Cache-Server-Job zur Ausführung von Cache-Anfragen und Verwaltung von Cache-Richtlinien implementiert wurde. Das Transaktions-API 350 übersetzt Befehle, wie beispielsweise zum Suchen oder Einfügen von Daten, in Folgen grundlegender Operationen des Netzwerkschnittstellen-Controllers. Die Transaktions-API 350 arbeitet mit den Datensteuerungs- und Datenspeicherungs-Einheiten 104, 106 des verteilten Speichersystems 100 zusammen.
  • Das verteilte Speichersystem 100 kann einen gleichzeitigen Software-Prozess zur Registrierung des Speichers 114 für den Fernzugriff mit den Netzwerk-Schnittstellen-Controllern 116 beinhalten und Verbindungen mit den Client-Prozessen 128 einrichten. Sobald die Verbindungen eingerichtet sind, können die Client-Prozesse 128 über Maschinen in der Hardware der Netzwerk-Schnittstellen-Controller 116 auf den registrierten Speicher 114 zugreifen, ohne Software auf den lokalen CPUs 112 der entsprechenden Speicher-Hosts 110 einzubeziehen.
  • Bezugnehmend auf 1B umfasst das verteilte Speichersystem 100 in einigen Implementierungen zahlreiche Zellen 200, wobei jede Zelle 200 Speicher-Hosts 110 und einen Kurator 210 umfasst, die mit den Speicher-Hosts 110 kommunizieren, der Kurator 210 (z. B. Prozess) kann auf einem Rechenprozess 202 ausgeführt werden (z. B. Server mit einem nicht-flüchtigen Speicher 204), der mit dem Netzwerk 130 verbunden ist und die Datenspeicherung verwalten (z. B. ein auf den Speicher-Hosts 110 gespeichertes Dateisystem verwalten), Datenplatzierungen steuern und/oder Datenwiederherstellung initiieren. Darüber hinaus kann der Verwalter 210 das Vorhandensein und den Speicherort von Daten 312 auf den Speicher-Hosts 110 nachverfolgen. Redundante Verwalter 210 sind möglich. In einigen Implementierungen verfolgen der/die Kurator(en) 210 das Striping der Daten 312 über mehrere Speicher-Hosts 110 und die Existenz und/oder Ortung mehrerer Kopien eines bestimmten Streifens für die Redundanz und/oder Performance. In der Computerdatenspeicherung ist das Daten-Striping die Technik der logischen Segmentierung sequenzieller Daten 312, wie z. B. eine Datei 310 (2) in Streifen, so dass die Zugriffe von sequenziellen Segmenten für verschiedene physikalische Speicher-Hosts 110 bereitgestellt werden (z. B. Zellen 200 und/oder Speicher-Hosts 110). Das Striping ist nützlich, wenn ein Rechengerät den Zugriff auf die Daten 312 schneller fordert, als ein Speicher-Host 110 diesen Zugriff ermöglichen kann. Durch die Durchführung von Segmentzugriffen auf mehreren Geräten kann der Zugriff auf mehrere Segmente nebenläufig stattfinden. Damit entsteht mehr Durchsatz beim Datenzugriff, womit vermieden wird, den Prozessor im Leerlauf auf Datenzugriffe warten zu lassen. In einigen (unten ausführlicher beschriebenen) Implementationen kann jeder Streifen weiter in Gruppen unterteilt werden (z. B. einschließlich Blöcke), wobei die Zugriffe von sequenziellen Gruppen G für verschiedene physikalischen Speicher-Hosts 110 erfolgen. Das Gruppieren von Segmenten innerhalb eines Streifens kann auch nützlich sein, wenn ein Rechengerät den Zugriff auf die Daten 312 schneller fordert, als ein Speicher-Host 110 diesen Zugriff ermöglichen kann. Durch Bereitstellen des Segmentzugriffs einer Gruppe G auf zahlreichen Geräten kann gleichzeitig auf zahlreiche Segmente einer Gruppe G zugegriffen werden. Dies bietet auch einen größeren Datenzugriffsdurchsatz, was verhindert, dass der Prozessor untätig auf Datenzugriffe warten muss und somit wird die Leistung des Systems 100 verbessert.
  • In einigen Implementierungen bildet die Transaktions-API 350 die Schnittstelle zwischen einem Client 120 (z. B. mit dem Client-Prozess 128) und dem Kurator 210. Bei einigen Beispielen kommuniziert der Client 120 über einen oder mehrere RPCs (Remote Procedure Calls) mit dem Verwalter 210. Als Reaktion auf eine Client-Anforderung 122 kann die Transaktions-API 350 den Speicherstandort bestimmter Daten 312 auf dem/den Speicher-Host(s) 110 finden und ein Schlüssel 302 erhalten, der den Zugriff auf die Daten 312 ermöglicht. Das Transaktions-API 350 kommuniziert direkt mit den entsprechenden Speicher-Hosts 110 (über die Netzwerkschnittstellen-Controller 116), um die Daten 312 zu lesen oder zu schreiben (z. B. unter Verwendung von RDMA (Remote Direct Memory Access)). Falls ein Speicher-Host 110 nicht in Betrieb ist, oder die Daten 312 auf einen anderen Speicher-Host 110 verschoben wurden, schlägt die Client-Anforderung 122 fehl, sodass der Client 120 aufgefordert wird, den Verwalter 210 erneut abzufragen.
  • Bezugnehmend auf 2 speichert und verwaltet der Verwalter 210 in manchen Implementationen die Dateisystem-Metadaten 212. Die Metadaten 212 können eine Dateikarte 214 enthalten, die die Dateien 310 1-n den Dateibeschreibungen 300 1-n zuordnet. Der Verwalter 210 kann die Darstellung seiner persistenten Metadaten 212 überprüfen und abändern. Der Kurator 210 kann drei verschiedenen Zugangsmuster für die Metadaten 212 verwenden: schreibgeschützt, Dateitransaktionen und Streifentransaktionen. Zum Beispiel können die Metadaten 212 angeben, welche Teile einer Datei 310 in welchen Datenzentren gespeichert sind, wo redundante Kopien der Daten 312 gespeichert sind, welche Datenblöcke 330nD und Code-Blöcke 330nC Codewörter bilden und dergleichen.
  • Unter Bezugnahme auf 3A3K, die Daten 312 können eine oder mehrere Dateien 310 sein. Der Kurator 210 kann jede Datei 310 in eine Sammlung von Streifen 320a–n unterteilen, wobei jeder Streifen 320a–n unabhängig von den restlichen Streifen 320a–n kodiert ist. Jeder Streifen 320 kann kodiert und auf verschiedenen Speicher-Hosts 110 gespeichert sein. Wie in 3A, jeder Streifen 320 ist basierend auf einer Kodierstufe 313 in Datenblöcke 330nD und Nicht-Datenblöcke 330nC unterteilt, z. B. Reed-Solomon-Codes (3B) geschichtete Codes (3C3G), oder verschachtelte Codes (3H3K) oder sonstige hierarchische Codes. Die Nicht-Datenblöcke 330nC können Codeblöcke 330nC sein (z. B. Reed-Solomon-Codes). In anderen Beispielen können die Nicht-Datenblöcke 330nC Code-Prüfungsblöcke 330nCC, Wort-Prüfungsblöcke 330nWC und Code-Prüfungs-Wort-Prüfungsblöcken 330nCCWC sein (für geschichtete und verschachtelte Kodierung). Ein Datenblock 330nD ist eine bestimmte Menge an Daten 312. In manchen Implementationen ist ein Datenblock 330nD ein angrenzender Teil der Daten 312 aus der Datei 310. In anderen Implementierungen ist ein Datenblock 330nD ein oder mehrere nicht-angrenzende Anteile der Daten 312 von einer Datei 310. Ein Datenblock 330nD kann z. B. 256 Bytes oder andere Einheiten der Daten 312 sein.
  • Ein beschädigter Block 330 (z. B. Datenblock 330nD oder Nicht-Datenblock 330nC) ist ein Block 330, der einen oder mehrere Fehler enthält. Typischerweise wird ein beschädigter Block 330 mithilfe eines Fehlererkennungscodes 313 identifiziert. Zum Beispiel kann ein beschädigter Block 330 vollständig gelöscht werden (z. B. wenn der Block 330 auf einer Festplatte gespeichert war, die in einem Sturm zerstört wurde) oder bei einem beschädigten Block 330 kann ein Bit umgedreht sein. Ein gesunder Block 330 ist ein Block 330, der nicht beschädigt ist. Ein beschädigter Block 330 kann absichtlich beschädigt werden, zum Beispiel wenn ein besonderer Speicher-Host 110 zur Wartung heruntergefahren wird. Ein beschädigter Block kann ein fehlender oder nicht verfügbarer Block sein. In diesem Fall können die beschädigten Blöcke 330 durch Identifizieren der Blöcke 330 identifiziert werden, die in den Speicher-Hosts 110 gespeichert sind, die heruntergefahren werden.
  • Die Nicht-Datenblöcke 330nC einer Datei 310 beinhalten den Fehlerkorrekturcodeblock 313. Der fehlerkorrigierende Codeblock 313 enthält einen Block 330 mit Daten 312, basierend auf einem oder mehreren Datenblöcken 330nD. In manchen Implementationen hat jeder Codeblock 330nC dieselbe spezifische Größe (z. B. 256 Bytes) wie der Datenblock 330nD. Die Codeblöcke 330nC werden mithilfe eines Fehlerkorrekturcodes 313 generiert, z. B. mit einem Maximal Distance Separable(MDS)-Code. Beispiele von MDS-Codes enthalten die Reed-Solomon-Codes. Verschiedene Techniken können genutzt werden, um Codeblöcke 330nC zu generieren. Zum Beispiel kann ein Fehlerkorrekturcode 313 verwendet werden, der die Datenblöcke 330nD von einem Satz einzigartiger, gesunder Blöcke 330 (entweder Datenblöcke 330nD oder Codeblöcke 330nC) rekonstruieren kann.
  • Ein Codewort ist ein Satz von Datenblöcken 330nD und Codeblöcken 330nC basierend auf diesen Datenblöcken 330nD. Wenn ein MDS-Code verwendet wird, um ein Codewort zu generieren, das d Datenblöcke 330nD und c Codeblöcke 330nC enthält, dann können alle Blöcke 330 (Daten oder Code) rekonstruiert werden, sofern d gesunde Blöcke 330 (Daten oder Code) aus dem Codewort verfügbar sind.
  • 3B zeigt eine Reed-Solomon-Kodierung als Fehlerkorrekturblöcke 313. Jeder Streifen 320 ist in Blöcke 330 aufgeteilt, die in mehreren Speicherressourcen 114 gespeichert sind. Die Blöcke 330 können Datenblöcke 330nD k oder Codeblöcke 330nC m sein, die zusammen ein einzelnes Codewort bilden. Die Datenblöcke 330nD k beinhalten die eigentlichen Daten 312; während die Codeblöcke 330nC m der Parität dienen, um zu bestimmen, ob die Datei 310 intakt ist. Die Reed-Solomon-Kodierung ermöglicht den Verlust bis hin zur gesamten Anzahl der Codeblöcke 330nC m, wobei der Streifen 312 noch aus dem Datenblock 330nD k rekonstruiert werden kann. Deshalb besteht jeder Streifen 320a–n aus einer Datei 310 aus zahlreichen Datenblöcken 330nD k und Codeblöcken 330nC m, die der Kurator 210 auf zahlreiche Speicherressourcen 114 platziert, wobei die Sammlung von Datenblöcken 330nD k und Codeblöcken 330nC m ein einzelnes Codewort bildet. Im Allgemeinen kann der Kurator 210 jeden Streifen 320a–n auf Speicherressourcen 114 ablegen, unabhängig davon, wie die anderen Streifen 320a–n in der Datei 310 auf den Speicherressourcen 114 abgelegt sind. Die Reed-Solomon-Kodierung 313 fügt einer Datei 310 redundante Daten 312 oder Paritätsdaten 312 hinzu, so dass die Datei 310 später von einem Empfänger wiederhergestellt werden kann, selbst wenn eine Reihe Fehler (bis hin zur Möglichkeit der Verwendung des Codes) eingeführt wurden. Die Reed-Solomon-Kodierung 313 wird verwendet, um die Datenintegrität in den Speicher-Hosts 110 zu erhalten, die Daten 312 zur Ausführung (Latenz) zu rekonstruieren oder die Maschinen schneller zu leeren.
  • Bezugnehmend auf 3C3I in geschichteten Kodierungs-(3C3G) oder verschachtelten Kodierungs-(3H3K)Techniken, umfasst ein kodierter Datenbaustein 314 einen Datenbaustein 316 (mit Datenblöcken 330nD) und Fehlerkorrektur-Codeblöcken 313 (d. h. Nicht-Datenblöcke 330nC), der gespeichert ist und gilt als ein zweidimensionales R × C-Array bildend. Es gibt X-Code-Blöcke 330nC für jede Spalte C (genannt „Code-Prüfungsblöcke 330nCC”), die genutzt werden können, um X oder weniger beschädigte Blöcke 330 pro Spalte C zu rekonstruieren. Es gibt Y-Code-Blöcke 330nC (genannt „Wort-Prüfungsblöcke 330nWC”) für das gesamte 2D-Array. Wenn mehr als X beschädigte Blöcke 330 in einer oder mehrerer Spalten C existieren, werden die Wortprüfungsblöcke 330nWC zusammen mit anderen gesunden Blöcken 330 genutzt, um beschädigte Blöcke 330 zu rekonstruieren. Auch wenn einige in dieser Spezifikation beschriebenen Beispiele kodierte Datenbausteine 314 als einen zweidimensionalen Array bildend veranschaulichen (d. h. Datenbausteine 316 und Codeblöcke 330nC (d. h. Nicht-Datenblöcke 330nC)), ist es Kodiertechniken möglich, kodierte Datenbausteine 314 zu erstellen, die unterschiedlich konfiguriert sind. Zum Beispiel können verschiedene Spalten unterschiedliche Anzahlen der Code-Prüfungsblöcke 330nCC haben und Spalten, die Wort-Prüfungsblöcke 330nWC haben, können andere Anzahlen der Reihen R als die Spalten C haben, die Datenblöcke 330nD und Code-Prüfungsblöcke 330nC enthalten.
  • Die Codes 330nC können zum Speichern der Daten 312 über Speicher-Hosts 110 verwendet werden, indem jede Spalte C der Datenblöcke 330nD einem Rechenzentrum zugewiesen wird. Jeder Block 330 in einer Spalte C kann einem Speicher-Host 110 innerhalb eines Rechenzentrums zugeordnet werden. Falls dann X oder weniger Blöcke 330 in einem Rechenzentrum verlorengehen, können die Blöcke 330 unter Verwendung von rein intra-Rechenzentrums-Kommunikation wiederhergestellt werden (es müssen also keine anderen Rechenzentren Daten 312 bereitstellen, um die Rekonstruktion durchzuführen). Falls mehr als X Blöcke 330 in einem oder mehreren Rechenzentren verlorengehen, dann werden die Y Wortprüfungsblöcke 330nWC verwendet, um eine Rekonstruktion zu versuchen. Daher wird die Kommunikation zwischen verschiedenen Rechenzentren (die kostenintensiver sein kann, z B. langsamer als intra-Kommunikation) nur benötigt, wenn mehr als X Blöcke 330 innerhalb eines einzelnen Rechenzentrums beschädigt sind.
  • Die Codes können auch innerhalb eines einzigen Rechenzentrums verwendet werden. Anstatt verschiedene Spalten C verschiedenen Rechenzentren zuzuweisen, speichert das Kodiersystem 102 alle Spalten C in einem einzigen Rechenzentrum. Die Datenblöcke 330nD und Codeblöcke 330nC können in unterschiedlichen Speicher-Hosts 110 innerhalb dieses Rechenzentrums gespeichert werden. Das ist zum Beispiel nützlich, wenn das Lesen der Daten 312 von den Speicher-Hosts 110 während der Rekonstruierung teuer ist (z. B. Zeitaufwendig), so dass das Kodiersystem 102 während der Rekonstruierung weniger Blöcke 330 lesen kann als mithilfe von herkömmlichen Kodierungstechniken erforderlich wäre. Geringe Anzahlen beschädigter Blöcke 330 können durch Auslesen von geringen Anzahlen anderer Blöcke 330 (Code-Prüfungsblöcke 330nCC und sonstige Datenblöcke 330nD in einer Spalte C) rekonstruiert werden und große Anzahlen beschädigter Blöcke 330 können falls erforderlich mithilfe der Wort-Prüfungsblöcke 330nWC rekonstruiert werden. In einigen Beispielen gruppiert der Kurator 210 Datenblöcke 330nD und bestimmte Nicht-Datenblöcke 330nC in einer Gruppe G in einer Weise, die es dem System 100 ermöglicht, die fehlenden Blöcke 330 aus anderen Blöcken 330 der Gruppe G zu rekonstruieren. Die Gruppe G kann eine andere mehrere Spalten C oder Anteile dieser beinhalten.
  • Bezugnehmend auf 3C3G, in einigen Implementierungen zeigt eine geschichtete Kodiertechnik Datenblöcke 330nD und Codeblöcke 330nC, die Codewörter bilden. Ein Fehlerkorrekturcode 313 ist in systematischer Form, wenn resultierende Codewörter in zwei Sätze von Blöcken 330 unterteilt werden können, wobei ein Satz die Datenblöcke 330nD und ein Satz die Codeblöcke 330nC beinhaltet. Ein Code in systematischer Form ist die Maximal trennbare Distanz (MDS), wenn er N Codeblöcke 330nC besitzt und beliebige N beschädigte Blöcke 330 korrigieren kann. Ein geschichteter Code wird aus zwei MDS-Codes in systematischer Form erstellt, z. B. Reed-Solomon-Codes oder Paritätscodes. Ein Code wird verwendet, um die Code-Prüfungsblöcke 330nCC zu erstellen und der andere Code wird verwendet, um die Wort-Prüfungsblöcke 330nWC zu erstellen.
  • Bezugnehmend auf das in Beispiel in 3D3F beinhaltet ein Datenbaustein 316 Datenblöcke 330nD, die mit D0–D41 gekennzeichnet sind und mit einem geschichteten Code kodiert sind. In 3D, erste Spalten von Datenblöcken 330nD ist dargestellt, D0–D5. Zwei Code-Prüfungsblöcke 330nCC sind für die Spalten C0 und C1 gezeigt. C0 und C1 basieren auf D0–D5. Somit bilden D0–D5 und C0–C1 ein Codewort. In 3E, wird ein kodierter Datenbaustein 314 mit dem Datenbaustein 314 (D0–D41) und sechs Codeblöcken C0–C5 gezeigt. C0–C5 basieren auf D0–D41. Somit bilden DG–D41 und C0–C5 ein Codewort.
  • 3F zeigt den resultierenden kodierten Datenbaustein 314, der den Datenbaustein 314 (D0–D41) und weitere Codeblöcke 330nC (Code-Prüfungsblöcke 330nCC und Wort-Prüfungsblöcke 330nWC) beinhaltet. Der i-te Code-Prüfungsblock in Spalte j wird mit Ci,j bezeichnet. Somit sind C0,0 und C1,0 beide Code-Prüfungsblöcke 330nCC für D0–D5.
  • Gemeinsam bilden D0–D5 und C0,0 und C1,0 ein Codewort. Die Wort-Prüfungsblöcke C0–C5 sind in der letzten Spalte rechts dargestellt. Gemeinsam bilden D0–D41 und C0–C5 ein Codewort. C0,7 und C1,7 können auf Basis von C0–C5 generiert werden, so dass C0,7 und C1,7 und C0–C5 ein Codewort bilden.
  • In dem Beispiel in 3F füllen die Wort-Prüfungsblöcke 330nWC eine gesamte Spalte C. Allerdings können geschichtete Codes mit einer beliebigen Anzahl voller Spalten C mit Wort-Prüfungsblöcken 330nWC zuzüglich einer optionalen teilweisen Spalte mit Wort-Prüfungsblöcken 330nWC erstellt werden. Wenn die Datenblöcke 330nD und die Wort-Prüfungsblöcke 330nWC nicht eine integrale Anzahl von Spalten C füllen, können leere Blöcke 330 mit dem Wert null zu dem 2D-Array hinzugefügt werden. Die Blöcke 330 müssen nicht tatsächlich gespeichert werden und sie sind nie fehlerhaft.
  • In der Regel kann ein geschichteter Code mit X Code-Prüfungsblöcken 330nCC k pro Spalte C und N Wort-Prüfungsblöcke 330nWC bis zu X beschädigte Blöcke 330 pro Spalte rekonstruieren, während er nur Inter-Spalten C-Kommunikation ausführt. Wenn nach der Rekonstruktion dieser beschädigten Blöcke 330 N oder weniger beschädigte Blöcke 330 im 2D-Array verbleiben (innerhalb der Daten zuzüglich Wort-Prüfungsblock 330nWC-Anteil des 2D-Arrays) können die beschädigten Blöcke 330 mithilfe der Wort-Prüfungsblöcke 330nWC und den Code-Prüfungsblöcken 330nCC rekonstruiert werden. Dies gilt, da N oder weniger beschädigte Blöcke 330 in den Datenblöcken 330nD zuzüglich der Wort-Prüfungsblöcke 330nWC nur mithilfe der Wort-Prüfungsblöcke 330nWC rekonstruiert werden können. Wenn dann beliebige Code-Prüfungsblöcke 330nCC k beschädigt sind, können sie aus den Datenblöcken 330nD ihrer jeweiligen Spalte C rekonstruiert werden.
  • Bezugnehmend auf 3G verteilt der Kurator 210 in einige Implementierungen Daten 312 mithilfe eines geschichteten Codes. Der Kurator 210 empfängt einen Datenbaustein 316, der Datenblöcke 330nD umfasst (Schritt 362). Beispielsweise kann der Datenbaustein 316 aus einer Datei 310 stammen, die gespeichert ist. Der Datenbaustein 316 kann md·nd Datenblöcke 330nC umfassen, md ist eine Anzahl von Datenreihen und nd ist eine Anzahl von Datenspalten und md und nd sind größer oder gleich eins. Der kodierte Baustein 314 umfasst m·n Blöcke 330, die md·n beinhalten, wobei m die Gesamtanzahl an Reihen R der Datenblöcke 330nD und Nicht-Datenblöcke 330nC ist, und n die Anzahl der Spalten C der Datenblöcke 330nD und Nicht-Datenblöcke 330nC ist; m und n sind größer oder gleich eins. Der Kurator 210 generiert eine oder mehrere Spalten C mit Wort-Prüfungsblöcken 330nWC mithilfe eines ersten Fehlerkorrekturcodes 313 in systematischer Form und den Datenblöcken 330nD (Schritt 364). Die Spalten C der Wort-Prüfungsblöcke 330nWC können unterschiedliche Anzahlen der Wort-Prüfungsblöcke 330nWC in der Spalte C haben. Die Datenblöcke 330nD und die Wort-Prüfungsblöcke 330nWC bilden zusammen ein Codewort.
  • Für jede Spalte C der einen oder mehreren Spalten C der Datenblöcke 330nD generiert der Kurator 210 einen oder mehrere Code-Prüfungsblöcke 330nCC für die Spalte C mithilfe eines zweiten Fehlerkorrekturcodes 313 in systematischer Form und den Datenblöcken 330nD der Spalte C (Schritt 366). Der erste und zweite Fehlerkorrekturcode 313 können unterschiedlich sein. Die Spalten C können verschiedene Anzahlen von Code-Prüfungsblöcken 330nCC besitzen. Das System 100 kann auch Code-Prüfungsblöcke 330nCC für die Spalte C der Wort-Prüfungsblöcke 330nWC generieren. Das System 100 speichert die Datenblöcke 330nD, die Code-Prüfungsblöcke 330nCC und die Wort-Prüfungsblöcke 330nWC (Schritt 368). In einigen Implementierungen ordnet das System 100 jede Spalte C und/oder die Code-Prüfungsblöcke 330nCC in einer Spalte C einer unterschiedlichen Gruppe von Speicher-Hosts 110 zu. In anderen Implementierungen speichert das System 100 die Datenblöcke 330nD und die Codeblöcke 330nC in der gleichen Gruppe von Speicher-Hosts 110, z. B. einem einzelnen Rechenzentrum. Das System 100 kann Datenblöcke 330nD und bestimmte Code-Prüfungsblöcke 330nCC und Wort-Prüfungsblöcke 330nWC in Gruppen G gruppieren, wobei ein ungesunder Block 330 von einem oder mehreren Blöcken 330 der Gruppe G wiederhergestellt werden kann. Deshalb speichert das System 100 die Blöcke 330 einer Gruppe G in unterschiedlichen Speicher-Hosts 110.
  • Wenn das System eine Spalte C von Blöcken 330 einer Gruppe von Speicher-Hosts 110 zuordnet, können die Code-Prüfungsblöcke 330nCC an verschiedenen Standorten generiert werden. Beispielsweise können die Code-Prüfungsblöcke 330nCC von einem zentralen Kodierzentrum (z. B. Der Server 202 von 1B) generiert werden, der die Zuordnung durchführt oder von der Gruppe der Speicher-Hosts 110 nach dem Erhalt einer Spalte C der Datenblöcke 330nD. Bei jeder Gruppe von Speicher-Hosts 110 kann jeder der zugeordneten Datenblöcke 330nD, Code-Prüfungsblöcke 330nCC und Wort-Prüfungsblöcke 330nWC in einem unterschiedlichen Speicher-Host 110 gespeichert werden.
  • Wenn das System 100 einen beschädigten Datenblock 330nD in einer ersten Gruppe von Speicher-Hosts 110 identifiziert, versucht das System 100, den beschädigten Block 330 ohne Kommunikation mit den anderen Gruppe der Speicher-Hosts 110 (mithilfe der Code-Prüfungsblöcke 330nCC) der Gruppe G von Blöcken 330 zu rekonstruieren. In einigen Fällen rekonstruiert das System 100 so viele beschädigte Datenblöcke 330nD der Gruppe G von Blöcken 330 in der ersten Gruppe der Speicher-Hosts 110 wie möglich mithilfe der Code-Prüfungsblöcke 330nCC und aller gesunden Datenblöcke 330nD, die der ersten Gruppe der Speicher-Hosts 110 der Gruppe G von Blöcken 330 zuordnet sind. Wenn das System 100 feststellt, dass der beschädigte Block 330 nicht ohne Kommunikation mit anderen Gruppen von Speicher-Hosts 110, die andere Gruppen von Blöcken 330 haben, rekonstruieren kann, identifiziert das System (z. B. durch Anfordern und Empfangen) gesunder Blöcke 330 von anderen Gruppen von Speicher-Hosts 110, die andere Gruppen G von Blöcken 330 haben, so dass mindestens m·n gesunde Blöcke 330 verfügbar sind, wobei die gesunden Blöcke 330 Datenblöcke 330nD, Wort-Prüfungsblöcke 330nWC oder beides sind und rekonstruiert den beschädigten Datenblock 330nD mithilfe der gesunden Blöcke 330.
  • Bezugnehmend auf 3H3J, zeigt in einigen Implementierungen eine verschachtelte Kodiertechnik Datenblöcke 330nD und Codeblöcke 330nC, die ein Codewort bilden. Wie gezeigt, ist die verschachtelte Kodiertechnik eine zweidimensionale (2D) verschachtelte Kodiertechnik, aber auch eine dreidimensionale (3D) verschachtelte Kodiertechnik kann angewendet werden.
  • Verschachtelte Kodiertechniken unterscheiden sich von geschichteten Kodiertechniken, indem sie eine andere Beziehung zwischen den Code-Prüfungsblöcken 330nCC und den Wort-Prüfungsblöcken 330nWC aufbauen. Ein 2D-verschachtelter Code wird in systematischer Form von einem beliebigen linearen MDS-Code erstellt. Wortprüfungsblöcke 330nWC, die auf einer Dateneinheit 316 basieren, sind in zwei Gruppen aufgeteilt, wobei die erste Gruppe X Codeblöcke 330nC und die zweite Gruppe N Codeblöcke 330nC enthält. Der kodierte Datenbaustein 316 gilt als ein Array von Spalten C bildend und X Codeblöcke 330nC in der ersten Gruppe werden zum Erstellen von X Spaltenblöcken 330 pro Spalte verwendet, indem diese in einzelne Komponenten pro Spalte „gespalten” werden („gespaltene” Code-Prüfungsblöcke 330nCC). Die N Codeblöcke 330nC in der zweiten Gruppe bilden Wortprüfungsblöcke 330nWC.
  • Beispielsweise zeigt 3H einen Datenbaustein 314 (D0–D41) und Codeblöcke (C0–C7) 330nC, die auf dem Datenbaustein 316 (D0–D41) basieren. Die Datenblöcke (D0–D41) 330nD und die Codeblöcke (C0–C7) 330nC bilden ein Codewort. Die Codeblöcke 330nC sind aufgeteilt in eine erste Gruppe, die C0–C1 enthält, und in eine zweite Gruppe, die C2–C7 enthält. C0–C1 werden aufgespalten, um Split-Codeprüfungsblöcke 330nCC zu bilden. C2–C7 werden als Wortprüfungsblöcke 330nWC genutzt.
  • 3I zeigt einen resultierenden kodierten Datenblock 314, der den Datenbaustein 316 (D0–D41) und weitere Codeblöcke 330nC (gespaltene Code-Prüfungsblöcke 330nCC und Wort-Prüfungsblöcke 330nWC) beinhaltet. Um einen gespaltenen Code-Prüfungsblock 330nCC entsprechend C0 für Spalte j (bezeichnet mit C0 j) zu generieren, wird C0 generiert, als ob alle nicht in Spalte j enthaltenen Datenblöcke 330nD den Wert Null hätten. Das heißt, C0 j hat den Wert, der aus den Operationen zur Generierung von C0 mithilfe des vollen Datenbausteins 316 entstanden wäre, aber stattdessen nur die Spalte j, mit allen Spalten auf null verwendet würde. Wenn beispielsweise eine Generatormatrix zur Generierung von C0 für den Datenbaustein 314 verwendet würde, kann die Generatormatrix geändert werden, um C0 j zu generieren, so dass es den Wert besitzt, der aus der Verwendung der ursprünglichen Generatormatrix und der Anwendung dieser ursprünglichen Generatormatrix auf den Datenbaustein 316 entstanden wäre, wenn die Datenblöcke 330nD in den Spalten C außer Spalte j Null wären.
  • Die gespaltenen Code-Prüfungsblöcke 330nCC für C1 j für jede Spalte C werden ähnlich generiert, wobei C1 anstelle von C0 verwendet wird. C0 ist demzufolge eine lineare Kombination aus C0,0–C0,6 und C1 ist eine lineare Kombination aus C1,0–C1,6. Das heißt, C0 = Σ 6 / j=0C0, j; und (1) C1 = Σ 6 / j=0C1, j. (2)
  • Die mit „?” bezeichneten Blöcke 330 in 3I können auf verschiedene Arten generiert werden, z. B. wie weiter unten beschrieben unter Bezugnahme auf 3J.
  • In dem Beispiel der 3H und 3I beinhaltet der resultierende kodierte Datenbaustein 314 42 Datenblöcke 330nD und 8 Codeblöcke 330nC. Bezugnehmend auf den ursprünglichen Code, der zur Erstellung des kodierten Bausteins verwendet wurde, gehören die Codeblöcke 330nC wie oben beschrieben zu einer von zwei Gruppen, X = 2 sich in der ersten Gruppe und N = 6, die sich in der zweiten Gruppe befinden. Immer, wenn zwei oder weniger (X oder weniger) beschädigte Blöcke 330 in einer der ersten sieben Spalten sind, können die beschädigten Blöcke 330 mithilfe der gesunden Blöcke 330 der Spalten C und den gespaltenen Code-Prüfungsblöcken 330nCC für die Spalte C korrigiert werden. Um dies zu sehen, soll j die Spalte C einschließlich der zwei oder weniger beschädigten Blöcke 330 kennzeichnen und das Codewort, das durch Rückstellung auf null aller Datenblöcke 330nD von den Spalten C mit Ausnahme von j erhalten wurde, berücksichtigen. In diesem Codewort ist C0 = C0 j und C1 = C1 j. Als Resultat daraus seien die zwei oder weniger beschädigten Blöcke 330 in anderen Spalten als denen, die nur Null-Datenblöcke 330nD enthalten, und durch Ansicht der Wortprüfungscodes 330nWC als beschädigt.
  • In dem Beispiel in 3F füllen die Wort-Prüfungsblöcke 330nWC vollständig eine ganze Spalte C aus (die Spalte rechts), 2D-verschachtelte Codes 313b können mit einer beliebigen Anzahl an Spalten C der Wort-Prüfungsblöcken 330nWC gebildet werden. Die Spalten C der Wort-Prüfungsblöcke 330nWC können die gleiche Anzahl an Reihen R wie die Spalten der Datenblöcke 330nD haben oder unterschiedliche Anzahlen von Reihen R und die Spalten C der Wort-Prüfungsblöcke 330nWC können jeweils unterschiedliche Anzahlen von Reihen R haben. Die Spalten C aus Wortprüfungsblöcken 330nWC können, müssen aber nicht, Codeprüfungsblöcke 330nCC besitzen, d. h. Code-Wort-Prüfungsblöcke 330nCCWC. Durch Steigerung der Anzahl der Wort-Prüfungsblöcke 330nWC wird die Zuverlässigkeit der gespeicherten Daten 312 erhöht, aber es werden mehr Speicherplatz und mehr Speicher-Hosts 110 verwendet. In der Regel umfassen die Spalten C für verschachtelte Codes entweder Datenblöcke 330nD oder Wort-Prüfungsblöcke 330nWC und nicht beides.
  • Im Allgemeinen kann ein 2D-verschachtelter Code mit X gespaltenen Code-Prüfungsblöcken 330nCC pro Spalte C und N Wort-Prüfungsblöcken 330nWC verwendet werden, um X beschädigte Blöcke 330 pro Spalte C zu rekonstruieren (in diesem Spalten, die Datenblöcke 330nD umfassen), obwohl sie nur Inter-Spaltenkommunikation ausführen (was typisch ist, d. h. Kommunikation Inter-Rechenzentren). Mit der Rekonstruktion zahlreicher beschädigter Blöcke 330 innerhalb des kodierten Bausteins 314 werden diese beschädigten Blöcke 330 normalerweise zuerst rekonstruiert, da die Inter-Spaltenkommunikation weniger teuer als die Inter-Rechenzentrum-Kommunikation ist, aber andere beschädigte Blocks 330 können verbleiben. Falls nach der Rekonstruktion von beschädigten Blöcken 330 innerhalb von Spalten (N + X) oder weniger andere Blöcke 330 immer noch beschädigt sind (da sie nicht durch intra-Spalten-Kommunikation rekonstruiert werden konnten), können diese anderen beschädigten Blöcke 330 mithilfe der Wortprüfungsblöcke 330nWC und der Split-Codeprüfungsblöcke 330nCC rekonstruiert werden. Die Wort-Prüfungsblöcke 330nWC in der ersten Gruppe (C0 und C1 in 4B) können aus den gespaltenen Code-Prüfungsblöcken 330nCC bestimmt werden, z. B. Mithilfe der Formel Ci = Σ 6 / j=0Ci, j, selbst wenn diese Wort-Prüfungsblöcke 330nWC nicht explizit gespeichert werden.
  • Um dies zu sehen, soll Z die Anzahl der Wort-Prüfungsblöcke 330nWC kennzeichnen, die beschädigt sind und Y soll die Anzahl der Wort-Prüfungsblöcke 330nWC in der ersten Gruppe kennzeichnen, die nicht entsprechend der Formel Ci = Σ 6 / j=0C0, j für gespaltene beschädigte Code-Prüfungsblöcke 330nCC von ihren entsprechenden gespaltenen Code-Prüfungsblöcken 330nCC rekonstruiert werden können. Mithilfe dieser Formel können X – Y Wort-Prüfungsblöcke 330nWC von der ersten Gruppe bestimmt werden, was zu einem Codewort führt (z. B. das in 3H dargestellte) mit Y beschädigten Wort-Prüfungsblöcken 330nWC in der ersten Gruppe und Z beschädigten Wort-Prüfungsblöcken 330nWC in der zweiten Gruppe. Da es maximal N + X beschädigte Blöcke 330 gibt, existieren maximal N + X-Y-Z beschädigte Datenblöcke 330nD. Daher ist es möglich, das resultierende Codewort zu nutzen, um alle beschädigten Blöcke 330 zu rekonstruieren, da es maximal N + X-Y-Z + Y + Z beschädigte Blöcke 330 gibt.
  • Bezugnehmend auf 3J umfasst in einigen Implementierungen der resultierende kodierte Baustein 314 Code-Prüfungsblöcke 330nCC für die Wort-Prüfungsblöcke 330nWC (d. h. Code-Prüfungs-Wort-Prüfungsblöcke 330nCCWC). Verglichen mit dem kodierten Baustein von 3I beinhaltet der kodierte Baustein 314 von 3J die Code-Prüfungsblöcke C0,7 und C1,7 330nCC anstelle der mit „?” gekennzeichneten Standorte in 3I. Dies ist ein Weg, die Rekonstruktion von beschädigten Wortprüfungsblöcken 330nWC zu ermöglichen, ohne auf inter-Spalten-Kommunikation angewiesen zu sein. Die Code-Prüfungsblöcke C0,7 und C1,7 330nCC können auf verschiedene Weise generiert werden. Zum Beispiel können diese Codeprüfungsblöcke 330nCC basierend auf C2–C7 erzeugt werden, auf dieselbe Art, wie C0,0 und C1,0 basierend auf D0–D5 erzeugt werden. Der resultierende kodierte Baustein 314 von 3J (mithilfe des Beispiels des verschachtelten Codes) kann verwendet werden, um nach der Durchführung der Inter-Spalten-Rekonstruktion bis zu acht beschädigte Blöcke 330 zu rekonstruieren, wogegen der resultierende kodierte Baustein von 3E (mithilfe des Beispiels des geschichteten Codes) verwendet werden kann, um nach der Durchführung der Inter-Spalten-Rekonstruktion bis zu sechs beschädigte Blöcke 330 zu rekonstruieren. Codeprüfungsblöcke 330nC können jeder Anzahl an Spalten hinzugefügt werden, die Wortprüfungsblöcke 330nWC enthalten.
  • Bezugnehmend auf 3K verteilt der Kurator 210 in einige Implementierungen Daten 312 mithilfe eines verschachtelten Codes 313b. Das System 100 erhält eine Dateneinheit 316 (Schritt 372). Der Datenbaustein 316 kann md·nd Datenblöcke 330nC umfassen, md ist eine Anzahl von Datenreihen und nd ist eine Anzahl von Datenspalten und md und nd sind größer oder gleich eins. Der kodierte Baustein 314 umfasst m·n Blöcke 330, die md·nd, beinhalten, wobei m die Gesamtanzahl an Reihen R der Datenblöcke 330nD und Nicht-Datenblöcke 330nC ist, und n die Anzahl der Spalten C der Datenblöcke 330nD und Nicht-Datenblöcke 330nC ist; m und n sind größer oder gleich eins. Das System 100 generiert eine oder mehr Spalten C von Wort-Prüfungsblöcken 330nWC mithilfe eines ersten linearen Fehlerkorrekturcodes 313 in systematischer Form und den Datenblöcken 330nD (Schritt 374). Die Wort-Prüfungsblöcke 330nWC und die Datenblöcke 330nD der gleichen Reihe R bilden ein Codewort. Für jede md Spalte mit Datenblöcken 330nC erzeugt das System 100 einen oder mehrere Split-Codeprüfungsblöcke 330nCC für die Spalte C (Schritt 376). Die gespaltenen Code-Prüfungsblöcke 330nCC werden so generiert, dass eine lineare Kombination aus n gespaltenen Code-Prüfungsblöcken 330nCC von unterschiedlichen Spalten C einen ersten Wort-Prüfungsblock 330nWC eines ersten Codeworts einschließlich den Datenblöcken 330nD und den m Wort-Prüfungsblöcken 330nWC bildet. Der erste Wortprüfungsblock 330nWC (und alle anderen aus einer linearen Kombination von Split-Codeprüfungsblöcken 330nCC aus verschiedenen Spalten C resultierenden Wortprüfungsblöcke 330nWC) bildet ein Codewort mit den Datenblöcken 330nD und den in Schritt 374 erzeugten Wortprüfungsblöcken 330nWC. Die Split-Codeprüfungsblöcke 330nCC können z. B. für jede Spalte C mithilfe eines aufspaltenden Fehlerkorrekturcodes 313 und den md Datenblöcken 330nD oder den Wortprüfungsblöcken 330nWC erzeugt werden, worin der aufspaltende Fehlerkorrekturcode 313 eine Split-Generatormatrix enthält, die auf dieselbe Weise kodiert wie eine Generatormatrix für den ersten Fehlerkorrekturcode 313, angewendet auf die Datenblöcke 330nD, wobei die Datenblöcke 330nD der Spalten C außer der Spalte C auf null gesetzt werden.
  • Das System 100 speichert die Spalte C der Datenblöcke 330nD, die gespaltenen Code-Prüfungsblöcke 330nCC und die Wort-Prüfungsblöcke 330nWC (Schritt 378). In einigen Implementierungen speichert das System 100 alle Blöcke 330 in einer einzigen Gruppe von Speicher-Hosts 110. In einigen Implementierungen ordnet das System 100 alle jede Spalte C einer unterschiedlichen Gruppe von Speicher-Hosts 110 zu. In einigen Implementierungen gruppiert das System 100 Blöcke 330, die aus anderen 330 innerhalb der Gruppe G rekonstruiert werden können und ordnet die Blöcke 330 der Gruppe G unterschiedlichen Gruppen von Speicher-Hosts 110 zu.
  • Wenn das System 100 einen oder mehrere beschädigte Blöcke 330 identifiziert, kann das System 100 die beschädigten Blöcke 330 mithilfe der gespaltenen Code-Prüfungsblöcke 330nCC und der Wort-Prüfungsblöcke 330nWC rekonstruieren. Typischerweise versucht das System 100 die beschädigten Blöcke 330 mithilfe der gespaltenen Code-Prüfungsblöcke 330nCC und anderer Datenblöcke 330nd in der gleichen Spalte C zu rekonstruieren. Wenn nach der Rekonstruktion der beschädigten Blöcke 330 mithilfe der alleinigen gespaltenen Code-Prüfungsblöcke 330nCC einige beschädigte Blöcke 330 verbleiben, verwendet das System 100 die Wort-Prüfungsblöcke 330nWC für die Rekonstruktion einschließlich der Wort-Prüfungsblöcke 330nWC, die durch Bestimmung einer linearen Kombination der gespaltenen Code-Prüfungsblöcke 330nCC bestimmt werden können. Wenn darüber hinaus nach der Rekonstruktion der beschädigten Blöcke 330 mithilfe der alleinigen gespaltenen Code-Prüfungsblöcke 330nCC der Blöcke 330 einer Gruppe G einige beschädigte Blöcke 330 verbleiben, verwendet das System 100 Blöcke 330 von anderen Gruppen G von Blöcken 330, um die beschädigten Blöcke 330 zu rekonstruieren.
  • Erneut bezugnehmend auf 2 enthalten in einigen Implementierungen die vom Kurator 210 gespeicherten Dateideskriptoren 300 1-n Metadaten 212, wie z. B. die Dateikarte 214, die die Streifen 320a–n gegebenenfalls den Datenblöcke 320nd k und den Nicht-Datenblöcken 320nc m zuordnet, die auf den Speicher-Hosts 110 gespeichert sind. Um eine Datei 310 zu öffnen, sendet ein Client 120 eine Anfrage 122 an den Kurator 210, der einen Dateideskriptor 300 zurücksendet. Der Client 120 verwendet den Dateideskriptor 300, um Dateisegment-Offsets in entfernte Speicherorte 115a–n zu übersetzen. Der Dateideskriptor 300 kann einen Client-Schlüssel 302 beinhalten (z. B. einen 32-bit-Schlüssel), der eindeutig für einen Block 330 auf einem Speicherhost 110 ist, und der zum RDMA-Lesen dieses Blocks 330 verwendet wird. Nachdem der Client 120 den Dateideskriptor 300 lädt, kann der Client 120 über RDM A oder ein anderes Verfahren des Datenabrufs auf die Daten 312 einer Datei 310 zugreifen.
  • Der Kurator 210 kann die Statusinformationen für alle Speicher-Hosts 110, die Teil der Zelle 200 sind, pflegen. Die Statusinformationen können Kapazität, freien Raum, Auslastung des Speicher-Hosts 110, Latenz des Speicher-Hosts 110 aus Sicht eines Clients und einen aktuellen Zustand umfassen. Der Kurator 210 kann diese Informationen durch Abfrage des Speicher-Hosts 110 in der Zelle 200 direkt und/oder durch Abfrage eines Clients 120 erhalten, um Latenzstatistiken aus Sicht eines Clients zu sammeln. Bei einigen Beispielen verwendet der Verwalter 210 die Statusinformationen des Speicher-Hosts, um Entscheidungen über einen Neuausgleich, eine Leerung oder eine Wiederherstellung zu treffen und Entscheidungen zuzuordnen.
  • Der/die Kurator(en) 210 können Blöcke 330 zuweisen, um Client-Anfragen 122 für mehr Speicherplatz in einer Datei 310 und den Wiederausgleich und die Wiederherstellung zu verwalten. Der Kurator 210 kann eine Auslastungstabelle 216 der Auslastung und Lebendigkeit eines Speicher-Hosts pflegen. In einigen Implementierungen weist der Kurator 210 einen Block 330 zu, indem er eine Liste von Kandidaten-Speicher-Hosts 110 generiert und eine zuweisende Blockanfrage 122 an jeden der Kandidaten-Speicher-Hosts 110 sendet. Wenn der Speicherhost 110 überladen ist oder keinen verfügbaren Speicherplatz hat, kann der Speicherhost 110 die Anfrage 122 ablehnen. In diesem Fall wählt der Verwalter 210 einen anderen Speicher-Host 110 aus. Jeder Verwalter 210 kann seinen spezifischen Anteil des Dateinamensraums fortlaufend durchsuchen und alle Metadaten 212 etwa jede Minute überprüfen. Der Verwalter 210 kann das Datei-Scanning nutzen, um die Integrität der Metadaten 212 zu prüfen, auszuführende Arbeiten zu ermitteln und/oder Statistiken zu generieren. Der Datei-Scan kann nebenläufig zu anderen Operationen des Verwalters 210 ausgeführt werden. Der Scan selbst ändert die Metadaten 212 eventuell nicht, sondern plant Arbeiten, die von anderen Komponenten des Systems 100 ausgeführt werden sollen und berechnet Statistiken.
  • In einigen Implementierungen kann der Prozessor 202 eine oder mehrere der Datenblöcke 330nD und eine oder mehrere der Nicht-Datenblocke 330nC in einer Gruppe G gruppieren. Der eine oder mehrere Blöcke 330 der Gruppe G können aus anderen Blöcken 330 der Gruppe G rekonstruiert werden. Deshalb liest der Kurator 210 bei der Rekonstruktion von Blöcken 330 einer Gruppe G Blöcke 330 der Gruppe G aus, um beschädigte Blöcke 330 innerhalb der Gruppe G zu rekonstruieren. Dies ermöglicht eine effizientere Rekonstruktion fehlender Blöcke 330 und die Anzahl der ausgelesenen Blöcke 330 wird reduziert. Insbesondere kann die Reduzierung der Anzahl der Blockauslesungen die Kosten des Auslesens mindern, da weniger Auslesungen auf Hardware-Geräte (z. B. Speicher-Hosts 114) durchgeführt werden und die Latenzzeit der Rekonstruktion gemindert wird, da es weniger wahrscheinlich ist, dass auf langsame Geräte zugegriffen wird.
  • Bezugnehmend auf 4A4C kann der Kurator 210 eine Wartungshierarchie 400 des verteilten Speichersystems 100 festlegen, um die Ebenen (z. B. Ebenen 1–5) zu identifizieren, auf denen Wartungsarbeiten ohne Beeinträchtigung des Nutzerzugangs zu den gespeicherten Daten 312 erfolgen können, die Wartung kann das Versorgungsnetz, das Kühlsystem (4C), das Netzwerk, Aktualisierung oder Austausch von Teilen oder sonstige Wartungsarbeiten umfassen oder Stromausfall, der das verteilte Speichersystem 100 beeinflusst.
  • Die Wartungshierarchie 400 identifiziert Ebenen (z. B. Ebenen 1–5) der Wartungsdomänen 402, wobei jede Wartungsdomäne 402 sich in einem aktiven Zustand oder einem inaktiven Zustand befinden kann. Jeder Speicher-Host 110 des verteilten Speichersystems 100 ist mit einer oder mehreren Wartungsdomänen 402 assoziiert. Darüber hinaus teilt der Prozessor 202 die Verbindung der Speicher-Hosts 110 den Wartungsdomänen 402 und ihren Komponenten 410, 420, 430, 440, 114 zu. 4A zeigt eine strenge Hierarchie 400a, wo jede Komponente 410, 420, 430, 440, 114 von einer anderen Komponente 410, 420, 430, 440, 114 abhängt, während 4B eine nicht-strenge Hierarchie 400b zeigt, wo eine Komponente 410, 420, 430, 440, 114 mehr als einen Input-Feed hat. In einigen Beispielen speichert der Prozessor 202 die Wartungshierarchie 400 im nicht flüchtigen Speicher 204 des Prozessors 202. Beispielsweise ist die Speicherressource 114a einem Rack 440a zugeordnet, das einer Busleitung 430a zugeordnet ist, der wiederum einem Verteilerzentrum von Leistungsmodulen 420a zugeordnet ist, das wiederum einem Antriebsaggregat 410a zugeordnet ist. Der Prozessor 202 bestimmt basierend auf den Zuordnungen der Komponenten 410, 420, 430, 440, 114, welche Speicher-Hosts 110 inaktiv sind, wenn eine Komponente 410, 420, 430, 440, 114 gewartet wird. Sobald das System 100 den Speicherressourcen 114 die Wartungsdomänen 402 zuordnet, bestimmt das System 100 eine höchste Ebene (z. B. Ebenen 1–5), auf der die Wartung erfolgen kann, während die Datenverfügbarkeit erhalten bleibt.
  • Eine Wartungsdomäne 402 umfasst eine Komponente 410, 420, 430, 440, 114, die gewartet wird und alle von dieser Komponente 410, 420, 430, 440, 114 abhängenden Komponenten. Deshalb ist diese Komponente 410, 420, 430, 440, 114 inaktiv, wenn eine Komponente 410, 420, 430, 440, 114 der Wartung unterzogen wird, und jede Komponente 410, 420, 430, 440, 114 in der Wartungsdomäne 402 der Komponente 410, 420, 430, 440, 114 ist ebenso inaktiv. Wie in 4A, Komponenten der Ebene 1 können die Speicherressourcen 114a–n umfassen; Komponenten der Ebene 2 können Racks 440a–n umfassen; Komponenten der Ebene 3 können Busleitungen 430a–n umfassen; Komponenten der Ebene 4 können Verteilerzentren für Leistungsmodule 420a420n umfassen; und Komponenten der Ebene 5 können die Leistungsaggregate 410 umfassen, die den Komponenten der Ebenen 1–4 Strom liefern. Es kann auch eine weitere Komponentenverteilung verfügbar sein. Wenn ein Speicher-Host 110a gewartet wird, umfasst eine Wartungsdomäne 402a der Ebene 1 den Speicher-Host 110 und das Speichergerät 114 ist inaktiv. Wenn ein Rack 440a gewartet wird, ist eine Wartungsdomäne 402b einer Ebene 2, die das Rack 440a und die Speicher-Hosts 110 umfasst, die von dem Rack 440a abhängen in einem inaktiven Zustand. Wenn eine Busleitung 430a gewartet wird, ist eine Wartungsdomäne 402c einer Ebene 3, die die Busleitung 430a und beliebige Komponenten der Ebenen 1 und 2 umfasst, die von der Busleitung 430a abhängen, in einem inaktiven Zustand. Wenn ein Verteilerzentrum von Leistungsmodulen 420a gewartet wird, ist eine Wartungsdomäne 402d einer Ebene 4, die das Verteilerzentrum von Leistungsmodulen 420a und beliebige Komponenten der Ebenen 1 bis 3 umfasst, die von dem Verteilerzentrum von Leistungsmodulen 420a abhängen, in einem inaktiven Zustand. Wenn schließlich ein Antriebsaggregat 410 gewartet wird, ist die Wartungsdomäne 402e einer Ebene 5 einschließlich aller Verteilerzentren von Leistungsmodulen 420, Busleitungen 430, Racks 440 und Speicher-Hosts 110, die von dem Antriebsaggregat 410 abhängen, inaktiv und deshalb kann ein Benutzer nicht auf die Daten 312 zugreifen, die sich in der Wartungsdomäne 402a der Ebene 1 befinden.
  • In einigen Beispielen hat, wie in 4B gezeigt, eine nicht-strenge Hierarchie 400b-Komponente 410, 420, 430, 440, 114 duale Feeds, d. h. die Komponente 410, 420, 430, 440, 114 hängt von zwei oder mehr anderen Komponenten 410, 420, 430, 440, 114 ab. Beispielsweise kann eine Schienenleitung 430n eine Versorgung von zwei Strommodulen 420 aufweisen, und/oder ein Rack 440 kann eine duale Versorgung von zwei Schienenleitungen 430 erhalten. Wie gezeigt, kann eine erste Wartungsdomäne 402c zwei Racks 440a und 440n umfassen, wobei das zweite Rack 440n zwei Feeds von zwei Busleitungen 430a, 430n umfasst. Deshalb ist das zweite Rack 440n Teil der beiden Wartungsdomänen 402ca und 402cb. Deshalb werden die höheren Ebenen der Wartungshierarchie 400 erhalten, ohne den Verlust der niedrigeren Ebenen der Wartungshierarchie 400 zu verursachen. Dies bewirkt eine Redundanz im System 100, was eine Datenverfügbarkeit möglich macht. Insbesondere kann das Strommodul-Verteilzentrum 420 gewartet werden, ohne dass eine der Schienenleitungen 430 verloren geht, die davon abhängig ist. In einigen Beispielen umfassen die Racks 440 ein dual angetriebenes Rack 440, das die Wartung der Busleitung 430 ohne Energieverlust zu den dual angetriebenen Racks 440 ermöglicht, die von diesem abhängen. In einigen Beispielen werden Wartungsdomänen 402, die gewartet werden, ohne Ausfälle zu verursachen, beim Verteilen von Blocks 330 ignoriert, um die Wartung zu ermöglichen; allerdings können die ignorierten Wartungsdomänen 402 beim Verteilen der Blöcke 330 beinhaltet sein, da ein ungeplanter Ausfall immer noch den Verlust von Blöcken 330 verursachen kann.
  • In einigen Beispielen, wie in 4C gezeigt, ist die Wartungshierarchie 400 eine Kühlhierarchie 400c (oder eine Kombination einer Energiehierarchie 400a, 400b) und eine Kühlhierarchie 400c. Die Kühlhierarchie 400c ordnet den Racks 440 eine Kühlvorrichtung 442 zu, die kühlt. Wie gezeigt, kann eine Kühlvorrichtung 442 ein oder mehrere Racks 440 abkühlen. Der Prozessor 202 speichert die Verbindung der Speicher-Hosts 110 mit den Kühlwartungsdomänen 402f. In einigen Implementierungen berücksichtigt der Prozessor 202 alle möglichen Wartungskombinationen, die innerhalb des Speichersystems 100 erfolgen können, um eine Hierarchie 400 oder eine Kombination der Hierarchien 400a, 400b, 400c zu bestimmen.
  • Wenn daher eine Komponente 410, 420, 430, 440, 114 im Speichersystem 100 gewartet wird, befindet sich diese Komponenten 410, 420, 430, 440, 114 und alle Komponenten 410, 420, 430, 440, 114, die dieser Komponente 410, 420, 430, 440, 114 zugeordnet ist oder von ihr abhängt, in einem inaktiven Zustand. Eine Komponente 410, 420, 430, 440, 114 in einem inaktiven Zustand ist für einen Benutzer nicht zugänglich, während eine Komponente 410, 420, 430, 440, 114 in einem aktiven Zustand für einen Benutzer zugänglich ist und es einem Benutzer ermöglicht, auf die auf dieser Komponente 410, 420, 430, 440, 114 oder auf einem Speicher-Host 110, der der Komponente 410, 420, 430, 440, 114 zugeordnet ist, gespeicherten Daten 312 zuzugreifen. Wie zuvor erwähnt ist ein Benutzer während des inaktiven Zustands unfähig, auf die Speicher-Hosts 110 zuzugreifen, die mit der gewarteten Wartungsdomäne 402 assoziiert ist, zuzugreifen; und deshalb ist der Benutzer unfähig, auf die Dateien 310 (z. B. Blöcke 330, die Streifenrepliken 330n k, Datenblöcke 330nD k und Codeblöcke 330nC m umfassen) zuzugreifen.
  • In einigen Implementierungen beschränkt der Prozessor 202 eine Anzahl von Blöcken 330 innerhalb einer Gruppe G, die auf Speicher-Hosts 110 einer beliebigen Wartungsdomäne 402 verteilt sind, beispielsweise basierend auf die Zuordnung der Komponenten 410, 420, 430, 440, 114. Deshalb bewahrt der Prozessor 202 die Zugänglichkeit zur Gruppe G, wenn eine Wartungsdomäne 402 der Ebene 1 inaktiv ist (d. h. Die ungesunden Blöcke 330 können rekonstruiert werden), obwohl einige Blöcke 330 nicht zugänglich sein könnten. In einigen Beispielen bestimmt der Prozessor 202 für jede Gruppe G von Blöcken 330 eine Höchstanzahl von Blöcken 330, die in einen Speicher-Host 110 innerhalb einer einzigen Wartungsdomäne 402 gegeben werden, so das, wenn eine Wartungsdomäne 402, die mit dem Speicher-Host 110 assoziiert ist, der Blöcke 330 für eine Datei 310 speichert, gewartet wird, der Prozessor 202 immer noch die Blöcke 330 innerhalb der Gruppe G abrufen kann. Die Höchstanzahl von Blöcken 330 stellt sicher, dass der Prozessor 202 fähig ist, die Anzahl der Blöcke 330 der Gruppe G zu rekonstruieren, obwohl einige Blöcke 330 möglicherweise nicht verfügbar sind. In einigen Beispielen ist die Höchstanzahl von Blöcken 330 einer Gruppe G auf den geringsten Schwellenwert festgelegt, um Systemausfälle zu kompensieren, aber gleichzeitig noch fähig ist, die Gruppe G der Blöcke 330 zu rekonstruieren. Wenn der Prozessor 202 Blöcke 330 auf die Speicher-Hosts 110 gibt, stellt der Prozessor 202 sicher, dass innerhalb einer Gruppe G von Blöcken 330 eines Streifens 320 nicht mehr als die Höchstanzahl von Blöcken 330 inaktiv ist, wenn eine einzige Wartungsdomäne 402 gewartet wird.
  • Bezugnehmend auf 5A7B bestimmt der Prozessor 202 in einigen Implementierungen eine Verteilung der Blöcke 330 einer Gruppe G unter den Speicher-Hosts 110. In einigen Beispielen trifft der Prozessor 202 eine erste zufällige Auswahl 150 an Speicher-Hosts 110 aus einem verfügbaren Pool an Speichergeräten 140, um die Blöcke 330 der Gruppe G zu speichern. Der Prozessor 202 wählt eine Anzahl von Speicher-Hosts 110 (z. B. ausgewählter Speicher-Host 110S) aus, die der Anzahl von Blöcken 330 in der Gruppe G entspricht. Dann bestimmt der Prozessor 202, ob die Auswahl 150 der ausgewählten Speicher-Hosts 110S fähig ist, die Zugänglichkeit zu der Gruppe G zu erhalten (d. h. die Blöcke 330 der Gruppe G sind verfügbar), wenn eine oder mehr (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden. Die zufällige Auswahl 150 hat das Ziel, die Rekonstruktion der Gruppe G zu erlauben, wenn die Wartung auf einer der Wartungskomponenten 410, 420, 430, 440, 114 erfolgt.
  • Bezugnehmend auf 5A und 5B in einigen Beispielen, wenn der Prozessor 202 bestimmt, dass die erste zufällige Auswahl 150a ausgewählter Speicher-Hosts 110S unfähig ist, die Zugänglichkeit der Gruppe G zu erhalten, wenn eine oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden, bestimmt der Prozessor 202 eine zweite zufällige Auswahl 150b ausgewählter Speicher-Hosts 110S, die mit der Anzahl an Blöcken 330 der Gruppe G übereinstimmt. Dann bestimmt der Prozessor 202, ob die zweite zufällige Auswahl 150b der ausgewählten Speicher-Hosts 110S fähig ist, die Zugänglichkeit zu der Gruppe G zu erhalten, wenn ein oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden. Wenn der Prozessor 202 bestimmt, dass die zweite zufällige Auswahl 150b unfähig ist, die Zugänglichkeit der Gruppe G zu erhalten, wenn eine oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden, fährt der Prozessor 202 fort, zufällige Auswahl 150n ausgewählter Speicher-Hosts 110S zu treffen, bis der Prozessor 202 eine zufällige Auswahl 150n ausgewählter Speicher-Hosts 110S identifiziert, die fähig ist, die Zugänglichkeit zu der Gruppe G zu erhalten.
  • Bezugnehmend auf 6A und 6B in einigen Beispielen, wenn der Prozessor 202 bestimmt, dass die erste zufällige Auswahl 150a ausgewählter Speicher-Hosts 110S unfähig ist, die Zugänglichkeit zu der Gruppe G zu erhalten, wenn eine oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden, ändert der Prozessor 202 die erste zufällige Auswahl 150a ausgewählter Speicher-Hosts 110S, durch Hinzufügen eines oder mehrerer zufällig gewählter Speicher-Hosts 110S und Entfernen einer entsprechenden Anzahl anderer Speicher-Hosts 110S. Dann bestimmt der Prozessor 202, ob die aktualisierte erste zufällige Auswahl 150a fähig ist, die Zugänglichkeit zu der Gruppe G zu erhalten, wenn ein oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden. Wenn der Prozessor 202 bestimmt, dass die aktualisierte erste zufälige Auswahl 150a unfähig ist, die Zugänglichkeit der Gruppe G zu erhalten, wenn eine oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden, aktualisiert der Prozessor 202 die Auswahl 150a ausgewählter Speicher-Hosts 110S durch Hinzufügen oder Entfernen eines oder mehrerer zufällig ausgewählter Speicher-Hosts 110S. Der Prozessor 202 fährt fort, die zufällige Auswahl 150a der Speicher-Hosts 110 zu aktualisieren, bis der Prozessor 202 bestimmt, dass die ausgewählten Speicher-Hosts 110S fähig sind, die Zugänglichkeit zur Gruppe G von Blöcken 330 während der Wartung des verteilten Speichersystems 100 zu erhalten. Sobald der Prozessor 202 diese Entscheidung trifft, geht der Prozessor 202 zum nächsten Streifen 320 (oder Datei 310) über, um eine Verteilung des nächsten Streifens 320 zu bestimmen. In einigen Implementierungen bestimmt der Prozessor 202 die zufällige Auswahl 150 ausgewählter Speicher-Hosts 110S durch Verwendung einer Wahrscheinlichkeitsstichprobe, einer einfachen Stichprobe oder einer Kombination aus diesen.
  • Bezugnehmend auf 7A und 7B, bestimmt der Prozessor 202 in einigen Implementierungen eine Anzahl von Blöcken 330 in einer Gruppe G von Blöcken 330. Dann wählt der Prozessor 202 eine ausgewählte Liste 162 mit einer fortlaufenden Anzahl von Speicher-Hosts 110a–n entsprechend einer Anzahl von Blöcken 330 der Datei 310 aus einer geordneten Ringliste 160 von Speicher-Hosts 110 des verteilten Speichersystems 100 aus, wobei die geordnete Ringliste 160 mit einem ersten Speicher-Host 110a beginnt. Die Liste 160 kann im nicht flüchtigen Speicher 204 des Prozessors 202 gespeichert werden. Der Prozessor 202 bestimmt dann, ob die ausgewählten Speicher-Hosts 110a–n aus der ausgewählten Liste 162 gemeinsam unfähig sind, die Zugänglichkeit zur Gruppe G von Blöcken 330 zu erhalten, wenn eine oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden. Wenn der Prozessor 202 bestimmt, dass die ausgewählten Speicher-Hosts 110a–n gemeinsam unfähig sind, die Zugänglichkeit zu der Gruppe G von Blöcken 330 zu erhalten, wenn eine oder mehrere (oder eine Schwellenanzahl) Wartungsdomänen 402 sich in einem inaktiven Zustand befinden, wählt der Prozessor 202 eine andere ausgewählte Liste 162 mit einer fortlaufenden Anzahl Speicher-Hosts 110a–n aus der geordneten Ringliste 160 entsprechend der Anzahl an Blöcken 330 des Streifens 320 der Datei 310 aus. In einigen Beispielen geht der Prozessor 202 nach dem ersten Speicher-Host 110n auf einen zweiten Speicher-Host 110(n + 1) in der geordneten Ringliste 160 über, wenn der Prozessor 202 feststellt, dass die Speicher-Hosts 110a–n der ausgewählten Liste 162 gemeinsam unfähig sind, die Zugänglichkeit zu der Gruppe G der Blöcke 330 zu erhalten. Bei anderen Beispielen bewegt sich der Prozessor 202 um eine zuvor festgelegte Anzahl an Positionen in der sortierten Ringliste 160 nach unten. In einigen Implementierungen bestimmt der Prozessor 202 die geordnete Ringliste 160 der Speicher-Hosts 110 des Speichersystems 100, wobei benachbarte Speicher-Hosts 110 oder eine Schwellenanzahl von aufeinanderfolgenden Speicher-Hosts 110 auf der geordnete Ringliste 160 mit verschiedenen Wartungsdomänen 402 assoziiert sind. Zusätzlich oder alternativ bestimmt der Prozessor 202 die geordnete Ringliste 160 der Speicher-Hosts 110 des Speichersystems 100, wobei benachbarte Speicher-Hosts 110 oder eine Schwellenanzahl von aufeinanderfolgenden Speicher-Hosts 110 auf der geordnete Ringliste 160 sich jeweils an unterschiedlichen geographischen Standorten befinden. In einigen Beispielen sind die Speicher-Hosts 110 auf der geordneten Ringliste 160 so angeordnet, dass verschiedene Wartungsdomänen 402 die sequentielle Streuung der Daten 312 entlang der geordneten Liste 160 verursachen. Wie in 4A, die Liste 160 kann sequentiell Speicher-Hosts 110 enthalten, die von der gleichen Busleitung 430a abhängen. Stattdessen sind zwei sequentielle Speicher-Hosts 110 auf der Liste 160 aus verschiedenen Wartungsdomänen 402, um sicherzustellen, dass die Datenzugänglichkeit erhalten bleibt.
  • Bezugnehmend auf 8 umfasst ein Verfahren 800 der Verteilung von Daten 312 in einem verteilten Speichersystem 100 in einigen Implementierungen das Empfangen 802 einer Datei 310 im nicht-flüchtigen Speicher 204 und das Teilen 804 der empfangenen Datei 310 in Blöcke 330 mithilfe eines Computerprozessors 202, der mit dem nicht-flüchtigen Speicher 204 in Kommunikation ist. Das Verfahren 800 umfasst ebenso das Gruppieren 806 eines oder mehrerer der Datenblöcke 330nD und eines oder mehrerer der Nicht-Datenblöcke 330nC in einer Gruppe G. Einer oder mehrere Blöcke 330 der Gruppe G können von anderen Blöcken 330 der Gruppe G rekonstruiert werden. Das Verfahren 800 umfasst ferner das Verteilen 808 von Blöcken 330 der Gruppe G auf Speichergeräte 114 des verteilten Speichersystems 100 basierend auf einer Hierarchie des verteilten Speichersystems 100. Die Hierarchie beinhaltet Wartungsdomänen 402 mit aktiven und inaktiven Zuständen. Darüber hinaus ist jedes Speichergerät 114 einer Wartungsdomäne 402 zugeordnet. Die Blöcke 330 einer Gruppe G werden auf zahlreiche Wartungsdomänen 402 verteilt, um die Möglichkeit zu erhalten, die Blöcke 330 der Gruppe G zu rekonstruieren, wenn sich eine Wartungsdomäne 402 in einem inaktiven Zustand befindet.
  • In einigen Implementierungen umfasst das Verfahren 800 ferner die Beschränkung der Anzahl von Blöcken 330 einer Gruppe G, die auf die Speichergeräte 114 einer beliebigen Wartungsdomäne 402 verteilt sind. Das Verfahren 800 umfasst ferner die Bestimmung einer Verteilung der Blöcke 330 einer Gruppe G auf die Speichergeräte 114 durch Bestimmen einer ersten zufälligen Auswahl 150a von Speichergeräten 114, die mit einer Anzahl von Blöcken 330 der Gruppe G übereinstimmt und der Bestimmung, ob die Auswahl der Speichergeräte 114 fähig ist, die Zugänglichkeit der Gruppe G zu erhalten, wenn eine oder mehrere Einheiten 402 sich in einem inaktiven Zustand befinden. In einigen Beispielen beinhaltet Verfahren 800, wenn die erste zufällige Auswahl 150a von Speichergeräten 114 unfähig ist, die Zugänglichkeit zur Gruppe G zu erhalten, wenn eine oder mehrere Wartungsdomänen 402 im inaktiven Zustand sind, des Weiteren das Ermitteln einer zweiten zufälligen Auswahl 150b von Speichergeräten 114, die mit der Anzahl an Blöcken 330 der Gruppe G übereinstimmen, oder das Ändern der ersten zufälligen Auswahl 150a von Speichergeräten 114 durch das Hinzufügen oder Entfernen von einem oder mehreren zufällig ausgewählten Speichergeräten 114. Das Verfahren 800 kann ferner das Bestimmen der ersten zufälligen Auswahl 150a von Speichergeräten 114 mithilfe einer einfachen Stichprobe, einer einfachen Wahrscheinlichkeitsstichprobe, einer geschichteten Stichprobe oder einer Cluster-Stichprobe umfassen.
  • In einigen Implementierungen umfasst das Verfahren 800 das Bestimmen einer Verteilung der Blöcke 330 der Gruppe G auf die Speichergeräte 114 durch Auswahl einer fortlaufenden Anzahl von Speichergeräten 114 entsprechend einer Anzahl von Blöcken 330 der Gruppe G aus einer geordneten Ringliste 160 der Speichergeräte 114 der verteilten Speicherung. Wenn die ausgewählten Speichergeräte 114 gemeinsam unfähig sind, die Zugänglichkeit zu der Gruppe G zu erhalten, wenn eine oder mehrere Wartungsdomänen 402 sich in einem inaktiven Zustand befinden, umfasst das Verfahren 800 ferner das Auswählen einer weiteren aufeinanderfolgenden Anzahl von Speichergeräten 114 aus der geordneten Ringliste 160 entsprechend der Anzahl von Blöcken 330 der Gruppe G. Zusätzlich oder alternativ kann das Verfahren 800 ferner das Bestimmen der geordneten Kreisliste 160 der Speichergeräte 114 des verteilten Speichersystems 100 umfassen. Benachbarte Speichergeräte 114 auf der geordneten Ringliste 160 sind verschiedenen Wartungsdomänen 402 zugeordnet. In einigen Beispielen ist eine Schwellenanzahl aufeinanderfolgenden Speichergeräte 114 in der geordneten Ringliste 160 jeweils verschiedenen Wartungsdomänen 402 zugeordnet oder befinden sich jeweils an verschiedenen geographischen Standorten.
  • In einigen Implementierungen umfasst das Verfahren 800 ferner das Bestimmen der Wartungshierarchie 400 der Wartungsdomänen 402 (z. B. mithilfe des Computerprozessors 202), wobei die Wartungshierarchie 400 Wartungsstufen besitzt und jede Wartungsstufe eine oder mehrere Wartungsdomänen 402 umfasst. Das Verfahren 800 umfasst ebenso das Zuordnen jeder Wartungsdomäne 402 zu mindestens einem Speichergerät 114. In einigen Beispielen umfasst jede Wartungsdomäne 402 Speichergeräte 114, die von einer einzigen Stromversorgungseinheit 420 oder einer einzigen Stromversorgungs-Busleitung 430 betrieben werden.
  • Das Verfahren 800 kann ferner das Teilen der empfangenen Datei 310 in Streifen 320 beinhalten. Jede Datei 310 enthält einen Fehlerkorrekturcode 313. Der Fehlerkorrekturcode 313 ist entweder ein Reed-Solomon-Code, ein verschachtelter Code oder ein geschichteter Code. Die Nicht-Datenblöcke 330 umfassen Code-Prüfungsblöcke 330nCC, Wort-Prüfungsblöcke 330nCC und Code-Prüfungs-Wort-Prüfungsblöcke 330nCCWC.
  • Verschiedene Implementierungen der hier beschriebenen Systeme und Techniken können in einer digitalen elektronischen Schaltung, einer integrierten Schaltung, speziell ausgelegten SCIS (anwendungsspezifisch integrierte Schaltungen), Computer-Hardware, Firmware, Software und/oder Kombinationen derer durchgeführt werden. Diese verschiedenen Implementierungen können eine Implementierung in einem oder mehreren Computerprogrammen beinhalten, die auf einem programmierbaren System ausführbar und/oder interpretierbar sind, das mindestens einen programmierbaren Prozessor beinhaltet, der ein spezieller Prozessor oder ein Prozessor für allgemeine Zwecke sein kann, und der zum Empfangen von Daten und Anweisungen von und zum Übertragen von Daten und Anweisungen an ein Speichersystem, mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung gekoppelt ist.
  • Diese Computerprogramme (auch als Programme, Software, Software-Anwendungen oder Code bekannt) umfassen Maschinenanweisungen für einen programmierbaren Prozessor und können in eine hochrangige verfahrens- und/oder objektorientierte Programmiersprache und/oder in Assembler-/Maschinensprache implementiert werden. Wie hier verwendet, beziehen sich die Begriffe „maschinenlesbares Medium” und „computerlesbares Medium” auf ein beliebiges Computerprogrammprodukt, einen beliebigen Apparat und/oder ein beliebiges Gerät (z. B. Magnetplatten, optische Platten, Speicher, programmierbare Logikbausteine [Programmable Logic Devices, PLDs]), die verwendet werden, um einem programmierbaren Prozessor Maschinenanweisungen und/oder Daten bereitzustellen, einschließlich eines maschinenlesbaren Mediums, das Maschinenanweisungen als ein maschinenlesbares Signal empfängt. Der Begriff „maschinenlesbares Signal” bezeichnet ein beliebiges Signal, das verwendet wird, um einem programmierbaren Prozessor Maschinenanweisungen und/oder Daten bereitzustellen.
  • Implementierungen des in dieser Spezifikation beschriebenen behandelten Gegenstands und der Funktionsvorgänge können in eine digitale elektronische Schaltung oder in Computer-Software, Firmware oder Hardware einschließlich der in dieser Spezifikation offenbarten Strukturen und deren strukturelle Entsprechungen oder in Kombinationen aus einer oder mehreren dieser implementiert werden. Darüber hinaus kann der in dieser Spezifikation beschriebene Gegenstand als ein oder mehrere Computerprogrammprodukte implementiert werden, d. h. als ein oder mehrere Module von Computerprogrammanweisungen, die auf einem computerlesbaren Medium zur Ausführung kodiert sind, durch oder zur Kontrolle von datenverarbeitenden Apparaten. Das computerlesbare Speichermedium kann eine maschinenlesbare Speichervorrichtung, ein maschinenlesbares Speichersubstrat, ein Speichergerät, eine Stoffzusammensetzung, die ein maschinenlesbares verbreitetes Signal bewirkt, oder eine Kombination aus einem oder mehreren davon sein. Die Begriffe „datenverarbeitender Apparat”, „Computergerät” und „Computerprozessor” beinhalten jegliche Apparate, Geräte und Maschinen zur Verarbeitung von Daten, einschließlich beispielsweise eines programmierbaren Prozessors, eines Computers oder mehrerer Prozessoren oder Computer. Der Apparat kann neben der Hardware auch einen Code einschließen, der eine Ausführungsumgebung für das betreffende Computerprogramm erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbank-Managementsystem, ein Betriebssystem oder eine Kombination einer oder mehrerer der genannten darstellt. Ein propagiertes Signal ist ein künstlich erzeugtes Signal, z. B. ein maschinell erzeugtes elektrisches, optisches oder elektromagnetisches Signal, das für das Verschlüsseln von Information für die Übertragung auf einen geeigneten Empfängerapparat erzeugt wird.
  • Ein Computerprogramm (auch als Anwendung, Programm, Software, Software-Anwendung, Skript oder Code bekannt) kann in jeder Form von Programmiersprache geschrieben werden, einschließlich kompilierter oder interpretierter Sprachen, und es kann in jeder Form bereitgestellt werden, einschließlich als eigenständiges Programm oder als ein Modul, eine Komponente, Unterroutine oder eine andere Einheit, die für die Verwendung in einer Computerumgebung geeignet ist. Ein Computerprogramm entspricht nicht unbedingt einer Datei in einem Dateisystem. Ein Programm kann in einem Teil einer Datei gespeichert sein, die andere Programme oder Daten enthält (z. B. ein oder mehrere Scripts, die in einem Dokument in Markup-Sprache gespeichert sind), in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien (z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern). Ein Computerprogramm kann auf einem Computer oder mehreren Computer eingerichtet sein oder ausgeführt werden, die an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
  • Die in dieser Spezifikation beschriebenen Prozesse und Logik-Abläufe können durch einen oder mehrere programmierbare Prozessoren durchgeführt werden, die ein oder mehrere Computerprogramme ausführen, um Funktionen durch das Arbeiten mit Eingabedaten und das Erzeugen von Ausgaben auszuführen. Die Prozesse und die logischen Abläufe können auch durch logische Sonderzweckschaltungen durchgeführt werden, und der Apparat kann als Sonderzweckschaltungen implementiert werden, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung).
  • Prozessoren, die für die Ausführung eines Computerprogramms geeignet sind, schließen beispielsweise sowohl allgemeine und als auch Spezial-Mikroprozessoren sowie alle Arten eines oder mehrerer Prozessoren jeglicher Art von Digitalrechner ein. Ganz allgemein nimmt ein Prozessor Anweisungen und Daten von einem Festwertspeicher oder einem Speicher mit wahlfreiem Zugriff oder von beiden entgegen. Die wesentlichen Elemente eines Computers sind ein Prozessor für das Ausführen von Befehlen und ein oder mehrere Speichergeräte für das Speichern von Befehlen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehrere Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten entgegenzunehmen und/oder zu übertragen, bzw. ist ein Computer operativ an ein solches Speichergerät gekoppelt. Jedoch muss ein Computer solche Geräte nicht haben. Außerdem kann ein Computer in ein anderes Gerät eingebettet sein, z. B. in ein Mobiltelefon, einen Organizer (PDA), einen mobilen Audioplayer, einen GPS-Empfänger (Global Positioning System), um nur einige zu nennen. Computerlesbare Medien, die für das Speichern von Computerprogrammbefehlen und -daten geeignet sind, umfassen alle Formen von nicht-flüchtigen Speichern, Medien- und Speichergeräten ein, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPRQM und Flash-Speicher; Magnetdisketten, z. B. interne Festplatten oder Wechselplatten; magnetooptische Disketten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
  • Um die Interaktion mit einem Benutzer zu ermöglichen, können in dieser Spezifikation beschriebene Ausführungsformen der Offenbarung auf einem Computer mit einem Anzeigegerät implementiert werden, z. B. einem CRT-(Kathodenstrahlröhre) oder LCD(Flüssigkristallanzeige)-Monitor oder Touchscreen, mit welcher dem Benutzer Informationen angezeigt werden und optional einer Tastatur und einem Anzeigegerät, z. B. einer Maus oder einem Trackball, mit denen der Benutzer Eingaben in den Computer vornehmen kann. Auch andere Arten von Geräten verwendet werden, um für eine Interaktion mit einem Nutzer zu sorgen; beispielsweise kann eine dem Benutzer gelieferte Rückkopplung in beliebiger Form von sensorischer Rückkopplung vorliegen, z. B. eine visuelle Rückkopplung, auditive Rückkopplung oder taktile Rückkopplung; und die Eingabe von dem Benutzer kann in beliebiger Form empfangen werden, einschließlich akustischer, Sprach- oder taktiler Eingabe. Darüber hinaus kann ein Computer über das Senden von Dokumenten an und das Empfangen von Dokumenten von einer Einrichtung, die vom Benutzer verwendet wird, mit einem Benutzer interagieren; beispielsweise über das Senden von Webpages an einen Webbrowser auf dem Clientgerät des Benutzers als Antwort auf die vom Webbrowser empfangenen Aufforderungen.
  • Eine oder mehrere Ausführungsformen der Offenbarung können in ein Computersystem implementiert werden, das eine Backend-Komponente umfasst, z. B. als ein Datenserver oder das eine Middleware-Komponente umfasst, z. B. ein Anwendungsserver oder das eine Frontend-Komponente umfasst, z. B. Client-Computer mit graphischer Benutzeroberfläche oder ein Webbrowser, worüber der Benutzer mit einer Implementierung des in dieser Spezifizierung betrachteten Gegenstands interagieren kann, oder eine beliebige Kombination aus solchen Backend, Middleware- oder Frontend-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein, z. B. ein Kommunikationsnetz. Zu Beispielen für Kommunikationsnetze zählen ein lokales Netzwerk („LAN”), ein Fernnetzwerk („WAN”), eine netzübergreifende Verbindung (z. B. das Internet) und Peer-to-Peer Netzwerke (z. B. Ad-Hoc Peer-to-Peer Netzwerke).
  • Das Computersystem kann Clients und Server beinhalten. Ein Client und Server befinden sich im Allgemeinen ortsfern voneinander und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung zwischen Client und Server entsteht aufgrund von Computerprogrammen, die auf den jeweiligen Computer laufen und die eine Client-Server-Beziehung zueinander haben. Bei einigen Implementierungen überträgt ein Server Daten (z. B. eine HTML-Seite) auf ein Client-Gerät (z. B. zum Anzeigen von Daten für einen Benutzer, der mit dem Client-Gerät interagiert, sowie zum Empfangen von Benutzereingaben von diesem Benutzer). Am Client-Gerät erzeugte Daten (z. B. infolge der Benutzerinteraktion) können vom Client-Gerät am Server empfangen werden.
  • Während diese Spezifikation viele Einzelheiten enthält, sollen diese nicht als Beschränkung des Umfangs der Offenbarung oder des Anspruchs verstanden werden, sondern vielmehr als Beschreibungen von Merkmalen, die spezifisch für bestimmte Implementierungen der Offenbarung sind. Bestimmte Eigenschaften, die in dieser Spezifikation im Kontext gesonderter Implementierungen beschrieben sind, können auch in Kombination in einer einzelnen Implementierung implementiert werden. Im Gegensatz dazu können verschiedene Merkmale, die im Zusammenhang einer einzelnen Implementierung beschrieben sind, auch getrennt in zahlreichen Implementierungen oder in beliebigen geeigneten Teilkombinationen implementiert werden. Darüber hinaus können eine oder mehrere Merkmale einer beanspruchten Kombination in einigen Fällen von der Kombination herausgelöst werden, obwohl die Merkmale oben als in bestimmten Kombinationen agierend beschrieben sind und sogar anfänglich als solche beansprucht wurden, und die beanspruchte Kombination kann an eine Unterkombination oder eine Variation einer Unterkombination verwiesen werden.
  • Ebenso werden Tätigkeiten in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Erfordernis verstanden werden, dass solche Tätigkeiten in der bestimmten besonderen Reihenfolge oder in einer sequentiellen Reihenfolge durchgeführt werden müssen oder dass alle dargestellten Tätigkeiten durchgeführt werden müssen, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und Parallelbearbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemkomponenten in den oben beschriebenen Ausführungsformen nicht in allen Ausführungsformen erforderlich aufgefasst werden, und es versteht sich, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder zu mehreren Softwareprodukten verkapselt werden können.
  • Eine Anzahl an Implementierungen wurde beschrieben. Trotzdem versteht sich, dass verschiedene Modifikationen durchgeführt werden können, ohne vom Geist und Umfang der Offenbarung abzuweichen. Dementsprechend liegen andere Implementierungen im Geltungsbereich der folgenden Ansprüche. Die in den Ansprüchen ausgeführten Vorgänge können beispielsweise in einer anderen Reihenfolge ausgeführt werden und erzielen dennoch gewünschte Ergebnisse.

Claims (14)

  1. System zum Verteilen von Daten (312) in einem verteilten Speichersystem (100), das System umfassend: einen nicht flüchtigen Speicher (204), der eine Datei empfängt (310); einen Computerprozessor (202) in Kommunikation mit dem nicht-flüchtigen Speicher (204), der Computerprozessor (202): die empfangene Datei (310) in Blöcke (330) teilend, wobei die Blöcke (330) Datenblöcke (330nD) und Nicht-Datenblöcke (330nC) sind; und das Gruppieren (806) eines oder mehrerer der Datenblöcke (330nD) und eines oder mehrerer der Nicht-Datenblöcke (330nC) in einer Gruppe (G), wobei ein oder mehrere Blöcke (330) der Gruppe (G) von anderen Blöcken (330) der Gruppe (G) rekonstruiert werden können; und Speichergeräte (114, 114a–n) in Kommunikation mit dem Computerprozessor (202) und dem nicht-flüchtigen Speicher (204), der Computerprozessor (202) die Blöcke (330) der Gruppe (G) auf den Speichergeräten (114, 114a–n) speichernd beruhend auf einer Wartungshierarchie (400) des verteilten Speichersystems (100) die Wartungshierarchie (400) umfassend Wartungsdomänen (402, 402a–e) mit aktivem und inaktivem Zustand, jedes Speichergerät (114, 114a–n) ist mit einer Wartungsdomäne (402, 402a–e) verbunden, der Computerprozessor (202) die Blöcke (330) einer Gruppe (G) auf zahlreiche Wartungsdomänen (402, 402a–e) verteilend, um die Zugänglichkeit der Gruppe (G) zu erhalten, wenn eine Wartungsdomäne (402, 402a–e) sich in einem inaktiven Zustand befindet.
  2. System nach Anspruch 1, worin der Computerprozessor (202) eine Anzahl von Blöcken (330) einer Gruppe (G), die auf Speichergeräte (114, 114a–n) einer beliebigen Wartungsdomäne (402, 402a–e) verteilt sind, beschränkt.
  3. System nach Anspruch 1, worin der Computerprozessor (202) eine Verteilung der Blöcke (330) einer Gruppe (G) auf die Speichergeräte (114, 114a–n) bestimmt durch: das Bestimmen einer ersten zufälligen Auswahl (150, 150a, 150n) von Speichergeräten (114, 114a–n), die einer Anzahl von Blöcken (330) der Gruppe (G) entspricht; und das Feststellen, ob die Auswahl (150, 150a, 150n) an Speichergeräten (114, 114a–n) fähig ist, die Zugänglichkeit der Gruppe (G) zu erhalten, wenn eine oder mehrere Wartungsdomänen (402, 402a–e) sich in einem inaktiven Zustand befinden.
  4. System nach Anspruch 3, worin der Computerprozessor (202) eine zweite zufällige Auswahl (150, 150b, 150n) von Speichergeräten (114, 114a–n) bestimmt, die mit einer Anzahl von Blöcken (330) der Gruppe (G) übereinstimmt, wenn die erste zufällige Auswahl (150, 150a, 150n) von Speichergeräten (114, 114a–n) unfähig ist, die Zugänglichkeit der Gruppe (G) zu erhalten, wenn eine oder mehrere Wartungsdomänen (402, 402a–e) sich in einem inaktiven Zustand befinden.
  5. System nach Anspruch 3, worin der Computerprozessor (202) die erste zufällige Auswahl (150, 150a, 150n) von Speichergeräten (114, 114a–n) durch Hinzufügen und Entfernen eines oder mehrerer zufällig ausgewählter Speichergeräte (114, 114a–n) verändert, wenn die erste zufällige Auswahl (150, 150a, 150n) von Speichergeräten (114, 114a–n) unfähig ist, die Zugänglichkeit der Datei (310) zu erhalten, wenn eine oder mehrere Wartungsdomänen (402, 402a–e) sich in einem inaktiven Zustand befinden.
  6. System nach Anspruch 3, worin der Computerprozessor (202) die erste zufällige Auswahl (150, 150a, 150n) von Speichergeräten (114, 114a–n) mithilfe einer einfachen Stichprobe, einer Wahrscheinlichkeitsstichprobe, einer geschichteten Stichprobe oder einer Cluster-Stichprobe bestimmt.
  7. System nach Anspruch 1, worin der Computerprozessor (202) eine Verteilung der Blöcke (330) auf die Speichergeräte (114, 114a–n) durch Auswählen einer aufeinanderfolgenden Anzahl von Speichergeräten (114, 114a–n) bestimmt, die einer Anzahl von Blöcken (330) der Gruppe (G) aus einer geordneten Ringliste (160) der Speichergeräte (114, 114a–n) des verteilten Speichersystems (100) entspricht.
  8. System nach Anspruch 7, worin der Computerprozessor (202) eine weitere fortlaufende Anzahl von Speichergeräten (114, 114a–n) aus der geordneten Ringliste (160) entsprechend der Anzahl von Blöcken (330) der Gruppe (G) auswählt, wenn die ausgewählten Speichersysteme (114, 114a–n) gemeinsam unfähig sind, die Zugänglichkeit der Gruppe (G) zu erhalten, wenn eine oder mehrere Wartungsdomänen (402, 402a–e) sich in einem inaktiven Zustand befinden.
  9. System nach Anspruch 7, worin der Computerprozessor (202) die geordneten Ringliste (160) von Speichergeräten (114, 114a–n) des verteilten Speichersystems (100), benachbarter Speichergeräte (114, 114a–n) auf der geordneten Ringliste (160), die mit verschiedenen Wartungsdomänen (402, 402a–e) assoziiert ist, bestimmt.
  10. System nach Anspruch 9, worin eine Schwellenanzahl aufeinanderfolgender Speichergeräte (114114a–n) auf der geordneten Ringliste (160) jeweils mit verschiedenen Wartungsdomänen (402, 402a–e) assoziiert ist.
  11. System nach Anspruch 9, worin eine Schwellenanzahl aufeinanderfolgender Speichergeräte (114, 114a–n) auf der geordneten Ringliste (160) sich jeweils an verschiedenen geografischen Standorten befinden.
  12. System nach Anspruch 1, worin der Computerprozessor (202): eine Wartungshierarchie (400) von Wartungsdomänen (402, 402a–e) bestimmt, die Wartungshierarchie (400) Wartungsstufen (1, 2, 3, 4, 5) besitzend, jede Wartungsstufe (1, 2, 3, 4, 5) bestehend aus einer oder mehreren Wartungsdomänen (402, 402a–e); und jeder Wartungsdomäne (402, 402a–e) mindestens einem Speichergerät (114, 114a–n) zuordnet.
  13. System nach Anspruch 12, worin jede Wartungsdomäne (402, 402a–e) Speichergeräte (114, 114a–n) enthält, die durch eine einzige Stromverteilereinheit (420, 420a, 420n) oder eine einzige Strom-Busleitung (430, 430a, 430n) angetrieben werden.
  14. System nach Anspruch 1, worin der Computerprozessor (202) die empfangene Datei (310) in Streifen (320) teilt, jeder Streifen (310) umfassend einen Fehlerkorrekturcode (313), der Fehlerkorrekturcode (313) bestehend aus einem verschachtelten Code oder einem geschichteten Code, die Nicht-Datenblöcke (330nC) bestehend aus Code-Prüfungsblöcken (330nCC), Wort-Prüfungsblöcken (330nWC) und Code-Prüfungs-Wort-Prüfungsblöcken (330nCCWC).
DE202015009260.8U 2014-01-31 2015-01-23 Effiziente Datenlesungen von verteilten Speichersystemen Active DE202015009260U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/169,322 US9323615B2 (en) 2014-01-31 2014-01-31 Efficient data reads from distributed storage systems
US14/169,322 2014-01-31

Publications (1)

Publication Number Publication Date
DE202015009260U1 true DE202015009260U1 (de) 2017-01-18

Family

ID=53754927

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202015009260.8U Active DE202015009260U1 (de) 2014-01-31 2015-01-23 Effiziente Datenlesungen von verteilten Speichersystemen

Country Status (8)

Country Link
US (3) US9323615B2 (de)
EP (2) EP3839767A1 (de)
KR (2) KR101874280B1 (de)
CN (2) CN110737541B (de)
AU (3) AU2015211309B2 (de)
DE (1) DE202015009260U1 (de)
GB (1) GB2538441B (de)
WO (1) WO2015116487A1 (de)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9223644B1 (en) * 2014-02-25 2015-12-29 Google Inc. Preventing unnecessary data recovery
US10298555B2 (en) * 2014-04-04 2019-05-21 Zettaset, Inc. Securing files under the semi-trusted user threat model using per-file key encryption
US10514982B2 (en) * 2014-08-21 2019-12-24 Datrium, Inc. Alternate storage arrangement in a distributed data storage system with key-based addressing
US9397833B2 (en) * 2014-08-27 2016-07-19 International Business Machines Corporation Receipt, data reduction, and storage of encrypted data
US10230531B2 (en) * 2014-10-23 2019-03-12 Hewlett Packard Enterprise Development Lp Admissions control of a device
WO2016068941A1 (en) 2014-10-30 2016-05-06 Hewlett Packard Enterprise Development Lp Secure transactions in a memory fabric
US10715332B2 (en) 2014-10-30 2020-07-14 Hewlett Packard Enterprise Development Lp Encryption for transactions in a memory fabric
US9483200B2 (en) * 2014-11-03 2016-11-01 Facebook, Inc. System and method for optical cold storage wherein plurality of first and second chunks are encoded and placed on different optical disks
US9965369B2 (en) 2015-04-28 2018-05-08 Viasat, Inc. Self-organized storage nodes for distributed delivery network
US9755979B2 (en) 2015-11-19 2017-09-05 Viasat, Inc. Enhancing capacity of a direct communication link
CN107145303B (zh) * 2016-03-01 2020-06-19 阿里巴巴集团控股有限公司 一种用于在分布式存储系统中执行文件写入的方法与设备
US10453076B2 (en) 2016-06-02 2019-10-22 Facebook, Inc. Cold storage for legal hold data
WO2019008748A1 (ja) * 2017-07-07 2019-01-10 株式会社Asj データ処理システムおよびこれを用いた分散データシステム
CN109947787A (zh) * 2017-10-30 2019-06-28 阿里巴巴集团控股有限公司 一种数据分层存储、分层查询方法及装置
CN108304214B (zh) * 2017-12-13 2022-05-13 超聚变数字技术有限公司 一种立即数的完整性的校验方法及装置
US10719397B2 (en) * 2018-06-08 2020-07-21 Samsung Electronics Co., Ltd. System, device and method for storage device assisted low-bandwidth data repair
CN110109889A (zh) * 2019-05-09 2019-08-09 重庆大学 一种分布式内存文件管理系统
EP3682342B1 (de) 2019-09-11 2021-08-18 Advanced New Technologies Co., Ltd. Gemeinsame blockchain-datenspeicherung auf der grundlage von fehlerkorrekturcodierung in vertrauenswürdigen ausführungsumgebungen
US11747996B2 (en) 2020-08-05 2023-09-05 Dropbox, Inc. System and methods for implementing a key-value data store

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7296180B1 (en) * 2004-06-30 2007-11-13 Sun Microsystems, Inc. Method for recovery of data
US7617370B2 (en) 2005-04-29 2009-11-10 Netapp, Inc. Data allocation within a storage system architecture
US7930611B2 (en) * 2007-03-09 2011-04-19 Microsoft Corporation Erasure-resilient codes having multiple protection groups
US8051362B2 (en) 2007-06-15 2011-11-01 Microsoft Corporation Distributed data storage using erasure resilient coding
CN101175011A (zh) * 2007-11-02 2008-05-07 南京大学 基于dht的p2p系统中获得高可用数据冗余的方法
CN101247273B (zh) * 2008-02-27 2011-02-02 北京航空航天大学 分布式环境下服务协同节点组织结构的维护方法
CN101369922B (zh) * 2008-09-28 2011-04-06 华为技术有限公司 一种连通性检测方法和维护域终点及系统
CN101599032A (zh) * 2009-05-31 2009-12-09 成都市华为赛门铁克科技有限公司 存储节点管理方法、控制子系统和存储系统
EP2476055B1 (de) * 2009-09-08 2020-01-22 SanDisk Technologies LLC Vorrichtung, system und verfahren zur cache-speicherung von daten auf einer festkörperspeichervorrichtung
US8918534B2 (en) 2009-09-29 2014-12-23 Cleversafe, Inc. Writing data slices to ready and non-ready distributed storage units in a distributed storage network
US8862617B2 (en) 2010-02-09 2014-10-14 Google Inc. System and method for replicating objects in a distributed storage system
US8341457B2 (en) * 2010-03-11 2012-12-25 Lsi Corporation System and method for optimizing redundancy restoration in distributed data layout environments
US8386841B1 (en) * 2010-07-21 2013-02-26 Symantec Corporation Systems and methods for improving redundant storage fault tolerance
US20120173812A1 (en) * 2010-12-30 2012-07-05 Lsi Corporation Method and system for data distribution across an array of drives
US8732518B2 (en) * 2011-04-13 2014-05-20 Netapp, Inc. Reliability based data allocation and recovery in a storage system
KR101544483B1 (ko) * 2011-04-13 2015-08-17 주식회사 케이티 분산 저장 시스템의 복제 서버 장치 및 복제본 생성 방법
US9785498B2 (en) 2011-04-29 2017-10-10 Tata Consultancy Services Limited Archival storage and retrieval system
US9141458B2 (en) * 2011-05-09 2015-09-22 Cleversafe, Inc. Adjusting a data storage address mapping in a maintenance free storage container
US8615698B1 (en) 2011-09-28 2013-12-24 Google Inc. Skewed orthogonal coding techniques
CN102419766B (zh) * 2011-11-01 2013-11-20 西安电子科技大学 基于hdfs分布式文件系统的数据冗余及文件操作方法
US9009567B2 (en) 2011-12-12 2015-04-14 Cleversafe, Inc. Encrypting distributed computing data
EP2660723A1 (de) * 2012-05-03 2013-11-06 Thomson Licensing Verfahren zur Datenspeicherung sowie Wartung in einem verteilten Datenspeicherungssystem und zugehörige Vorrichtung
US8935761B2 (en) 2012-06-25 2015-01-13 Cleversafe, Inc. Accessing storage nodes in an on-line media storage system
US9524510B2 (en) * 2013-10-02 2016-12-20 Turn Inc. Adaptive fuzzy fallback stratified sampling for fast reporting and forecasting

Also Published As

Publication number Publication date
GB2538441B (en) 2021-02-17
US20170075753A1 (en) 2017-03-16
AU2018202944A1 (en) 2018-05-17
US9514015B2 (en) 2016-12-06
EP3839767A1 (de) 2021-06-23
GB201614048D0 (en) 2016-09-28
US20160203066A1 (en) 2016-07-14
CN110737541B (zh) 2023-08-29
GB2538441A (en) 2016-11-16
EP3100183B1 (de) 2021-03-24
WO2015116487A1 (en) 2015-08-06
EP3100183A4 (de) 2017-11-29
AU2018202944B2 (en) 2019-09-12
KR20180001574A (ko) 2018-01-04
AU2017203459A1 (en) 2017-06-08
CN106164899A (zh) 2016-11-23
AU2015211309B2 (en) 2017-02-23
CN106164899B (zh) 2019-11-19
US9747155B2 (en) 2017-08-29
AU2015211309A1 (en) 2016-06-09
EP3100183A1 (de) 2016-12-07
AU2017203459B2 (en) 2018-04-26
US20150220429A1 (en) 2015-08-06
US9323615B2 (en) 2016-04-26
KR20160114707A (ko) 2016-10-05
KR101813431B1 (ko) 2018-01-30
CN110737541A (zh) 2020-01-31
KR101874280B1 (ko) 2018-07-03

Similar Documents

Publication Publication Date Title
DE202015009260U1 (de) Effiziente Datenlesungen von verteilten Speichersystemen
DE112018000193B4 (de) Daten sequenziell in Zonen in einem verstreuten Speichernetzwerk speichern
DE202014010909U1 (de) Verteilung von Daten in verteilten Speichersystemen
DE112014000254B4 (de) Mehrstufiges Zwischenspeichern und Migrieren in unterschiedlichen Granularitäten
DE112019005770T5 (de) Speicherverwaltung für ein cloudbasiertes Speichersystem
DE102012216022B4 (de) Verwaltung einer Zeitpunktkopie-Beziehung für platzsparende Datenträger
DE112019000146T5 (de) Multivorrichtungsspeichersystem mit verteilter lese-/schreibverarbeitung
DE112020000749T5 (de) Indexerstellung für sich entwickelnde umfangreiche Datensätze in Hybriden Transaktions- und Analysenverarbeitungssystemen mit mehreren Mastern
DE102010044531B4 (de) Autonome Speicherarchitektur
DE112013004400B4 (de) Herstellen einer Zeitpunktkopie-Beziehung zwischen logischen Quellenadressen und logischen Zieladressen
DE202020005734U1 (de) Beschneiden von Indizes zur Verbesserung einer Verarbeitung von Datenbankabfragen
DE112017005868T5 (de) Verwaltung von e/a-abläufen für datenobjekte in einem speichersystem
DE102014117465A1 (de) Unterstützter kohärenter gemeinsamer Speicher
DE202009019149U1 (de) Asynchron verteilte Speicherbereinigung für replizierte Speichercluster
DE102007010250A1 (de) Hierarchische Zeitstempel
DE102012219098A1 (de) Verwaltung von Teildatensegmenten in Systemen mit doppeltem Cachespeicher
DE112011101317T5 (de) Optimieren eines Dateisystems für unterschiedliche Typen von Anwendungen in einem Datenverarbeitungs-Cluster unter Verwendung von dynamischer Blockgrössen-Granularität
DE102012215918A1 (de) Spiegeln virtueller Maschinen von einem primären auf einen sekundären Host
DE112012000282B4 (de) Anwendungswiederherstellung in einem Dateisystem
DE102018204427A1 (de) Simulieren mehrerer Speichergeräte mit einem einzelnen Speichergerät, das mit einem Rechengerät gekoppelt ist
DE102007009233A1 (de) Datenzustandsbeschreibungs-Datenstrukturen
DE602004007925T2 (de) Verwalten einer beziehung zwischen einem zielvolumen und einem quellenvolumen
DE112011103290T5 (de) Intelligente Schreibcacheoperation für sequenzielle Datenspuren
DE112020005323T5 (de) Elastische ausführung von machine-learning-arbeitslasten unter verwendung einer anwendungsbasierten profilierung
DE112018002955T5 (de) Kognitive datei- und objektverwaltung für verteilte speicherumgebungen

Legal Events

Date Code Title Description
R207 Utility model specification
R081 Change of applicant/patentee

Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US

Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: BETTEN & RESCH PATENT- UND RECHTSANWAELTE PART, DE

R150 Utility model maintained after payment of first maintenance fee after three years
R151 Utility model maintained after payment of second maintenance fee after six years
R152 Utility model maintained after payment of third maintenance fee after eight years