-
Gebiet der Erfindung
-
Diese
Erfindung betrifft Computersysteme und insbesondere Techniken zum
Unterordnen von Ressourcen innerhalb von Computersystemen.
-
Hintergrund der Erfindung
-
Datenbank-Server
verwenden Ressourcen, während
sie Transaktionen ausführen.
Obwohl Ressourcen zwischen Datenbank-Servern geteilt werden können, kann
auf viele Ressourcen zu irgendeiner gegebenen Zeit auf bestimmten
Wegen nicht von mehr als einem Prozess zugegriffen werden. Beispielsweise
kann auf Ressourcen wie zum Beispiel Datenblöcke eines Speichermediums oder
auf einem Speichermedium gespeicherte Tabellen auf einigen Wegen
(z. B. lesend) von mehreren Prozessen zusammentreffend zugegriffen
werden, aber auf anderen Wegen (z. B. schreibend) zu einer Zeit
von nur einem Prozess zugegriffen werden. Folglich wurden Mechanismen
entwickelt, die den Zugriff auf Ressourcen steuern.
-
Ein
solcher Mechanismus wird als eine Sperre (Lock) bezeichnet. Eine
Sperre ist eine Datenstruktur, die angibt, dass einem bestimmten
Prozess mit Bezug auf eine Ressource gewisse Rechte eingeräumt wurden.
Es gibt viele Typen von Sperren. Einige Typen von Sperren können auf
der selben Ressource von mehreren Prozessen geteilt werden, während andere
Typen von Sperren verhindern, dass andere Sperren auf der selben
Ressource eingerichtet werden.
-
Die
für das
Einrichten von Sperren auf Ressourcen verantwortliche Einheit wird
als Sperren-Manager bezeichnet. In einem Einzelknoten-Datenbank-System
besteht ein Sperren- Manager
typischerweise aus einem oder mehreren Prozessen auf dem Knoten.
In einem Mehrfach-Knoten-System wie beispielsweise einer mehrfach
verarbeitenden Maschine oder einem lokalen Datennetz kann ein Sperren-Manager über zahlreiche
Knoten verteilte Prozesse enthalten. Ein Sperren-Manager, der Komponenten enthält, die
auf zwei oder mehr Knoten residieren, wird als verteilter Sperren-Manager
bezeichnet.
-
1 ist
ein Blockdiagramm eines Mehrfach-Knoten-Computersystems 100. Jeder
Knoten weist einen darin gespeicherten Datenbank-Server und einen
Teil eines verteilten Sperren-Management-Systems 132 auf.
Insbesondere weist das dargestellte System drei Knoten 102, 112 und 122 auf, auf
denen Datenbank-Server 104, 114 beziehungsweise 124 und
Sperren-Manager-Einheiten 106, 116 beziehungsweise 126 residieren.
Die Datenbank-Server 104, 114 und 124 haben
Zugriff auf die selbe Datenbank 120. Die Datenbank 120 residiert auf
einer Platte 118, die mehrere Blöcke mit Daten enthält. Die
Platte 118 repräsentiert
im Allgemeinen eine oder mehrere anhaltende Speicher-Vorrichtungen,
die auf einer beliebigen Anzahl von Maschinen sein können, einschließlich aber
nicht beschränkend auf
die Maschinen, die die Knoten 102, 112 und 122 enthalten.
-
Ein
Kommunikations-Mechanismus gestattet es Prozessen auf den Knoten 102, 112 und 122,
miteinander und mit den Platten, die Teile der Datenbank 120 enthalten,
zu kommunizieren. Der konkrete Kommunikations-Mechanismus zwischen
den Knoten und der Platte 118 wird basierend auf der Natur des
Systems 100 variieren. Wenn zum Beispiel die Knoten 102, 112 und 122 Workstations
in einem Netzwerk entsprechen, wird der Kommunikations-Mechanismus
unterschiedlich dazu sein, als wenn die Knoten 102, 112 und 122 Clustern
von Prozessoren und Speicher innerhalb eine mehrfach verarbeitenden
Maschine entsprechen.
-
Bevor
irgendeiner der Datenbank-Server 104, 114 und 124 auf
eine mit den anderen Datenbank-Servern geteilte Ressource zugreifen
kann, muss er von dem verteilten Sperren-Management-System 132 die geeignete
Sperre auf der Ressource erhalten. Solch eine Ressource kann zum Beispiel
ein oder mehrere Blocks der Platte 118 sein, auf der Daten
der Datenbank 120 gespeichert sind.
-
Das
Sperren-Management-System 132 speichert Datenstrukturen,
die die von den Datenbank-Servern 104, 114 und 124 auf
den von den Datenbank-Servern geteilten Ressourcen gehaltenen Sperren
angeben. Wenn ein Datenbank-Server eine Sperre auf einer Ressource
anfordert, während
ein anderer Datenbank-Server
eine Sperre auf der Ressource hat, muss das verteilte Sperren-Management-System 132 ermitteln,
ob die angeforderte Sperre mit der erteilten Sperre konsistent ist.
Wenn die angeforderte Sperre mit der erteilten Sperre nicht konsistent
ist, dann muss der Anforderer warten, bis der die erteilte Sperre
haltende Datenbank-Server die erteilte Sperre freigibt.
-
Gemäß einem
Verfahren behält
das Sperren-Management-System 132 für jede von dem Sperren-Management-System 132 verwaltete
Ressource ein Master-Ressourcen-Objekt und enthält für jeden Knoten, der einen Datenbank-Server
enthält, eine
Sperren-Manager-Einheit.
Das Master-Ressourcen-Objekt für
eine bestimmte Ressource speichert, neben anderen Dingen, eine Angabe
aller Sperren, die für
die bestimmte Ressource erteilt oder angefordert wurden. Das Master-Ressourcen-Objekt
für jede Ressource
residiert innerhalb lediglich einer der Sperren-Manager-Einheiten 106, 116 und 126.
-
Der
Knoten, auf dem eine Knoten-Manager-Einheit residiert, wird als
der „Master-Knoten" (oder einfach „Master") der Ressourcen
bezeichnet, deren Master-Ressourcen-Objekte von dieser Speicher-Manager-Einheit
verwaltet werden. Wenn das Master-Ressourcen-Objekt für eine Ressource
R1 von der Speicher-Manager-Einheit 106 verwaltet wird,
dann ist der Knoten 102 somit der Master der Ressource
R1.
-
In
typischen Systemen wird eine Hash-Funktion angewendet, um den bestimmten
Knoten auszuwählen,
der als der Master-Knoten für
eine gegebene Ressource agiert. Insbesondere wird eine Hash-Funktion
auf den Ressourcen-Namen zum Erzeugen eines Namens angewendet. Alle
der Ressourcen-Namen, die mittels der Hash-Funktion dem selben Wert
zugeordnet werden, gehören
zu dem selben „Speicherbereich" (bucket). Jeder
Knoten wird dann damit beauftragt, der Master für alle Ressourcen zu sein,
deren Namen zu einem gegebenen Speicherbereich gehören.
-
Zum
Beispiel enthält
System 100 drei Knoten und kann folglich eine 3-Speicherbereich-Hash-Funktion
anwenden, die die Werte 0, 1 und 2 erzeugt. Jeder Speicherbereich
ist einem der drei Knoten zugeordnet. Der Knoten, der als der Master
für eine
bestimmte Ressource in dem System 100 dient, wird ermittelt,
indem die Hash-Funktion auf den Namen der Ressource angewendet wird.
Alle Ressourcen, die Namen haben, die basierend auf der Hash-Funktion
dem mit dem Wert 0 verbundenen Speicherbereich zugeordnet werden,
werden auf dem Knoten 102 kontrolliert. Alle Ressourcen,
die Namen haben, die basierend auf der Hash-Funktion dem mit dem
Wert 1 verbundenen Speicherbereich zugeordnet werden, werden auf
dem Knoten 112 kontrolliert. Alle Ressourcen, die Namen
haben, die basierend auf der Hash-Funktion dem mit dem Wert 2 verbundenen
Speicherbereich zugeordnet werden, werden auf dem Knoten 122 kontrolliert.
-
Wenn
ein Prozess auf einem Knoten wünscht,
auf eine Ressource zuzugreifen, wird auf den Namen der Ressource
eine Hash-Funktion
angewendet, um den Master der Ressource zu ermitteln, und eine Sperren-Anfrage
wird an den Master-Knoten für
diese Ressource gesandt. Der Sperren-Manager auf dem Master-Knoten
für die
Ressource steuert die Zuweisung und Freigabe der Sperren für die zugeordnete
Ressource.
-
Wenn
der Master-Knoten einer Ressource eine Sperre auf der Ressource
für einen
auf einem anderen Knoten laufenden Prozess erteilt, behält der andere
Knoten Information über
die Sperre, die sein Prozess auf der Ressource hält. Die Sperren-Information,
die von Nicht-Master-Knoten, die an einer Ressource interessiert
sind (d. h., eine Sperre an der Ressource halten), behalten wird,
kann während Wiederherstellung
in dem Fall, dass der Master-Knoten versagt, verwendet werden. Die
von einem Knoten, der nicht Master einer Ressource ist, verwendete Daten-Struktur
zum Verfolgen der Sperren auf der Ressource, die von lokalen Prozessen
gehalten werden, wird als ein Schatten-Ressourcen-Objekt bezeichnet.
Für jedes
Master-Ressourcen-Objekt können
bis zu N-1 Schatten-Ressourcen-Objekte existieren (wobei N gleich
der Anzahl an Knoten in dem System ist), da es für Prozesse auf allen Nicht-Master-Knoten
möglich
ist, gleichzeitig nicht-exklusive Sperren auf der selben Ressource
zu halten.
-
Verändern des
Masters einer Sperren-Ressource von einem Knoten zu einem anderen
wird als „Remastern" (neu Unterordnen)
der Sperren-Ressource bezeichnet. Der Prozess des Remastern einer
Ressource betrifft typischerweise Rekonstruieren eines Master-Ressourcen-Objekts
für die
Ressource auf einem neuen Master. Während eine Ressource neu untergeordnet
wird, ist die Ressource im Allgemeinen nicht verfügbar.
-
Zu
irgendeinem Zeitpunkt wird die Verantwortung zum Unterordnen von
Ressourcen zwischen einem bestimmten Satz an Knoten verteilt. Wenn
sich dieser Satz an Knoten verändert,
sagt man, dass sich eine „Epochen-Änderung" ereignet.
-
Eine
Vielzahl an Ereignissen kann das Durchführen von Remaster-Vorgängen wünschenswert
oder notwendig machen. Wenn zum Beispiel Knoten versagen oder heruntergefahren
werden, dann muss die Kontrolle von Ressourcen, die gegenwärtig von
diesen Knoten kontrolliert werden, auf andere Knoten verschoben
werden. Auf ähnliche
Weise kann es, wenn neue Knoten zu dem System hinzugefügt werden,
wünschenswert
sein, die Kontrolle über einige
der Ressourcen auf die neu hinzugefügten Knoten zu verschieben,
wodurch die mit dem Ressourcen-Management unter all den Knoten verbundene
Last gleichmäßiger verteilt
wird.
-
Wenn
Zuordnen von Ressourcen-Namen auf Basis einer Hash-Funktion verwendet
wird, um Ressourcen zu Knoten zuzuordnen, hat ein Remastern der
Ressourcen in Erwiderung auf eine Epochen-Änderung typischerweise eine Änderung
der Hash-Funktion
und dann ein neues Verteilen der Kontroll-Verantwortlichkeiten basierend auf der
Ressourcen-zu-Knoten-Abbildung
erzeugt durch die neue Hash-Funktion zur Folge.
-
Wenn
das System aus N Knoten besteht, wird insbesondere eine N-Speicherbereichs-Hash-Funktion
(eine Hash-Funktion, die N Werte produziert) verwendet, um die Master-Knoten-Zuordnung
durchzuführen.
Ebenso wie sich N verändert
(auf Grund von Hinzufügung,
Entfernung oder Versagen von Knoten), muss dies auch die Hash-Funktion.
Nachdem eine neue Hash-Funktion für die Ressourcen-zu-Knoten-Abbildung
ausgewählt wurde,
müssen
die Master-Ressourcen-Objekte auf ihre neuen Master verschoben werden.
Der neue Master für
eine beliebige gegebene Ressource wird ermittelt, indem die neue
Hash-Funktion auf
den Namen der Ressource angewendet wird.
-
Leider
kann das Remastern, das in Erwiderung auf das Annehmen einer neuen
Hash-Funktion auftritt, ein Remastern jeder Ressource in dem System
zur Folge haben. Folglich kann sich das gesamte System als effektiv
nicht verfügbar
erweisen, bis das Remastern beendet ist. Dies trifft zu, selbst
wenn die Änderung
in der System-Konfiguration relativ klein ist. Zum Beispiel wenn
ein 51. Knoten zu einem 50-Knoten-System hinzugefügt wird,
ist es möglich, dass
alle Ressourcen in dem System mittels der neuen Hash-Funktion, die
zum Last-Ausgleichen
zwischen den 51 Knoten gewählt
wird, neuen Mastern zugeordnet werden. Ein ähnlich drastischer Remaster-Vorgang kann sich
ergeben, wenn ein Knoten von 50 Knoten nicht verfügbar ist.
-
Basierend
auf dem Vorangegangenen ist es deutlich wünschenswert, eine Remaster-Technik
bereitzustellen, die den mit einer Epochen-Änderung in einem Mehrfach-Knoten-System
verbundenen Remaster-Overhead reduziert. Es ist außerdem wünschenswert,
eine Remaster-Technik bereitzustellen, die ein Aufrechthalten einer
relativ ausgeglichenen Last-Verteilung nach Epochen-Änderungen
erlaubt, sowohl wenn neue Knoten zu dem System hinzugefügt werden
als auch wenn Knoten von dem System entfernt werden. Es ist auch
wünschenswert,
eine Remaster-Technik bereitzustellen, die nicht das gesamte System
für die
Dauer des Remaster-Vorgangs effektiv unverfügbar macht.
-
Der
Stand der Technik mag folgende Referenzen enthaltend betrachtet
werden:
US 5 612 865 erteilt
für Dasgupta
präsentiert
ein Verfahren zum neuen Verteilen der Kontrolle von System-Ressourcen
unter den Verarbeitungs-Knoten innerhalb des eine Gruppe bildenden
Computer-Systems in Folge einer Änderung
der System-Konfiguration,
wie beispielsweise das Versagen eines Verarbeitungs-Knotens oder
die Rückkehr
eines versagten Verarbeitungs-Knotens in den Betrieb. Das präsentierte
Verfahren weist die Schritte des Beibehaltens eines Satzes an Hash-Speicherbereichen
innerhalb jedes Verarbeitungs-Knotens, des Zuordnens einer jeden
der Ressourcen zu einem der Hash-Speicherbereiche
und des Zuordnens eines Hash-Vektors, ermittelt durch Verwendung
eines rekursiven N-Wege-Algorithmus,
zu einem jeden der Hash-Speicherbereiche auf, wobei ein jeder der
Hash-Vektoren den Verarbeitungs-Knoten innerhalb des eine Gruppe
bildenden Computer-Systems in einer vorbestimmten Reihenfolge identifiziert,
die für
den einen der Hash-Speicherbereiche einzigartig ist.
-
„Mehrrechner-Datenbanksysteme" von Erhard Rahm,
Addison Wesley, Bonn, Deutschland, 1994, präsentiert die Grundlagen für verteilte
und parallele Datenbank-Verarbeitung. Insbesondere werden zahlreiche
Sperren-Verfahren präsentiert,
z. B. ein Primärkopie-Sperren-Verfahren
oder ein Token-ring-Sperren-Protokoll.
-
Zusammenfassung der Erfindung
-
Ein
Verfahren und System werden bereitgestellt zum Rekonfigurieren eines
Mehrfach-Knoten-Systems nach einer Epochen-Änderung in einer Weise, die
den typischerweise während
der Rekonfiguration auftretenden Overhead und System-Unverfügbarkeit
reduziert. Gemäß einem
Aspekt der Erfindung wird eine Ressourcen-zu-Master-Abbildung unter
Verwendung der Kombination einer Ressourcen-zu-Speicherbereich-Hash-Funktion
und einer Speicherbereich-zu-Knoten-Hash-Funktion etabliert.
-
Gemäß einem
Aspekt der Erfindung wird die Ressourcen-zu-Speicherbereich-Hash-Funktion in Erwiderung
auf eine Epochen-Änderung
nicht geändert,
während
sich die Speicherbereich-zu-Knoten-Hash-Funktion
in Erwiderung auf Epochen-Änderungen
verändert.
Folglich ist die Ressourcen-zu-Speicherbereich-Hash-Funktion „statisch", während
die Speicherbereich-zu-Knoten-Hash-Funktion „dynamisch" ist.
-
Vorzugsweise
wird die dynamische Speicherbereich-zu-Knoten-Hash-Funktion nach einer Epochen-Änderung
in einer Weise eingestellt, dass sich die Last unter der neuen Anzahl
an Knoten in dem System ausgleicht. Außerdem werden die Änderungen
an den Speicherbereich-zu-Knoten-Zuordnungen auf einem Weg durchgeführt, der
die Anzahl an Ressourcen, die neu untergeordnet werden müssen, minimiert.
-
Gemäß einem
anderen Aspekt der Erfindung werden nur denjenigen Ressourcen, die
ihre Master während
einer Epochen-Änderung
verlieren, während
der anfänglichen
Rekonfiguration neue Master zugeordnet. Last-Ausgleichung wird dann
graduell erreicht, indem Ressourcen migriert werden, nachdem das
System verfügbar
gemacht wurde. Die alten Master von Ressourcen leiten Zugriffs-Anfragen
an neue Master von Ressourcen weiter, sobald sie die Master-Ressourcen-Objekte
für die
angefragten Ressourcen transferiert haben. Zusätzlich werden Techniken für das Migrieren
von Ressourcen von einem Knoten in Erwartung eines geplanten Abschaltens
des Knotens offenbart.
-
Kurzbeschreibung der Zeichnungen
-
Diese
Erfindung wird in den Figuren der beigefügten Zeichnungen zum Zwecke
des Beispiels und nicht zum Zwecke der Beschränkung dargestellt, und in diesen
bezeichnen gleiche Bezugszeichen ähnliche Elemente, und in diesen
ist:
-
1 ein
Blockdiagramm eines Mehrfach-Knoten-Systems mit einem verteilten
Sperren-Manager;
-
2 ein
Blockdiagramm eines Computer-Systems, auf dem ein Ausführungsbeispiel
der Erfindung implementiert sein kann;
-
3 ein
Blockdiagramm, welches ein System darstellt, das ein Ausführungsbeispiel
der Erfindung anwendet, um zu ermitteln, wo Ressourcen in einem
Mehrfach-Knoten-System unterzuordnen sind;
-
4 ein
Blockdiagramm des in 3 dargestellten Systems nach
einer Epochen-Änderung; und
-
5 ein
Flussdiagramm, welches Schritte zu Rekonfigurieren eines Systems
nach einer Epochen-Änderung
gemäß einem
Ausführungsbeispiel der
Erfindung darstellt.
-
Detaillierte Beschreibung des bevorzugten
Ausführungsbeispiels
-
Ein
Verfahren und eine Vorrichtung zum Managen von Ressourcen in einem
Mehrfach-Knoten-System werden beschrieben. In der folgenden Beschreibung
werden zum Zwecke der Erklärung zahlreiche
besonderen Details vorgestellt, um ein gründliches Verständnis dieser
Erfindung zu ermöglichen.
Es ist jedoch für
den Fachmann offensichtlich, dass diese Erfindung ohne diese besonderen
Details ausgeführt
werden kann. Bei anderen Beispielen werden wohlbekannte Strukturen
und Vorrichtungen in Blockdiagramm-Form dargestellt, um unnötiges Verbergen
dieser Erfindung zu vermeiden.
-
Hardware-Überblick
-
2 ist
ein Blockdiagramm, das ein Computer-System 200 darstellt,
auf dem ein Ausführungsbeispiel
der Erfindung implementiert sein kann. Das Computer-System 200 weist
einen Bus 202 oder einen anderen Kommunikations-Mechanismus
zum Kommunizieren von Information, und einen mit dem Bus 202 zum
Verarbeiten von Information gekoppelten Prozessor 204 auf.
Das Computer-System 200 weist auch einen mit dem Bus 202 gekoppelten Hauptspeicher 206,
wie beispielsweise einen Direktzugriffsspeicher (random access memory
= RAM) oder eine andere dynamische Speicher-Vorrichtung, zum Speichern
von Information und von dem Prozessor 204 auszuführenden
Befehlen auf. Der Hauptspeicher 206 kann auch zum Speichern
von zeitlichen Variablen oder anderer Zwischen-Information während der
Ausführung
der von dem Prozessor 204 auszuführenden Befehle verwendet werden.
Das Computer-System 200 weist außerdem gekoppelt mit dem Bus 202 einen
Nurlesespeicher (read only memory = ROM) 208 oder eine
andere statische Speicher-Vorrichtung zum Speichern von statischer Information
und Befehlen für
den Prozessor 204 auf. Eine Speicher-Vorrichtung 210,
wie beispielsweise eine magnetische Platte oder eine optische Platte, wird
zum Speichern von Information und Befehlen bereitgestellt und mit
dem Bus 202 gekoppelt.
-
Das
Computer-System 200 kann über den Bus 202 an
eine Anzeige 212, wie beispielsweise eine Kathodenstrahlröhre (cathode
ray tube = CRT), zum Anzeigen von Information für einen Computer- Nutzer gekoppelt
sein. Eine Eingabe-Vorrichtung 214, aufweisend alphanumerische
und andere Tasten, ist zum Kommunizieren von Information und zum Auswählen von
Befehlen für
den Prozessor 204 mit dem Bus 202 gekoppelt. Ein
anderer Typ von Nutzer-Eingabe-Vorrichtung ist eine Cursor-Steuerung 216,
wie beispielsweise eine Maus, ein Trackball oder Cursor-Richtungs-Tasten,
zum Kommunizieren von Richtungs-Information und zum Auswählen von Befehlen
für den
Prozessor 204 und zum Steuern der Cursor-Bewegung auf der
Anzeige 212. Diese Eingabe-Vorrichtung hat typischerweise
zwei Freiheitsgrade in zwei Achsen, einer ersten Achse (z. B. x)
und einer zweiten Achse (z. B. y), was es der Vorrichtung erlaubt,
Positionen in einer Ebene zu spezifizieren.
-
Die
Erfindung betrifft das Verwenden des Computer-Systems 200 zum
Managen von Ressourcen in einem Mehrfach-Knoten-System. Gemäß einem
Ausführungsbeispiel
der Erfindung, wird mittels des Computer-Systems 200 in
Erwiderung darauf, dass der Prozessor 204 eine oder mehrere
Sequenzen von einem oder mehreren in dem Hauptspeicher 206 enthaltenen
Befehlen ausführt,
Ressourcen-Management durchgeführt.
Solche Befehle können
von einem anderen computer-lesbaren Medium, wie beispielsweise Speicher-Vorrichtung 210,
in den Hauptspeicher 206 eingelesen werden. Das Ausführen der in
dem Hauptspeicher 206 enthaltenen Sequenzen von Befehlen
veranlasst den Prozessor 204 dazu, die hierin beschriebenen
Prozess-Schritte durchzuführen.
In alternativen Ausführungsbeispielen
kann eine hart-verdrahtete Schaltung an Stelle von oder in Kombination
mit Software-Befehlen verwendet werden, um die Erfindung zu implementieren.
Somit sind die Ausführungsbeispiele
der Erfindung nicht auf eine beliebige bestimmte Kombination von
Hardware-Schaltung und Software beschränkt.
-
Der
hierin verwendete Ausdruck „computer-lesbares
Medium" betrifft
jegliches Medium, das am Bereitstellen von Befehlen für den Prozessor 204 zum
Ausführen
beteiligt ist. Solch ein Medium kann viele Formen annehmen, einschließlich aber
nicht beschränkend
auf nicht-flüchtige
Medien, flüchtige Medien
und Übertragungs-Medien.
Nicht-flüchtige Medien
weisen zum Beispiel optische oder magnetische Platten, wie beispielsweise
die Speicher-Vorrichtung 210, auf. Flüchtige Medien weisen dynamischen
Speicher, wie beispielsweise den Hauptspeicher 206, auf. Übertragungs-Medien
weisen Koaxialkabel, Kupferdraht und Faseroptiken auf, einschließlich der
Drähte,
die der Bus 202 aufweist. Übertragungs-Medien können auch
die Form von akustischen oder Licht-Wellen annehmen, wie beispielsweise
diejenigen, die während
Radio-Wellen- und Infrarot-Daten-Kommunikationen erzeugt werden.
-
Allgemeine
Formen an computer-lesbaren Medien weisen zum Beispiel eine Diskette,
eine flexible Platte, eine Festplatte, ein magnetisches Band oder
irgendein anderes magnetisches Medium, eine CD-ROM, irgendein anderes
optisches Medium, Lochkarten, Papierband, irgendein anderes physikalisches
Medium mit Mustern an Löchern,
ein RAM, ein PROM, ein EPROM, ein Flash-EPROM, irgendeinen anderen
Speicher-Chip oder -Kassette, eine wie nachfolgend beschriebene
Träger-Welle
oder irgendein anderes Medium, von dem ein Computer lesen kann,
auf.
-
Zahlreiche
Formen an computer-lesbaren Medien können in dem Tragen einer oder
mehrerer Sequenzen eines oder mehrerer Befehle des Prozessors 204 zum
Ausführen
verwickelt sein. Zum Beispiel können
die Befehle anfänglich
auf einer magnetischen Platte eines entfernten Computers getragen werden.
Der entfernte Computer kann die Befehle in seinen dynamischen Speicher
laden und die Befehle über
eine Telefon-Leitung unter Verwendung eines Modems senden. Ein Modem
am Ort des Computer-Systems 200 kann die Daten auf der
Telefon-Leitung empfangen und einen Infrarot-Transmitter verwenden,
um die Daten in ein Infrarot-Signal zu konvertieren. Ein Infrarot-Detektor kann die
in dem Infrarot-Signal getragenen Daten empfangen und eine geeignete
Schaltung kann die Daten in den Bus 202 einspeisen. Der
Bus 202 trägt
die Daten zu dem Hauptspeicher 206, von wo der Prozessor 204 die Befehle
erhält
und ausführt.
Die von dem Hauptspeicher 206 empfangenen Befehle können optional
auf der Speicher-Vorrichtung 210 gespeichert
werden, entweder vor oder nach Ausführung durch den Prozessor 204.
-
Das
Computer-System 200 weist auch eine mit dem Bus 202 gekoppelte
Kommunikations-Schnittstelle 218 auf. Die Kommunikations-Schnittstelle 218 stellt
eine mit einer Netzwerk-Verknüpfung 220,
die an ein lokales Netzwerk 222 angeschlossen ist, gekoppelte
Zwei-Wege-Daten-Kommunikation bereit. Zum Beispiel kann die Kommunikations-Schnittstelle 218 eine
Dienste-integrierendes-digitales-Netzwerk (ISDN) -Karte oder ein Modem
sein, um eine Daten-Kommunikations-Verbindung mit einem entsprechenden
Typ an Telefon-Leitung bereitzustellen. Als ein anderes Beispiel kann
die Kommunikations-Schnittstelle 218 eine lokales-Datennetz
(LAN) -Karte sein, um eine Daten-Kommunikations-Verbindung zu einem
kompatiblen LAN bereitzustellen. Drahtlose Verknüpfungen können ebenso implementiert sein.
In jeglicher solcher Implementierung sendet und empfängt die
Kommunikations-Schnittstelle 218 elektrische,
elektromagnetische oder optische Signale, die zahlreiche Typen an
Information repräsentierende
digitale Daten-Ströme
tragen.
-
Die
Netzwerk-Verknüpfung 220 stellt
typischerweise Daten-Kommunikation
durch ein oder mehrere Netzwerke hindurch zu anderen Daten-Vorrichtungen
bereit. Zum Beispiel kann die Netzwerk-Verknüpfung 220 eine Verbindung
durch das lokale Netzwerk 222 zu einem Host-Computer 224 oder
zu einer von einem Internet-Service-Provider (ISP) 226 betriebenen
Daten-Maschine bereitstellen. Der
ISP 226 seinerseits stellt Daten-Kommunikations-Dienste durch das weltweite
Paket-Daten-Kommunikations-Netzwerk,
nun üblicherweise
als das „Internet" 228 bezeichnet,
hindurch bereit. Das lokale Netzwerk 222 und das Internet 228 verwenden
beide elektrische, elektromagnetische oder optische Signale, die
digitale Daten-Ströme tragen.
Die Signale durch die zahlreichen Netzwerke hindurch und die Signale
auf der Netzwerk-Verknüpfung 220 und
durch die Kommunikations-Schnittstelle 218 hindurch, welche
die digitalen Daten zu und von dem Computer-System 200 tragen,
sind beispielhafte Formen für Trägerwellen,
die Information transportieren.
-
Das
Computer-System 200 kann durch das/die Netzwerk(e), die
Netzwerk-Verknüpfung 220 und
die Kommunikations-Schnittstelle 218 hindurch Nachrichten
versenden und Daten, einschließlich Programm-Code,
empfangen. Bei dem Internet-Beispiel könnte ein Server 230 einen
Anfrage-Code für ein
Anwendungs-Programm durch das Internet 228, den ISP 226,
das lokale Netzwerk 222 und die Kommunikations-Schnittstelle 218 hindurch übertragen.
-
Der
empfangene Code kann von dem Prozessor 204, so wie er empfangen
wurde, ausgeführt werden
und/oder in der Speicher-Vorrichtung 210 oder
einem anderen nicht-flüchtigen
Speicher für spätere Ausführung gespeichert
werden. Auf diese Weise kann das Computer-System 200 Anwendungs-Code
in der Form einer Trägerwelle
erhalten.
-
Funktionaler Überblick
-
Hierin
werden Techniken zum Einrichten einer Ressourcen-zu-Master-Abbildung
für eine
Anzahl an L Ressourcen in einem N-Knoten-System unter Verwendung einer
M-Speicherbereichs-Hash-Funktion
beschrieben, wobei M größer als
N aber kleiner als L ist. In der Praxis kann L drei bis vier Größenordnungen
größer als
M sein, während
M ein bis zwei Größenordnungen
größer als
N ist. Zum Beispiel kann eine 1000-Speicherbereichs-Hash-Funktion verwendet
werden, um eine Ressourcen-zu-Speicherbereichs-Abbildung für eine Million
Ressourcen in einem 6-Knoten-System einzurichten. Da die Anzahl
an Speicherbereichen die Anzahl an Knoten übersteigt, werden jedem Knoten
unter Verwendung einer zweiten Speicherbereich-zu-Knoten-Hash-Funktion
ein oder mehrere Speicherbereiche zugeordnet.
-
Gemäß einem
Aspekt der Erfindung wird die zum Abbilden von Ressourcen auf Hash-Speicherbereiche
verwendete Hash-Funktion in Erwiderung auf eine Epochen-Änderung
nicht geändert.
Im Gegensatz zu der Name-zu-Speicherbereich-Hash-Funktion verändert sich
die Speicherbereich-zu-Knoten-Hash-Funktion in Erwiderung auf Epochen-Änderungen.
Folglich ist die Ressourcen-zu-Speicherbereich-Hash-Funktion „statisch", während die Speicherbereich-zu-Knoten-Hash-Funktion „dynamisch" ist.
-
Vorzugsweise
wird die dynamische Speicherbereich-zu-Knoten-Hash-Funktion nach einer Epochen-Änderung
in einer Weise angepasst, dass die Last über die neue Anzahl an Knoten
in dem System hinweg ausgeglichen wird. Vorzugsweise werden die Änderungen
an den Speicherbereich-zu-Knoten-Zuordnungen auf eine Weise durchgeführt, dass
die Anzahl an Ressourcen, die neu untergeordnet werden müssen, minimiert
wird.
-
Gemäß einem
Ausführungsbeispiel
wird das Zuordnen mittels der Speicherbereich-zu-Knoten-Hash-Funktion
unter Verwendung von Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information durchgeführt, die
beibehalten wird, um anzuzeigen, welche Speicherbereichs-Gebiete
welchen Knoten entsprechen. In Erwiderung auf Epochen-Änderungen
wird die Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information
basierend auf einem Satz von Regeln zum neuen Abbilden überarbeitet.
Die Regeln zum neuen Abbilden versuchen sowohl die Last gleichmäßig zu verteilen,
als auch die Anzahl an Ressourcen, die neu untergeordnet werden
müssen,
zu minimieren.
-
Da
die Anzahl an Speicherbereichen kleiner als die Anzahl an Ressourcen
ist und da die Anzahl an Speicherbereichs-Gebieten kleiner als die
Anzahl an Speicherbereichen ist, wird die Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information
typischerweise signifikant kleiner als die Menge an Information
sein, die benötigt
würde,
wenn Ressourcen auf einer individuellen Basis auf Knoten abgebildet wären.
-
Beispielhaftes System
-
Bezug
nehmend auf 3 ist dies ein Blockdiagramm,
das ein Mehrfach-Knoten-System darstellt, das Speicherbereichs-Gebiete gemäß einem Ausführungsbeispiel
der Erfindung auf Knoten abbildet. Das System verwendet eine Hash-Funktion 302, um
die Ressourcen-Namen 300 auf 1000 Hash-Speicherbereiche 304 abzubilden.
Das System behält
die Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information 318 bei,
um anzugeben, welche Hash-Speicherbereiche welchen Knoten entsprechen.
Diese Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information 318 betreibt
eine zweite Hash-Funktion, welche eine relativ große Anzahl
an Speicherbereichen auf eine kleinere Anzahl an Knoten abbildet.
Wenn ein Speicherbereich auf einen Knoten abgebildet wird, werden
Ressourcen, die Ressourcen-Namen haben, die mittels Hash-Funktion
auf diesen Speicherbereich abgebildet werden, an diesem Knoten kontrolliert.
-
In
dem in 3 dargestellten Ausführungsbeispiel gibt es zwei
Knoten 306 und 308. Speicherbereichs-Gebiet 1-500
wird auf den Knoten 306 abgebildet und Speicherbereichs-Gebiet
501-1000 wird auf den Knoten 308 abgebildet. Folglich ist
der Knoten 306 der Master aller Ressourcen, deren Namen den
Speicherbereichen 1-500 mittels Hash-Funktion zugeordnet sind, und
der Knoten 308 ist der Master aller Ressourcen, deren Namen
den Speicherbereichen 501-1000 mittels Hash-Funktion zugeordnet sind.
-
4 ist
ein Blockdiagramm, das das in 3 gezeigte
System darstellt, nachdem eine Epochen-Änderung aufgetreten ist. In
diesem Beispiel resultierte die Epochen-Änderung daraus, dass ein neuer
Knoten 402 in das System eingeführt wurde, wodurch die Anzahl
der Knoten auf drei erhöht
wurde. In Erwiderung auf die Epochen-Änderung wurde keine Änderung
an der Ressourcen-zu-Speicherbereich-Hash-Funktion 302 vorgenommen.
Folglich bleibt die Anzahl an Hash-Speicherbereichen gleich und alle Speicherbereichs-Namen
werden weiterhin mittels Hash-Funktion auf die gleichen Speicherbereiche
abgebildet.
-
Um
jedoch die Verantwortung zum Unterordnen von Ressourcen unter den
drei Knoten gleichmäßiger zu
verteilen werden an der Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information 318 Überarbeitungen
vorgenommen. Insbesondere wird das auf den Knoten 306 abgebildete
Speicherbereichs-Gebiet von 1-500 auf 1-333 geändert. In ähnlicher Weise wird das auf
den Knoten 308 abgebildete Speicherbereichs-Gebiet von
501-1000 auf 501-833
geändert.
Die verbleibenden Speicherbereichs-Gebiete (334-500 und 834-1000)
werden dann auf den neuen Knoten 402 abgebildet.
-
Alle
Ressourcen, deren Namen mittels Hash-Funktion auf diejenigen Speicherbereiche
abgebildet werden, die auf den neuen Knoten 402 abgebildet
werden, müssen
an dem neuen Knoten neu untergeordnet werden. Im Gegensatz zu früheren Remaster-Techniken
bleiben jedoch die Ressourcen, die nicht auf den neu eingeführten Knoten
abgebildet werden, im Allgemeinen bei ihren gegenwärtigen Mastern
untergeordnet. In diesem Beispiel bleiben alle Ressourcen, die mittels
Hash-Funktion den Speicherbereichen
1-333 zugeordnet sind, bei dem Knoten 306 untergeordnet
und alle Ressourcen, die mittels Hash-Funktion den Speicherbereichen 501-833
zugeordnet sind, bei dem Knoten 308 untergeordnet. Folglich
wird für
diese Ressourcen keinerlei mit dem Remastern verknüpfter Aufwand
verursacht.
-
Speicherbereichs-Gebiet-zu-Knoten-Abbildungs-Anpassungen
-
Wie
oben dargestellt, wird das Speicherbereichs-Gebiet-zu-Knoten-Abbilden in
Erwiderung auf Epochen-Änderungen
in einer Weise angepasst, die versucht, sowohl (1) die Kontroll-Belastung unter dem
neuen Satz an Knoten gleichmäßig zu verteilen, als
auch (2) die Anzahl an Ressourcen, die neu untergeordnet werden,
zu reduzieren. Zahlreiche Abbildungs-Anpassungs-Techniken können zum
Erreichen dieser Ziele angewendet werden. In der folgenden Diskussion
sollen bestimmte Techniken im Detail erläutert werden. Diese Erfindung
ist jedoch nicht auf irgendeine bestimmte Abbildungs-Anpassungs-Technik
beschränkt.
-
Gemäß einem
Ausführungsbeispiel
der Erfindung ist die von dem System verwendete Abbildungs-Anpassungs-Technik
deterministisch. Somit werden die Abbildungs-Anpassungs-Regeln unter der
Voraussetzung irgendeiner bestimmten anfänglichen Speicherbereich-zu-Knoten-Abbildung
und irgendeiner bestimmten System-Konfigurations-Änderung
eine einzelne überarbeitete
Speicherbereich-zu-Knoten-Abbildung erzeugen. Unter Verwendung eines
deterministischen Satzes an Abbildungs-Anpassungs-Regeln kann jeder
Knoten in dem System die Verantwortung für seine Rolle bei den Remaster-Vorgängen ohne
irgendeine unnötige Koordinations-Mitteilungs-Übermittlung mit anderen Knoten übernehmen.
-
Zum
Zwecke der Erklärung
soll in den folgenden Beschreibungen angenommen werden, dass es für alle Knoten,
die in einem System existieren, wünschenswert ist, dass diese
gleichmäßig am Unterordnen
von Ressourcen teilnehmen. Die Speicherbereichs-Zuordnungs-Techniken
können
jedoch in Übereinstimmung
angepasst werden, um für
Systeme Platz zu haben, in welchen weniger als alle Knoten teilnehmen
und/oder wo Knoten bei unterschiedlichen Pegeln (z. B. einem System,
in dem es für
einen Knoten wünschenswert
ist, die Hälfte
der Anzahl an Ressourcen, die an einem anderen Knoten kontrolliert
werden, zu kontrollieren) teilnehmen.
-
Der Gleich-Speicherbereich-Ansatz
-
Gemäß dem Gleich-Speicherbereich-Ansatz wird
jedem Knoten in dem System eine Nachricht gesendet, die die Anzahl
an Knoten angibt, die in dem System nach einer Epochen-Änderung gehören. Jeder
Knoten kennt die Gesamtanzahl an von der Hash-Funktion erzeugten Speicherbereichen,
und ist daher fähig
zu berechnen, wie viele Speicherbereiche jeder Knoten haben muss,
damit die Speicherbereiche gleichmäßig unter den existierenden
Knoten verteilt sind (der „Ziel-Speicherbereich-Zählwert").
-
Die
Knoten, die nach einer Epochen-Änderung
in dem System existieren, fallen in eine von zwei Kategorien: Knoten,
deren gegenwärtig
zugeordneten Gebiete mehr als die Ziel-Speicherbereich-Zählwerts-Anzahl abdecken, („Überschuss-Knoten") und Knoten, deren
gegenwärtig
zugeordneten Gebiete weniger als die Ziel-Speicherbereich-Zählwerts-Anzahl
abdecken, („Defizit-Knoten"). Gemäß dem Gleich-Speicherbereich-Ansatz
reduzieren die Überschuss-Knoten
ihre Gebiete, bis ihre Gebiete lediglich den Ziel-Speicherbereich-Zählwert abdecken. Die Defizit-Knoten
andererseits vergrößern ihre
Gebiete (oder werden zusätzlichen
Gebieten zugeordnet), um die Speicherbereiche abzudecken, die von den
durch die Überschuss-Knoten
erlittenen Gebiets-Reduktionen „gestrandet" geblieben sind.
Diese Gebiets-Zuwächse
werden unter den Defizit-Knoten auf eine Weise verteilt, die die
Defizit-Knoten mit Gebieten
zurücklässt, die
die Ziel-Speicherbereich-Zählwert-Anzahl
der Speicherbereiche abdecken.
-
4 zeigt
zum Beispiel das System von 3 nachdem
eine Epochen-Änderung
stattgefunden hat. Während
dieser Epochen-Änderung
wurde ein dritter Knoten 402 zu einem Zwei-Knoten-System hinzugefügt. Unter
Verwendung des Gleich-Speicherbereich-Ansatzes
beträgt
die Ziel-Anzahl an Speicherbereichen nach der dargestellten System-Änderung
1000/3 = 333,3. Anfänglich
nach der Epochen-Änderung
deckt das dem Knoten 306 zugeordnete Gebiet 500 Ressourcen
ab, deckt das dem Knoten 308 zugeordnete Gebiet 500 Ressourcen
ab und deckt das dem Knoten 402 zugeordnete Gebiet keine
Ressourcen ab (bisher wurde kein Gebiet dem Knoten 402 zugeordnet).
Folglich sind die Knoten 306 und 308 Überschuss-Knoten und der Knoten 402 ist
ein Defizit-Knoten.
-
Die Überschuss-Knoten 306 und 308 verkleinern
die ihnen zugeordneten Gebiete, so dass ihre Abdeckung auf die Ziel-Anzahl an Speicherbereichen (333)
reduziert wird. In dem dargestellten Beispiel wird das dem Knoten 306 zugeordnete
Gebiet von 1-500 auf 1-333 reduziert und das dem Knoten 308 zugeordnete
Gebiet wird von 501-1000 auf 501-833 reduziert. Nachdem die Überschuss-Knoten
diese Gebiets-Reduktion durchgemacht haben, sind die Speicherbereiche,
die zu den Gebieten 334-500 und 834-1000 gehören, nicht mehr länger irgendeinem Knoten
zugeordnet und gehören
somit zu einem „gestrandeten
Speicherbereichs-Pool".
-
Die
Defizit-Knoten werden Gebieten zugeordnet, die Speicherbereiche
abdecken, die zu dem gestrandeten Speicherbereichs-Pool gehören, wodurch
deren Anzahl an zugeordneten Speicherbereichen auf die Ziel-Anzahl
an Speicherbereichen erhöht
wird. In diesem Beispiel wird dem einzigen Defizit-Knoten 402 alle
Gebiete zugeordnet, die zu dem gestrandeten Speicherbereichs-Pool
(in diesem Fall, Gebiete 334-500 und 834-1000) gehören. In
Erwiderung auf die Nach-Epochen-Änderungs-Speicherbereichs-Gebiets-Neuzuordnungen wird
die Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information 318 überarbeitet.
Die in 4 dargestellte Speicherbereichs-Gebiet-zu-Knoten-Abbilde-Information 318 reflektiert
die Speicherbereichs-Gebiet- Zuordnungen nachdem
die Gebiete gemäß dem Gleich-Speicherbereichs-Ansatz
eingestellt wurden.
-
Gemäß einem
Ausführungsbeispiel
wählen Überschuss-Knoten
Gebiete zum Entlassen in den gestrandeten Speicherbereichs-Pool auf eine Weise aus,
die die Gesamtanzahl an Gebiets-Zuweisungen reduziert.
Zum Beispiel zu dem Zeitpunkt, zu dem der Knoten 308 Speicherbereiche
in den gestrandeten Speicherbereichs-Pool entlässt, hat der Knoten 306 bereits
die Gebiete 224-500 in den gestrandeten Speicherbereichs-Pool entlassen.
Statt das Gebiet 834-1000 in den gestrandeten Speicherbereichs-Pool
zu entlassen, kann der Knoten 308 ein Gebiet auswählen, das
zu dem bereits in dem gestrandeten Speicherbereichs-Pool befindlichen
Gebiet benachbart ist. In diesem Beispiel kann der Knoten 308 entscheiden,
das Gebiet 500-666 zu entlassen. Nach dem Entlassen des Gebiets
500-666, verbleibt der Knoten 308 mit dem Gebiet 667-1000
und der gestrandete Speicherbereichs-Pool enthält ein einzelnes Gebiet 334-666.
-
In
diesem Beispiel kann das in dem gestrandeten Speicherbereichs-Pool
enthaltene Gebiet einfach dem Defizit-Knoten 402 zugeordnet werden. Wenn
jedoch ein Defizit-Knoten bereits ein oder mehrere Speicherbereichs-Gebiete
zugeordnet hat, wählt der
Defizit-Knoten aus dem gestrandeten Speicherbereichs-Pool Gebiete
aus, die zu seinen bereits zugeordneten Gebieten benachbart sind,
wenn dies durchzuführen
möglich
ist. Zum Beispiel wird angenommen, dass der Knoten 402 von
dem System entfernt wird. Dies resultiert in einer Epochen-Änderung, bei
der die Anzahl an Knoten von drei zurück auf zwei reduziert wird.
Unter der Annahme, dass dem Knoten 402 das Gebiet 334-666
zugeordnet war, würde
dieses Gebiet in dem gestrandeten Speicherbereichs-Pool platziert.
Die verbleibenden Knoten 306 und 308 wären beides
Defizit-Knoten, da ihre gegenwärtigen
Gebiete lediglich 333 Speicherbereiche abdecken, und der
neue Ziel-Speicherbereich-Zählwert wäre 1000/2
= 500.
-
Um
seine Abdeckung auf den Ziel-Speicherbereich-Zählwert zu erhöhen, entfernt
der Knoten 306 das Gebiet 334-500 aus dem gestrandeten Speicherbereichs-Pool.
Dieses Gebiet wird ausgewählt,
da es benachbart zu dem gegenwärtig
dem Knoten 306 zugeordneten Gebiet 1-333 ist. Der Knoten 308 entfernt
dann das verbleibende Gebiet 501-666 aus dem gestrandeten Speicherbereichs-Pool.
Als ein Ergebnis dieser Gebiets-Anpassungen
sind die den Knoten 306 und 308 zugeordneten Gebiete
wieder 1-500 bzw. 501-1000.
-
Der Knoten-Vektor-Ansatz
-
Eine
Alternative zu dem Gleich-Speicherbereichs-Ansatz zur Speicherbereichs-Neu-Zuordnung wird
hierin auf den Knoten-Vektor-Ansatz
Bezug genommen. Gemäß dem Knoten-Vektor-Ansatz
wird ein M-Längen-Vektor
aufrecht erhalten, wobei M die Anzahl an Hash-Speicherbereichen
der Ressourcen-zu-Speicherbereich-Hash-Funktion
ist. Jeder Eintrag in dem Knoten-Vektor entspricht einem Hash-Speicherbereich
und speichert einen Knoten-Identifizierer. Der mittels des Knoten-Identifizierers
identifizierte Knoten eines Vektor-Eintrags dient als der Master aller
Ressourcen, deren Namen mittels Hash-Funktion dem Speicherbereich,
der diesem Vektor-Eintrag
zugeordnet ist, zugeordnet sind. Zum Beispiel wird angenommen, dass
der Vektor MASTER() benannt ist. Wenn der Identifizierer für den Knoten
N1 in MASTER(5) gespeichert ist, dann werden alle Ressourcen, die
mittels Hash-Funktion dem Speicherbereich 5 zugeordnet sind, auf
dem Knoten N1 kontrolliert.
-
Anfänglich wird
der Knoten-Vektor MASTER() bevölkert,
indem eine ungefähr
gleiche Anzahl an Einträgen
jedem der Knoten zugeordnet wird. Ein einfacher Weg zum Durchführen diese
Zuordnung ist, beginnend bei dem ersten Vektor-Eintrag X Knoten-Identifizierer
für jeden
Knoten zu speichern, wobei X gleich der Anzahl an Hash-Speicherbereichen dividiert
durch die Anzahl an Knoten ist. Zum Beispiel, wenn es 100 Hash-Speicherbereiche
und 10 Knoten gibt, dann wird der Identifizierer für den ersten
Knoten in den Vektor-Einträgen
1-10 gespeichert, der Identifizierer für den zweiten Knoten in den
Vektor-Einträgen
11-20 gespeichert, usw.
-
Nach
einer Epochen-Änderung
wird ein zweiter Knoten-Vektor NEWMASTER() erzeugt. Zusätzlich wird
ein Ziel-Speicherbereich-Zählwert wie oben
beschrieben basierend auf der Anzahl an Knoten in dem Nach-Epochen-Änderungs-System
berechnet. Der NEWMASTER()-Vektor wird anfänglich bevölkert, indem der in jedem Eintrag
in dem MASTER()-Vektor gespeicherte Identifizierer, der die folgenden
zwei Bedingungen erfüllt,
in NEWMASTER() kopiert wird: (1) der Identifizierer gehört zu einem Knoten,
der noch im System vorhanden ist, und (2) die Anzahl an bereits
dem Knoten zugeordneten Einträgen
ist kleiner als der Ziel-Speicherbereich-Zählwert.
Nach dieser anfänglichen
Bevölkerung
von NEWMASTER() werden alle Ressourcen, die mittels Hash-Funktion
einem Wert i zugeordnet sind so dass MASTER(i) = NEWMASTER(i), unverzüglich verfügbar gemacht.
Die verbleibenden nicht zugeordneten Einträge in NEWMASTER() werden dann
Knoten-Identifizierer in einer Weise zugeordnet, die versucht, eine
Gesamtsumme von X Identifizierern für jeden Knoten zu speichern,
wobei X der Ziel-Speicherbereich-Zählwert ist.
-
Nachdem
alle Einträge
in NEWMASTER() bevölkert
wurden, müssen
alle Ressourcen, die mittels Hash-Funktion einem Wert i zugeordnet
sind so dass MASTER(i) <> NEWMASTER(i), neu
untergeordnet werden. Während
dieses Remaster-Vorgangs transferiert jeder Knoten Na die Master-Ressourcen-Objekte
der Ressourcen, die mittels Hash-Funktion einem Speicherbereich
i zugeordnet sind, auf einen anderen Knoten Nb, wobei MASTER(i)
= Na und NEWMASTER(i) = Nb. Zusätzlich
baut jeder Knoten Na die Master-Ressourcen-Objekte für Ressourcen, die
mittels Hash-Funktion einem Speicherbereich i zugeordnet sind, um,
wobei MASTER(i) = der Identifizierer eines Knoten, der während der
Epochen-Änderung
verloren ging, und NEWMASTER(i) = Na.
-
Verspätetes
Last-Ausgleichen
-
Im
idealen Fall ist die mit dem Unterordnen von Ressourcen verknüpfte Last
gleichmäßig unter den
Knoten in dem Nach-Rekonfigurations-System verteilt.
Außerdem
wird nur die minimale Anzahl an Ressourcen, die zum gleichmäßigen Verteilen
der Last benötigt
werden, während
der Rekonfiguration bewegt. Auch wenn die minimale Anzahl an Ressourcen,
die zum gleichmäßigen Verteilen
der Last benötigt
werden, neu untergeordnet wird, kann der Rekonfigurations-Prozess jedoch eine
signifikante Menge an Overhead betreffen und Teile des Systems für eine unakzeptabel
lange Zeitspanne unverfügbar machen.
-
Gemäß einem
Aspekt der Erfindung wird die Dauer des Rekonfigurations-Betriebs
reduziert, indem anfänglich
weniger als alle Ressourcen, die neu untergeordnet werden müssen, neu
untergeordnet werden, um den gewünschten
Last-Ausgleich zu erreichen. Somit gleicht die anfängliche
Rekonfiguration, die nach einer Epochen-Änderung auftritt, die Last
nicht gleichmäßig auf.
Nachdem die anfängliche Rekonfiguration
statt gefunden hat und das System allgemein verfügbar gemacht wurde, werden
statt dessen Speicherbereiche von Überschuss-Knoten auf Defizit-Knoten graduell neu
zugeordnet, wodurch die Ressourcen „migriert" werden, um über die Zeit hinweg eine gleichmäßiger verteilte
Last-Balance zu erreichen.
-
Es
gibt zwei generelle Typen an Neu-Unterordnen-Vorgängen: Verlust-Master-Neu-Unterordnen
und Transfer-Master-Neu-Unterordnen.
Verlust-Master-Neu-Unterordnen wird für Ressourcen benötigt, deren
Vor-Epochen-Änderungs-Master während der
Epochen-Änderung
von dem System entfernt wurden. Verlust-Master-Neu-Unterordnen einer
Ressource betrifft im Allgemeinen das neue Zusammenstellen des Master-Ressource-Objekts für die Ressource
an einem existierenden Knoten.
-
Andererseits
wird Transfer-Master-Neu-Unterordnen für Ressourcen durchgeführt, deren Vor-Epochen-Änderungs-Master
nach der Epochen-Änderung
weiterhin in dem System existieren. Transfer-Master-Neu-Unterordnen
erfordert nicht das neue Zusammenstellen des Master-Ressource-Objekts
einer Ressource, da das Master-Ressource-Objekt während der
Epochen-Änderung
nicht verloren wurde.
-
Gemäß einem
Ausführungsbeispiel
werden lediglich diejenigen Ressourcen, die sich einem Verlust-Master-Neu-Unterordnen
unterziehen, nach einer Epochen-Änderung
anfänglich
neu untergeordnet. Insbesondere wird die Speicherbereich-zu-Knoten-Hash-Funktion
in Erwiderung auf eine Epochen-Änderung überarbeitet,
um lediglich die Speicherbereiche, die auf Knoten abgebildet waren, die
während
der Epochen-Änderung
verloren wurden, neu zuzuordnen. Vorzugsweise wird die Speicherbereich-zu-Knoten-Hash-Funktion
in einer Weise überarbeitet,
die diese Speicherbereiche auf Nach-Epochen-Änderungs-Knoten
abbildet, die gegenwärtig
die geringsten Kontroll-Lasten haben. Die Knoten, auf die diese
Speicherbereiche neu zugeordnet werden, weisen typischerweise irgendwelche Knoten
auf, die während
der Epochen-Änderung
zu dem System neu hinzugefügt
wurden.
-
Nachdem
alles notwendige Verlust-Master-Neu-Unterordnen durchgeführt wurde,
wird das System für
die Nutzer verfügbar
gemacht. Die graduelle Migration von zusätzlichen Ressourcen von Überschuss-Knoten
auf Defizit-Knoten zum Erreichen eine ausbalanciertere Last-Verteilung
wird durchgeführt,
nachdem das System verfügbar
gemacht worden ist. Außerdem
werden die Transfer-Master-Neu-Unterordnen-Vorgänge, die nach der anfänglichen
Nach-Epochen-Änderungs-Rekonfiguration
durchgeführt
werden, in einer Weise durchgeführt,
die das System nicht wieder unverfügbar macht.
-
Bezug
nehmend auf 5 ist dies ein Flussdiagramm,
das Schritte zum neuen Unterordnen von Ressourcen nach einer Epochen-Änderung
gemäß einem
Ausführungsbeispiel
der Erfindung darstellt. Bei Schritt 502 tritt die Epochen-Änderung auf. Bei Schritt 504 werden
Defizit-Knoten als Master der Speicherbereiche, die zu Knoten zugeordnet
waren, die während
der Epochen-Änderung
verloren gegangen sind („Master-lose
Speicherbereiche"),
ausgewählt.
Gemäß einem
Ausführungsbeispiel
werden der eine oder die mehreren Knoten des Nach-Epochen-Änderungs-Systems,
die die kleinste Anzahl an zugeordneten Speicherbereichen haben,
ausgewählt.
Typischerweise würden
die ausgewählten Speicherbereiche
irgendwelche Knoten aufweisen, die während der Epochen-Änderung zu dem System hinzugefügt wurden.
-
Bei
Schritt 506 wird die Speicherbereich-zu-Knoten-Abbildung überarbeitet,
um die Master-losen Speicherbereiche zu den Knoten zuzuordnen, die
in Schritt 504 ausgewählt
wurden. Bei Schritt 508 wird Verlust-Master-Neu-Unterordnen
durchgeführt.
Insbesondere werden die Master-Ressource-Objekte für die Ressourcen,
die Namen haben, die mittels Hash-Funktion den neu abgebildeten Speicherbereichen
zugeordnet sind, auf ihren neuen Master-Knoten neu zusammengestellt.
Wenn zum Beispiel der Name der Ressource R1 mittels Hash-Funktion
einem Speicherbereich B1 zugeordnet ist, der auf einen Knoten N1
neu abgebildet wurde, dann wird das Master-Ressource-Objekt für R1 auf
N1 neu zusammengestellt.
-
Die
Schritte 504, 506 und 508 bilden die
anfängliche
Rekonfiguration, die nach einer Epochen-Änderung gemäß einem Ausführungsbeispiel der
Erfindung durchgeführt
wird. Die Schritte 510–518 stellen
die mit der Nach-Rekonfiguration-Ressourcen-Migration
zusammenhängenden Schritte
dar, die nach der anfänglichen
Rekonfiguration durchgeführt
wird, um die Last zwischen den Knoten, die nach der Epochen-Änderung
existieren, gleichmäßiger auszugleichen.
Viele Überschuss-Knoten können partizipieren übereinstimmend
an der Nach-Rekonfiguration-Ressourcen-Migration.
Solch eine Nach-Rekonfiguration-Ressourcen-Migration
kann außerdem
graduell stattfinden und muss nicht sofort nach der anfänglichen
Rekonfiguration auftreten oder beginnen.
-
Bei
Schritt 510 selektiert ein Überschuss-Knoten einen Defizit-Knoten,
zu welchem einer oder mehrere der Speicherbereiche, die gegenwärtig zu
dem Überschuss-Knoten
gehören,
zugeordnet werden. Zum Zwecke der Erklärung soll angenommen werden,
dass ein einzelner „Ziel"-Speicherbereich dem
ausgewählten
Defizit-Knoten neu zugeordnet werden soll. Bei Schritt 512 sendet
der Überschuss-Knoten
eine Speicherbereich-Transfer-Nachricht an den selektierten Defizit-Knoten,
um den Defizit-Knoten darüber
zu informieren, dass der Ziel-Speicherbereich zu dem Defizit-Knoten
neu zugeordnet wird. Bei Schritt 514 sendet der Überschuss-Knoten
die Master-Knoten-Objekt-Information für Ressourcen, die zu dem Ziel-Speicherbereich gehören, an
den selektierten Defizit-Knoten.
-
Bei
Schritt 516 sendet der Defizit-Knoten an die anderen Knoten
in dem System eine Nachricht aus, die anzeigt, dass der Defizit-Speicherbereich der
neue Master des Ziel-Speicherbereichs
ist. Bei Schritt 518 antworten die Knoten mittels Aktualisierens
ihrer Speicherbereich-zu-Knoten-Abbildung,
um anzuzeigen, dass der Ziel-Speicherbereich dem Defizit-Knoten,
der die Nachricht gesendet hat, zugeordnet wurde.
-
Es
ist bedeutsam, dass das System verfügbar bleiben kann, während Nach-Rekonfiguration-Ressourcen-Migration
stattfindet. Gemäß einem Ausführungsbeispiel
können
gerade Prozesse, die Zugriff auf Ressourcen anfordern, die Migration
unterliegen, weiterhin ausgeführt
werden. Zum Beispiel wird angenommen, dass ein Prozess auf einem
Knoten N1 eine Ressource benötigt,
die von einem Knoten N2 auf einen Knoten N3 migriert wird. Der Ressourcen-Name
wird mittels Hash-Funktion
einem Speicherbereich zugeordnet sein, der gemäß der Speicherbereich-zu-Knoten-Abbildung
bei N3 nach wie vor N2 zugeordnet ist. Folglich wird der Prozess eine
Zugriffs-Anfrage
an N2 senden. Wenn N2 noch nicht das Master-Ressource-Objekt für die fragliche Ressource transferiert
hat, kann N2 die Anfrage ganz normal bedienen. Wenn N2 bereits das
Master-Ressource-Objekt auf N3 transferiert hat, dann leitet N2 die
Anfrage an N3 weiter. Selbst wenn das Master-Ressource-Objekt für die Ressource
noch nicht bei N3 angekommen ist, wird die Anfrage bei N3 nach dem
Master-Ressource-Objekt
ankommen, da Daten von N2 bei N3 in der selben Reihenfolge ankommen,
wie sie von N2 gesendet werden. Sobald sowohl das Master-Ressource-Objekt
als auch die Anfrage bei N3 ankommen, kann dann N3 die Anfrage bedienen.
-
Gemäß einem
Aspekt der Erfindung kann der Knoten, der eine Ressource zu einem
anderen Knoten (N2 in dem oben erläuterten Beispiel) transferiert,
seine eigene Version des Master-Ressource-Objekts,
das er transferiert, weiterhin beibehalten. Die Version des bei
dem transferierenden Knoten beibehaltenen Master-Ressource-Objekts
dient als eine Sicherung (Backup). Wenn folglich der Knoten, an
welchen ein Master-Ressource-Objekt transferiert wird, ausfällt, kann
das Backup-Master-Ressource-Objekt verwendet werden, um den Zugriff
auf die Ressource zu steuern. Bis der empfangende Knoten die Tatsache
aussendet, dass er der neue Master ist, wird der mit dem Beibehalten
des Backup-Master-Ressource-Objekts
auf dem transferierenden Knoten verknüpfte Overhead durch die Tatsache
reduziert werden, dass alle Zugriffs-Anfragen in jedem Fall bei dem transferierenden
Knoten ankommen (und von diesem weitergeleitet werden). Nachdem der
empfangende Knoten die Tatsache aussendet, dass er der neue Master
ist, kann der transferierende Knoten entweder aufhören, das
Backup-Master-Ressource-Objekt beizubehalten, oder das Master-Ressource-Objekt
weiterhin beibehalten. Wenn der transferierende Knoten weitermacht,
die Backup-Version des Master-Ressource-Objekts beizubehalten, tut
es dies zum Zwecke des akkuraten Beibehaltens des Backups, indem
er sich den zusätzlichen
Overhead zuzieht, der damit verknüpft ist, dass der neue Master-Knoten
Zugriffs-Anfragen an den alten Master-Knoten weiterleitet.
-
Wenn
eine Epochen-Änderung
auftritt, während
die mit einem Speicherbereich verknüpften Master-Ressource-Objekte
zwischen Knoten migriert werden, wird gemäß einem Ausführungsbeispiel
der Speicherbereich als ein Master-loser Speicherbereich behandelt.
Folglich wird während
der anfänglichen
Rekonfiguration nach der Epochen-Änderung der Speicherbereich
einem Master neu zugeordnet und die Master-Ressource-Objekte werden
neu zusammengestellt.
-
Geplantes Abschalten
-
Gemäß einem
Ausführungsbeispiel
der Erfindung werden die in 5 gezeigten
Schritte 510–518 vor
einer Epochen-Änderung
durchgeführt, wenn
es bekannt ist, dass bestimmte Knoten während der Epochen-Änderung
abgeschaltet werden sollen. Wenn es zum Beispiel bekannt ist, dass
der Knoten N2 abgeschaltet werden soll, kann der Knoten N2 die Master-Ressource-Objekte,
die mit gegenwärtig
N2 zugeordneten Speicherbereichen verknüpft sind, auf einen oder mehrere
Knoten transferieren, die nicht abgeschaltet werden sollen.
-
Wenn
während
dieses Prozesses N2 eine mit einer Ressource verknüpfte Zugriffs-Anfrage
erhält,
deren Master-Ressource-Objekt
bereits transferiert wurde, dann leitet N2 die Anfrage an den passenden
Knoten weiter. Nachdem N2 die mit allen zuvor N2 zugeordneten Speicherbereichen
verknüpften Master-Ressource-Objekte
transferiert hat, wartet N2 darauf, dass alle empfangenden Knoten
Nachrichten aussenden, die ihre neuen Speicherbereichs-Zuordnungen
anzeigen. Nachdem alle ausgesendeten Nachrichten gesendet wurden,
wird N2 nicht mehr länger
irgendeinem Speicherbereich zugeordnet sein und X2 kann abschalten.
Das Abschalten von N2 unter diesen Bedingungen wird nicht den mit
Verlust-Master-Neu-Unterordnen verknüpften Overhead verursachen.