PatentDe  


Dokumentenidentifikation DE69715537T2 15.05.2003
EP-Veröffentlichungsnummer 0818001
Titel FEHLERTOLERANTE VERFAHRENSMETHODE
Anmelder Hewlett-Packard Co. (n.d.Ges.d.Staates Delaware), Palo Alto, Calif., US
Erfinder FLEMING, Roger Alan, Bristol BS16 5JN, GB
Vertreter Schoppe, Zimmermann, Stöckeler & Zinkler, 82049 Pullach
DE-Aktenzeichen 69715537
Vertragsstaaten DE, FR, GB
Sprache des Dokument EN
EP-Anmeldetag 24.01.1997
EP-Aktenzeichen 979011954
WO-Anmeldetag 24.01.1997
PCT-Aktenzeichen PCT/GB97/00228
WO-Veröffentlichungsnummer 0097027542
WO-Veröffentlichungsdatum 31.07.1997
EP-Offenlegungsdatum 14.01.1998
EP date of grant 18.09.2002
Veröffentlichungstag im Patentblatt 15.05.2003
IPC-Hauptklasse G06F 11/14

Beschreibung[de]
Gebiet der Erfindung

Die vorliegende Erfindung bezieht sich auf ein fehlertolerantes Verarbeitungsverfahren zum Empfangen und Verarbeiten von Eingangsnachrichten, um Ausgangsnachrichten zu erzeugen. Insbesondere bezieht sich die vorliegende Erfindung auf ein Verfahren zum Betreiben einer softwarefehlertoleranten Wiederherstellungs- bzw. Erholungseinheit, wobei das Verarbeiten von Eingangsnachrichten durch primäre und sekundäre Wiederholungsanwendungsprozesse erfolgt.

Man sollte beachten, daß der Begriff "Prozeß" hierin in einem allgemeinen Sinn einer Verarbeitungsfunktionalität verwendet wird, die durch einen Code, der an einem Prozessor betrieben wird, bereitgestellt wird, wobei dieser Code jedoch organisiert ist (das heißt, ob nun der Code eine Instanz lediglich eines Teils eines Programms oder eines ganzen Programms ist oder über mehrere Programme verteilt ist). Ferner soll eine Bezugnahme auf einen Prozeß als einen "Anwendungs"-Prozeß in einem breitgefaßten Sinn im Sinne eines Prozesses verstanden werden, der eine bestimmte gewünschte Funktionalität bereitstellt, wobei zu diesem Zweck Eingangsnachrichten an den Prozeß gesandt werden.

Hintergrund der Erfindung

Softwarebasierte fehlertolerante Systeme können als in eine oder mehrere Wiederherstellungseinheiten organisiert betrachtet werden, von denen jede eine Ausfall- und Wiederherstellungseinheit darstellt. Eine Wiederherstellungseinheit kann als aus einem lebendigen Prozeß, einer Anordnung zum Protokollieren von Wiederherstellungsinformationen die für diesen lebendigen Prozeß relevant sind, und einer Wiederherstellungseinrichtung bestehend angesehen werden, die im Fall eines Ausfalls des lebendigen Prozesses bewirkt, daß ein Ersatzprozeß abläuft.

Falls ein Ausfall des lebendigen Prozesses aufgrund eines Ausfalls des Prozessors, der ihn betreibt, abgedeckt werden muß, so müssen selbstverständlich sowohl die Speicherung von Wiederherstellungsinformationen als auch die Wiederherstellungseinrichtung selbst von dem Prozessor, der den lebendigen Prozeß betreibt, getrennt sein.

Dort, wo ein System mehrere Wiederherstellungseinheiten umfaßt, überlappen sich diese in der Regel in bezug auf eine Prozessornutzung; beispielsweise kann der Prozessor, der anvisiert ist, um den Ersetzungsprozeß für die erste Wiederherstellungseinheit zu betreiben, auch der Prozessor sein, der den lebendigen Prozeß einer zweiten Wiederherstellungseinheit betreibt. In der Tat kann auch eine gemeinsame Ressourcennutzung durch die Wiederherstellungseinheiten bezüglich ihrer Protokollierungs- und Wiederherstellungseinrichtungen vorliegen.

Ein veranschaulichendes fehlertolerantes Computersystem des Standes der Technik ist in Fig. 1 der beiliegenden Zeichnungen gezeigt. Dieses System weist drei Prozessoren I, II, III und eine Platteneinheit 10 auf, die alle durch ein LAN 11 miteinander verbunden sind. Das System ist als zwei Wiederherstellungseinheiten A und B organisiert, von denen jede einen zugeordneten lebendigen Prozeß A/L, B/L aufweist. Der lebendige Prozeß A/L wird an dem Prozessor I betrieben, und der lebendige Prozeß B/L wird an dem Prozessor II betrieben. Die Wiederherstellungseinheit A ist derart angeordnet, daß auf einen Ausfall ihres lebendigen Prozesses A/L hin an dem Prozessor II ein Ersatzprozeß A/R die Führung übernimmt; desgleichen ist die Wiederherstellungseinheit B derart angeordnet, daß in dem Fall, daß ein lebendiger Prozeß B/L ausfallen sollte, an dem Prozessor III ein Ersatzprozeß B/R die Führung übernimmt.

Ein lebendiger Prozeß schreitet abhängig von seinem deterministischen Verhalten und von nicht-deterministischen Ereignissen wie beispielsweise externen Eingaben (einschließlich Nachrichten, die von anderen lebendigen Prozessen, wo diese vorhanden sind, empfangen werden) und nicht- deterministischen internen Ereignissen durch eine Aufeinanderfolge von internen Zuständen fort.

Wenn ein Ersatzprozeß einen ausgefallenen lebendigen Prozeß ablöst, muß der Ersatzprozeß in einen Zustand plaziert werden, den der ausgefallene Prozeß erreichte (obwohl dies nicht unbedingt sein aktuellster Zustand vor dem Ausfall sein muß). Dazu ist es nötig, Zustandsinformationen über den lebendigen Prozeß zumindest an einem Punkt vor dem Ausfall zu kennen; falls auch Informationen über die durch den ausgefallenen Prozeß erlebten nicht-deterministischen Ereignisse bekannt sind, ist es möglich, den Ersatzprozeß von dem bezüglich des ausgefallenen Prozesses bekannten Zustand zu einem späteren Zustand, der durch den letztgenannten Prozeß erreicht wurde, vorlaufen zu lassen.

Dort, wo die Wiederherstellungsgeschwindigkeit nicht kritisch ist, kann ein Lösungsansatz verwendet werden, bei dem Zustandsinformationen über den lebendigen Prozeß (Prozeß A/L in Fig. 1) regelmäßig durch die Protokollierungseinrichtung der Wiederherstellungseinheit von dem flüchtigen Speicher des Prozessors, der den Prozeß betreibt, prüfpunktmäßig in einem stabilen Speicher (Platteneinheit 10) abgelegt werden. Auf einen Ausfall des lebendigen Prozesses A/L hin kann die Wiederherstellungseinrichtung der Wiederherstellungseinheit einen Ersatzprozeß A/R in einem Zustand beibringen, der dem zuletzt prüfpunktmäßig abgelegten Zustand des ausgefallenen lebendigen Prozesses entspricht. Wenn ein prüfpunktmäßiges Ablegen nicht bei jeder Zustandsänderung durchgeführt wird, hinkt der Zustand des Ersatzprozesses A/R allgemein selbstverständlich hinter dem durch den lebendigen Prozeß vor dem Ausfall erzielten tatsächlichen Zustand hinterher. Dies kann dadurch abgemildert werden, indem man die Protokollierungseinrichtung der Wiederherstellungseinheit entsprechende Informationen über alle nicht-deterministischen Ereignisse, die der lebendige Prozeß zwischen seinen Prüfpunkten erfahren hat, auf sichere Weise speichern läßt und anschließend anordnet, daß die Wiederherstellungseinrichtung diese Ereignisse dem Ersatzprozeß vorspielt, um ihn mehr auf den neuesten Stand zu bringen.

Dort, wo die Wiederherstellungsgeschwindigkeit kritisch ist, ist es oft bevorzugt, zumindest einen Nachbildungs- bzw. Wiederholungsprozeß (Prozeß B/R in Fig. 1) zu betreiben, der eine Schattenverarbeitung des Verarbeitens des lebendigen Prozesses B/L durchführt und dieselben nicht- deterministischen Ereignisse wie letzterer empfängt; in diesem Kontext sind der lebendige und der Wiederholungsprozeß auch als der primäre bzw. der sekundäre Prozeß bekannt. Der Wiederholungsprozeß B/R agiert effektiv als Speicher von Zustandsinformationen über den lebendigen Prozeß B/L. Der lebendige Prozeß und seine Nachbildung können eng gekoppelt sein, so daß sie immer synchron sind, oder er kann lose mit der Wiederholung gekoppelt sein, die allgemein hinter dem lebendigen Prozeß herhinkt. Auf einen Ausfall des lebendigen Prozesses B/L hin bewirkt die Wiederherstellungseinrichtung, daß der Wiederholungsprozeß als der Ersatzprozeß B/R die Führung übernimmt. Dort, wo die Kopplung zwischen dem lebendigen Prozeß und seinem Duplikat lediglich lose ist, kann die Nachbildung unter Verwendung dieser Informationen auf einen aktuelleren Stand gebracht werden, falls entsprechende Informationen über die durch den lebendigen Prozeß erfahrenen nicht-deterministischen Ereignisse gespeichert wurden.

Die vorliegende Erfindung beschäftigt sich mit softwarefehlertoleranten Systemen, die eine Protokollierung bei einem Wiederholungsprozeß verwenden.

Es wird offensichtlich werden, daß der mit einem Protokollieren von Wiederherstellungsinformationen in Verbindung stehende Mehraufwand bei Anordnungen, bei denen der Ersatzprozeß zu dem Zustand des lebendigen Prozesses bei Ausfall gebracht wird, beträchtlich größer ist. In der Tat ist es nicht notwendig, den Ersatzprozeß in denselben Zustand zu versetzen, den der lebendige Prozeß beim Ausfall aufwies; statt dessen besteht das Erfordernis darin, den Ersatzprozeß in den letzten äußerlich sichtbaren Zustand zu versetzen, nämlich den letzten Zustand, in dem die Wiederherstellungseinheit eine Ausgabe entweder an außerhalb des fehlertoleranten Systems oder an andere Wiederherstellungseinheiten in dem System erzeugte. Anders gesagt besteht das Erfordernis darin, daß es keine verlorenen Zustände gibt, wie sie von außerhalb der Wiederherstellungseinheit wahrgenommen werden.

Da es eventuell nicht möglich ist, Ereignisse außerhalb des Systems zu steuern, wird allgemein bewirkt, daß die Protokollierungseinrichtung der Wiederherstellungseinheit entweder die Zustandsinformationen des lebendigen Prozesses prüfpunktmäßig ablegt und Informationen über nicht- deterministische Ereignisse auf sichere Weise speichert oder im Fall eines lose gekoppelten Wiederholungsprozesses sicherstellt, daß letzterer dieselben Informationen über nicht-deterministische Ereignisse empfangen hat wie der lebendige Prozeß, bevor eine system-externe Ausgabe durchgeführt wird. Diese Prozedur ist als "Ausgabeverpflichtung" bekannt und kann einen beträchtlichen Verarbeitungsmehraufwand darstellen.

Dieselbe Prozedur kann in bezug auf eine Ausgabe verwendet werden, die an andere Wiederherstellungseinheiten in dem fehlertoleranten System erfolgt, obwohl, falls dies nicht möglich ist (beispielsweise weil der mit dem Bereitstellen dieser Fähigkeit zusammenhängende Mehraufwand als zu hoch erachtet wird), die Wiederherstellungseinrichtung die nicht ausgefallenen lebendigen Prozesse zu Zuständen "zurückrollen" muß, die mit dem einen, in den der Ersatzprozeß versetzt werden kann, übereinstimmen. Ein Zurückrollen ist jedoch eine komplexe Prozedur und allgemein nicht attraktiv.

Das Dokument "INTERNATIONAL SYMPOSIUM ON FAULT TOLERANT COMPUTING. (FTCS), CHICAGO, 20.-23. JUNI 1989, Nr. SYMP. 19., 20. Juni 1989, INSTITUTE OF ELECTRICAL AND ELECTRONICS ENGINEERS, Seiten 184-190, XP000089476 SPEIRS N. A. ET AL: 'USING PASSIVE REPLICATES IN DELTA-4 TO PROVIDE DEPENDABLE DISTRIBUTED COMPUTING'" offenbart einen relevanten Hintergrund zu der vorliegende Erfindung, da es einen Überblick des Delta-4-Ansatzes liefert, der ein Ansatz bezüglich einer Fehlertoleranz ist, der auf der Wiederholung von Softwarekomponenten auf gesonderten Host-Computern basiert, wobei sowohl aktive als auch passive Wiederholungsstrategien beteiligt sind, bei denen eine Rückwärts-Fehler-Erholung durch ein Integrieren eines prüfpunktmäßigen Ablegens mit einer Zwischenprozeßkommunikation erzielt wird.

Es ist eine Aufgabe der vorliegenden Erfindung, eine vereinfachte Anordnung bereitzustellen, um zu gewährleisten, daß es keine verlorenen Zustände gibt, wenn ein Wiederholungsprozeß befördert wird, um einen ausgefallenen lebendigen Prozeß abzulösen.

Zusammenfassung der Erfindung

Gemäß der vorliegenden Erfindung wird ein Verfahren zum Betreiben einer fehlertoleranten Wiederherstellungseinheit zum Empfangen und Verarbeiten von Eingangsnachrichten, um Ausgangsnachrichten zu erzeugen, bereitgestellt, wobei das Verfahren folgende Schritte aufweist:

(a) - Bereitstellen mindestens zweier Verarbeitungsentitäten, auf denen jeweilige Wiederholungsanwendungsprozesse zum Verarbeiten der Eingangsnachrichten laufen, um Anwendungsnachrichten zu erzeugen, wobei eine Verarbeitungsentität als eine primäre Verarbeitungsentität dient und jede andere Verarbeitungsentität als eine sekundäre Verarbeitungsentität dient, wobei eine der sekundären Verarbeitungsentitäten als eine Senderverarbeitungsentität fungiert;

(b) - Empfangen der Eingangsnachrichten an der primären Verarbeitungsentität und Bewirken, daß der Wiederholungsanwendungsprozeß, der durch die letztere betrieben wird, hierin der primäre Prozeß, diese Eingangsnachrichten verarbeitet;

(c) - Protokollieren der Eingangsnachrichten und jeglicher nicht-deterministischer Auswahlen, die durch den primären Prozeß während seines Verarbeitens getroffen werden, bei jeder der sekundären Verarbeitungsentitäten;

(d) - Bewirken, daß der durch jede sekundäre Verarbeitungsentität betriebene Wiederholungsanwendungsprozeß, hierin ein sekundärer Prozeß, diejenigen der Eingangsnachrichten, die bereits bei der primären Verarbeitungsentität empfangen wurden, in derselben Reihenfolge wie der primäre Prozeß verarbeitet, wobei jegliche im Schritt (c) protokollierten nicht-deterministischen Auswahlen durch jeden sekundären Prozeß verwendet werden, statt daß letzterer seine eigenen nicht- deterministischen Auswahlen während des Verarbeitens trifft; und

(e) - Verwenden der Anwendungsnachrichten, die durch den sekundären Prozeß, der durch die Senderverarbeitungsentität betrieben wird, erzeugt werden, als die Wiederherstellungseinheit-Ausgangsnachrichten;

wobei das Verfahren ferner folgende Schritte aufweist:

(f) - auf einen Ausfall der primären Verarbeitungsentität hin, Bewirken, daß eine der sekundären Verarbeitungsentitäten die Rolle der primären Verarbeitungsentität übernimmt, und

(g) - auf einen Ausfall der Senderverarbeitungsentität oder auf ein Übernehmen der Rolle der primären Verarbeitungsentität durch die Senderverarbeitungsentität im Schritt (f) hin, Bewirken, daß eine andere der sekundären Verarbeitungsentitäten, wo vorhanden, die Senderverarbeitungsentität wird, und andernfalls Verwenden der durch den primären Prozeß erzeugten Anwendungsnachrichten als die Ausgangsnachrichten, wobei dieser Schritt (g) ohne einen Verlust von Wiederherstellungseinheit-Ausgangsnachrichten bewerkstelligt wird.

Da die Verantwortung für die Wiederherstellungseinheit- Ausgangsnachrichten bei der Sender-Verarbeitungsentität liegt, wird es keine extern sichtbaren verlorenen Zustände geben, falls entweder die primäre oder eine der sekundären Verarbeitungsentitäten ausfallen sollte.

Allgemein sind der primäre und der sekundäre Prozeß angeordnet, um an getrennten Prozessoren ausgeführt zu werden, obwohl dies nicht wesentlich ist. Die Funktionalität, die die fehlertoleranten Charakteristika des Verfahrens liefert, kann als Teil der primären und sekundären Prozesse selbst implementiert sein (beispielsweise als verknüpfte Bibliotheken integriert sein) oder kann als separate Software-Schicht bereitgestellt sein, die den primären und sekundären Prozessen Dienste bereitstellt. Was die Anzahl von sekundären Verarbeitungsentitäten angeht, können mehrere sekundäre Entitäten bereitgestellt sein, obwohl in vielen Fällen der Einfachheit halber eine einzige sekundäre Verarbeitungsentität ausreichend ist, und eine Bezugnahme auf "jede" sekundäre Entität oder "jeden" sekundären Prozeß soll als den Singularfall umfassend verstanden werden.

Die oder jede sekundäre Verarbeitungsentität kann die Eingangsnachrichten unabhängig von der primären Verarbeitungsentität empfangen (beispielsweise kann die Sendequelle angeordnet sein, um ihre Nachrichten sowohl an die primäre als auch die sekundäre Verarbeitungsentität zu senden); in diesem Fall muß die oder jede sekundäre Verarbeitungsentität durch die primäre Verarbeitungsentität ausdrücklich von den empfangenen Nachrichten und ihrer Verarbeitungsreihenfolge informiert werden.

Vorzugsweise werden die Eingangsnachrichten jedoch als Teil der Protokollierung von Informationen von der primären Verarbeitungsentität an jede sekundäre Verarbeitungsentität weitergeleitet. Insbesondere umfaßt Schritt (c) bei einem bevorzugten Ausführungsbeispiel (dem Ausführungsbeispiel einer "späten Protokollierung") ein Protokollieren jeder Eingangsnachricht, die durch den primären Prozeß verarbeitet wird, bei der (den) sekundären Verarbeitungsentität(en), nachdem der primäre Prozeß sein Verarbeiten dieser Eingangsnachricht beendet hat, wobei jeder derart protokollierten Eingangsnachricht etwaige nicht-deterministische Auswahlen zugeordnet sind, die durch den primären Prozeß beim Verarbeiten der Nachricht getroffen werden. Diese Anordnung gewährleistet, daß jede sekundäre Entität lediglich Nachrichten verarbeitet, die bereits durch die primäre Entität verarbeitet wurden, und daß die Reihenfolge der Verarbeitung dieselbe sein wird. Bei einem anderen bevorzugten Ausführungsbeispiel (dem Ausführungsbeispiel einer "frühen Protokollierung") umfaßt der Schritt (c) ferner ein Protokollieren jeder an der primären Verarbeitungsentität empfangenen Eingangsnachricht bei jeder sekundären Verarbeitungsentität, ohne auf das Verarbeiten der Eingangsnachricht durch den primären Prozeß zu warten, wobei jegliche nicht-deterministischen Auswahlen, die durch den primären Prozeß beim Verarbeiten dieser Eingangsnachricht getroffen wurden, anschließend bei der sekundären Verarbeitungsentität protokolliert werden. Dieses Ausführungsbeispiel kann beinhalten, daß die sekundäre Entität ihr Verarbeiten stoppen muß, während sie darauf wartet, daß die primäre Entität eine nicht-deterministische Auswahl liefert, die beim Verarbeiten einer bestimmten Eingangsnachricht erforderlich ist.

Dort, wo mehrere sekundäre Prozesse bereitgestellt sind, können diese in unterschiedlichen Anordnungen konfiguriert sein. Bei einer ersten Anordnung, einer Weiterleitungsanordnung, führt die primäre Verarbeitungsentität ein Protokollieren bei einer der sekundären Entitäten durch, was wiederum ein Protokollieren bei einer weiteren der sekundären Entitäten bewirkt, usw., je nach Bedarf, wobei die Senderverarbeitungsentität die letzte Entität in dieser Protokollierungskette ist. Bei einer zweiten Anordnung, einer Eine-An-Viele-Anordnung, führt die primäre Verarbeitungsentität selbst direkt ein Protokollieren bei allen sekundären Verarbeitungsentitäten durch. Bei beiden Anordnungen werden Neusende-Warteschlangen von protokollierten Pasten durch zumindest eine Entität aufrechterhalten, um eine Ausfallerholung zu ermöglichen.

Zumindest bei den Ausführungsbeispielen, bei denen die Eingangsnachrichten durch die primäre Verarbeitungsentität direkt oder indirekt bei jeder sekundären Verarbeitungsentität protokolliert werden, wird es auf einen Ausfall der primären Verarbeitungsentität hin allgemein notwendig sein, dafür zu sorgen, daß Eingangsnachrichtquellen zumindest ihre jüngsten Nachrichten neu senden, da die primäre Verarbeitungsentität zum Zeitpunkt ihres Ausfalls vielleicht nicht alle empfangenen Eingangsnachrichten an die oder jede sekundäre Verarbeitungsentität weitergeleitet hat. Jedoch obliegt die Verantwortung zum Auslösen dieses Neusendens oft einer Fehlertoleranz-Verwaltungseinrichtung, die auf ein Erfassen einer Ausfallbedingung in der Wiederherstellungseinheit hin alle Eingangsnachrichtquellen auffordert, unbestätigte Nachrichten für die betreffende Wiederherstellungseinheit erneut zu übermitteln.

Desgleichen wird es auf einen Ausfall der Senderverarbeitungsentität hin allgemein notwendig sein, daß die Verarbeitungsentität, die diese Rolle übernimmt, etwaige unbestätigte Ausgangsnachrichten erneut sendet, da die Entität, die die Senderrolle übernimmt, beim Verarbeiten weiter vorgerückt sein kann als die ausgefallene Senderentität, so daß Ausgangsnachrichten verloren werden könnten, falls der neue Sender einfach nur seine neu erzeugten Nachrichten sendet. Um die neue Senderverarbeitungsentität zu befähigen, Ausgangsnachrichten erneut zu senden, wird bewirkt, daß diese Entität normalerweise eine Warteschlangenanordnung der Anwendungsnachrichten, die sie erzeugt, aufrechterhält, wobei diese Warteschlangenanordnung als die Quelle von Ausgangsnachrichten zum erneuten Senden dient, falls die Senderentität ausfallen sollte. Es sind auch andere Lösungen als eine Bildung von Warteschlangen und ein Neusenden von Ausgangsnachrichten möglich; wo mehrere sekundäre Entitäten vorliegen, kann diejenige sekundäre Entität, die dazu ausersehen ist, die Senderentität abzulösen, falls letztere ausfallen sollte, angeordnet sein, um bei ihrem Verarbeiten von Eingangsnachrichten hinter der Senderentität hinterherzuhinken.

In der Tat ist die Warteschlangenbildung von Anwendungsnachrichten diejenige Lösung, die gegenüber einem Vermeiden der Möglichkeit eines Ausgangsnachrichtsverlustes bevorzugt wird, und in der Tat erhält jede Verarbeitungsentität vorteilhafterweise eine Neusende-Warteschlangenanordnung aufrecht, die Anwendungsnachrichten, die sie erzeugt hat, hält. Ein Grund dafür, mehr als eine Verarbeitungsentität eine solche Warteschlangenanordnung aufrechterhalten zu lassen, besteht darin, daß, falls lediglich eine Verarbeitungsentität beteiligt wäre, die Nachrichtenwarteschlangen bestenfalls schwierig und unzweckmäßig wären, sollte diese Entität ausfallen. Ein weiterer Grund dafür, eine Neusende- Warteschlangenanordnung für Anwendungsnachrichten aufrechtzuerhalten, besteht darin, die erneute Übermittlung von Nachrichten an eine andere Wiederherstellungseinheit, die einen Ausfall erlebt hat und erfordert, daß aktuelle Nachrichten erneut gesendet werden, zu ermöglichen.

Um zu ermöglichen, daß die einer Verarbeitungsentität zugeordnete Neusende-Warteschlangenanordnung in einem verwaltbaren Umfang gehalten wird, weist das Verfahren der Erfindung vorzugsweise den weiteren Schritt des Empfangens von Eingangsbestätigungen, die den Empfang der durch die Wiederherstellungseinheit gesandten Ausgangsnachrichten bestätigen, und des Entfernens derjenigen Ausgangsnachrichten, deren Empfang bestätigt wurde, aus den Neusende- Warteschlangenanordnungen auf. Das Verfahren der Erfindung umfaßt vorzugsweise ferner den weiteren Schritt des Ausgebens von Bestätigungen von Eingangsnachrichten, die an der einen der Verarbeitungsentitäten empfangen werden, deren Verarbeitung derzeit die Ausgangsnachrichten bereitstellt. Diese Bestätigungen können dadurch durchgeführt werden, daß die Ausgangsnachrichten an die entsprechende Wiederherstellungseinheit gesendet werden, oder sie können auch separat gesandt werden.

Um einen blockierungsfreien Betrieb zwischen Wiederherstellungseinheiten oder zwischen einer Wiederherstellungseinheit und einem nicht-fehlertoleranten Client der Wiederherstellungseinheit zu ermöglichen, wird eine Flußsteuerung von Eingangs- und Ausgangsnachrichten verwendet. Ausführungsbeispiele der Erfindung können die weiteren Schritte eines Protokollierens von Anwendungsnachrichten, die durch die Senderverarbeitungsentität erzeugt wurden, in einer Neusende-Warteschlangenanordnung einer festgelegten Länge, sowohl bevor die Anwendungsnachrichten gesendet wurden, als auch nachdem die Anwendungsnachrichten durch die Senderverarbeitungsentität gesendet wurden, und eines Stoppens des sekundären Anwendungsprozesses, falls die Neusende- Warteschlangenanordnung der feststehenden Länge voller Anwendungsnachrichten ist, umfassen.

Das Einreihen von Ausgangsnachrichten in Warteschlangen bzw. das Warteschlangenbilden von Ausgangsnachrichten bei einer Senderverarbeitungsentität kann vorteilhafterweise mit dem Einreihen von Eingangsnachrichten in Warteschlangen bzw. dem Warteschlangenbilden von Eingangsnachrichten kombiniert werden. Somit werden Eingangsnachrichten, die sowohl an der primären als auch den sekundären Verarbeitungsentitäten empfangen werden, vorzugsweise in einer Eingangswarteschlangenanordnung einer feststehenden Länge protokolliert, und es wird eine Bestätigung einer bestimmten Eingangsnachricht ausgegeben, wenn die bestimmte Eingangsnachricht zum Verarbeiten durch die sekundäre Verarbeitungsentität aus der Eingangswarteschlangenanordnung der feststehenden Länge entnommen wird. Dieses Flußsteuerungsschema gewährleistet, daß, wenn die Eingangswarteschlange einer ersten empfangenden Wiederherstellungseinheit voll ist, dieselbe keine weiteren Nachrichten von einer zweiten sendenden Wiederherstellungseinheit empfängt.

Im Anschluß an einen Ausfall einer Verarbeitungsentität wird allgemein eine neue sekundäre Verarbeitungsentität, die einen neuen sekundären Prozeß betreibt, beigebracht, und Zustandsinformationen werden von einer nicht ausgefallenen Verarbeitungsentität an dieselbe transferiert. Dort, wo jede Verarbeitungsentität eine zugeordnete Neusende- Warteschlangenanordnung aufweist, wäre es dann möglich, den Inhalt der Warteschlangenanordnung der nicht ausgefallenen Verarbeitungsentität an die Neusende-Warteschlangenanordnung der neuen Entität zu transferieren; dies beinhaltet jedoch einen beträchtlichen Mehraufwand. Deshalb wird ein solcher Transfer vorzugsweise nicht durchgeführt. Sollte die neue sekundäre Verarbeitungsentität die Senderentität werden und aufgefordert werden, Nachrichten an eine bestimmte Wiederherstellungseinheit, die einen Ersatzbetrieb durchläuft, neu zu senden, so wird statt dessen bewirkt, daß die nicht ausgefallene Verarbeitungsentität, die ursprünglich ihren Zustand an die neue Verarbeitungsentität transferierte, entweder direkt oder über eine sekundäre Verarbeitungsentität an die bestimmte weitere Wiederherstellungseinheit Nachrichten in ihrer Neusende- Warteschlangenanordnung sendet, die an die bestimmte weitere Wiederherstellungseinheit adressiert sind und Zuständen der nicht ausgefallenen Verarbeitungsentität zugeordnet sind, in die eingetreten wurde, bevor dieselbe ihren Zustand an die neue Verarbeitungsentität transferierte.

Bei einem Ausführungsbeispiel sendet eine Wiederherstellungseinheit, die sich von einem Ausfall einer ihrer Verarbeitungsentitäten erholt, Ausgangsnachrichten von zwei verschiedenen Quellen, somit muß jegliche empfangende Wiederherstellungseinheit in der Lage sein, hiermit umzugehen und auch mit der Möglichkeit, daß Nachrichten in der falschen Reihenfolge empfangen werden, klarzukommen. Deshalb enthalten die Eingangsnachrichten vorteilhafterweise Informationen bezüglich ihrer Quelle und, zumindest implizit, ihres Sequenzierens, und Schritt (b) beinhaltet ferner ein vorübergehendes Speichern von Eingangsnachrichten, die nicht in der richtigen Abfolge von einer der Quellen empfangen wurden, während ein Empfang von fehlenden, in der Abfolge früher auftauchenden Nachrichten erwartet wird, und ein Unterbreiten der von der Quelle empfangenen Eingangsnachrichten zum Verarbeiten durch den primären Prozeß in ihrer korrekten Abfolge.

Bei einem alternativen Ausführungsbeispiel sendet eine sich von einem Ausfall einer ihrer Verarbeitungsentitäten erholende Wiederherstellungseinheit Ausgangsnachrichten von lediglich einer ihrer Verarbeitungsentitäten. Auf einen Ausfall einer sekundären Verarbeitungsentität hin wird vorzugsweise eine neue sekundäre Verarbeitungsentität, die einen neuen der sekundären Prozesse betreibt, beigebracht, und die Verantwortung für das Senden von Ausgangsnachrichten wird von der primären Verarbeitungsentität an die neue sekundäre Verarbeitungsentität transferiert. Die neue sekundäre Verarbeitungsentität fordert dann von der primären Verarbeitungsentität lediglich diejenigen Ausgangsnachrichten an, die von anderen Wiederherstellungseinheiten benötigt werden. Dies beinhaltet einen bei weitem geringeren Mehraufwand als ein prüfpunktmäßiges Ablegen aller gespeicherten Nachrichten an der primären Verarbeitungsentität teilen, da lediglich diejenigen Nachrichten, die tatsächlich von entfernten Wiederherstellungseinheiten benötigt werden, von der primären Verarbeitungsentität zu der sekundären Verarbeitungsentität kopiert werden.

Kurze Beschreibung der Zeichnungen

Im folgenden wird ein fehlertolerantes Verfahren, das die Erfindung verkörpert, anhand eines nicht-einschränkenden Beispiels unter Bezugnahme auf die beiliegenden schematischen Zeichnungen beschrieben. Es zeigen:

Fig. 1 ein Blockdiagramm eines fehlertoleranten Systems des Standes der Technik;

Fig. 2 ein Blockdiagramm einer fehlertoleranten Wiederherstellungseinheit, die die vorliegenden Erfindung implementiert;

Fig. 3 ein Diagramm, das die Hauptstufen veranschaulicht, die während eines normalen Betriebs der Wiederherstellungseinheit der Fig. 2 auftreten;

Fig. 4 ein Diagramm, das die Hauptstufen veranschaulicht, die während eines Ersatzbetriebs der Wiederherstellungseinheit der Fig. 2 auftreten;

Fig. 5 ein Diagramm, das eine Verkettete- Protokollierung-Anordnung in einer Wiederherstellungseinheit mit mehreren sekundären Entitäten veranschaulicht;

Fig. 6 ein Diagramm, das eine Auffächerungsprotokollierungsanordnung in einer Wiederherstellungseinheit mit mehreren sekundären Entitäten veranschaulicht; und

Fig. 7 ein Diagramm, das die Konfiguration einer Neusende-Warteschlange einer Sendereinheit und einer Eingangswarteschlange einer primären Einheit veranschaulicht.

Bester Modus zum Durchführen der Erfindung

Fig. 2 veranschaulicht eine Wiederherstellungseinheit eines fehlertoleranten Systems, das die vorliegende Erfindung verkörpert. Die Wiederherstellungseinheit weist kommunizierende erste und zweite Verarbeitungsentitäten auf, die im vorliegenden Fall als separate primäre und sekundäre Verarbeitungseinheiten I und II ausgebildet sind, die jeweils einen Prozessor 20, der Software betreibt, und eine entsprechende Kommunikationsanordnung 21 (beispielsweise ein LAN) aufweisen, die die Einheiten I und II befähigen, miteinander zu sprechen; ferner befähigt die Kommunikationsanordnung 21 die Einheiten I und II, mit anderen Systemelementen, beispielsweise anderen Wiederherstellungseinheiten, zu sprechen.

Der Deutlichkeit der Erklärung halber ist die Software, die durch jede Verarbeitungseinheit I, II betrieben wird, als ein Betriebssystem/eine Kommunikationsschicht 22, das bzw. die eine elementare Betriebsumgebung liefert, als eine Fehlertolerante-Dienste-Schicht 23, die Dienste für einen fehlertoleranten Betrieb von Anwendungsprozessen liefert, und als die Anwendungsprozesse 24 selbst, die konzeptionell auf den Schichten 22 und 23 betrieben werden, gezeigt.

Bei dem vorliegenden Beispiel ist lediglich ein Anwendungsprozeß 24 veranschaulicht, wobei dieser Prozeß dazu dient, eine bestimmte Verarbeitungsfunktionalität zu liefern, die das Verarbeiten von Eingangsnachrichten, um Ausgangsnachrichten zu erzeugen, beinhaltet. Dieses Verarbeiten kann das Treffen von nicht-deterministischen Auswahlen beinhalten.

Die durch die Einheiten I und II betriebenen Prozesse 24 sind Wiederholungsanwendungsprozesse, wobei der Prozeß, der an der primären Verarbeitungseinheit I betrieben wird, als ein primärer Prozeß agiert, und der Prozeß, der an der sekundären Verarbeitungseinheit II betrieben wird, als ein sekundärer Prozeß agiert. Beim Verarbeiten von Eingangsnachrichten durchlaufen sie beide eine Abfolge von Zuständen und erzeugen einen Ausgang; da die Prozesse Nachbildungen bzw. Wiederholungen sind, durchlaufen sie, wenn sie von demselben anfänglichen Zustand ausgehen, dieselbe Abfolge von Zuständen und erzeugen beim Erleben derselben Abfolge von Eingangsnachrichten und nicht-deterministischen Auswahlen denselben Ausgang.

In der Praxis können die fehlertoleranten Dienste, die durch die Schicht 23 in Fig. 2 bereitgestellt werden und hiernach beschrieben werden sollen, entweder durch eine separate Software-Schicht diskreten Wiederholungsanwendungsprozessen bereitgestellt werden, wie veranschaulicht ist, (wobei der Begriff "Prozeß" hier im speziellen Sinn einer ausführenden Instanz eines Programms verwendet wird) oder als fester Bestandteil jedes Wiederholungsprozesses (beispielsweise durch Einschluß als verknüpfte Bibliotheken) bereitgestellt werden. Die Veranschaulichung in Fig. 2 der Bereitstellung der fehlertoleranten Dienste durch eine separate Software-Schicht wurde lediglich zum Zwecke der Deutlichkeit der Erklärung ausgewählt, und Fachleute werden erkennen, daß die folgende Beschreibung allgemein gleichermaßen auf beide Implementierungen anwendbar ist. Es versteht sich auch, daß der Begriff "Prozeß", wie er auf die Prozesse 24 angewendet wird, in einem allgemeinen Sinn des Ausführens eines Codes, der eine bestimmte Funktionalität liefert, gelesen werden soll, und nicht auf eine formellere Weise gelesen werden soll, die so ausgelegt werden könnte, daß sie die beabsichtigte Möglichkeit, daß der Fehlertolerante-Dienste-Code ein Teil derselben ausführenden Programminstanz ist wie der Anwendungsprozeßcode, ausschließt.

Die FT-Dienste-Schicht 23 liefert dem entsprechenden Anwendungsprozeß 24 eine Anzahl von Diensten, obwohl eine unterschiedliche Mischung dieser Dienste je nach der primären/sekundären Wesensart der betreffenden Verarbeitungseinheit verwendet wird. Da alle FT-Dienste in jeder Verarbeitungseinheit I, II verfügbar sind, ist es möglich, daß die Rolle des entsprechenden Prozesses 24 geändert wird.

Die FT-Dienste-Schicht 23 liefert eine Funktionalität, die der Deutlichkeit halber in Fig. 2 durch fünf Hauptfunktionsblöcke dargestellt wird, nämlich einen Eingangsblock 25, einen Ausgangsblock 26, einen Block 27 einer nicht- deterministischen Auswahl (NDC-Block, NDC = nondeterministic choice), einen Protokollblock 28 und einen Ersatzbetrieb- und Neusende-Steuerblock 29. Die Funktionen dieser Blöcke 25 bis 29 hängen davon ab, ob der unterstützte Prozeß 24 als der primäre oder der sekundäre Prozeß dient, wie aus der folgenden Beschreibung des Betriebs der Wiederherstellungseinheit der Fig. 2 hervorgeht. Bei dieser Beschreibung gibt das Attribut "primär" oder "sekundär", das auf ein beliebiges bzw. beliebige der Elemente 23 bis 29 angewandt wird, an, zu welcher der primären und der sekundären Einheit I, II das Element gehört.

Ausfallfreier Betrieb - Ausführungsbeispiel einer "späten Protokollierung"

Unter Bezugnahme auf das Flußdiagramm der Fig. 3 wird nun der Betrieb eines Ausführungsbeispiels einer "späten Protokollierung" der Wiederherstellungseinheit der Fig. 2 beschrieben; die Anwendbarkeit des Namens "späte Protokollierung" für dieses Ausführungsbeispiel wird unten ersichtlich.

Wenn eine Eingangsnachricht an die Wiederherstellungseinheit übermittelt wird, wird sie an die primäre Verarbeitungseinheit I gesandt. Der primäre Eingabeblock 25 reiht die Eingangsnachricht in eine Eingangswarteschlange 30 ein; das Ordnen von Nachrichten nach ihrer Reihenfolge in der Warteschlange 30 entspricht allgemein ihrer Empfangsreihenfolge, es ist jedoch auch möglich, bestimmten Nachrichten (beispielsweise Nachrichten eines bestimmten Typs oder Nachrichten, die von einer bestimmten Quelle kommen) den Vorzug zu geben. Wenn der primäre Prozeß 24 bereit ist, die nächste Eingangsnachricht zu verarbeiten, nimmt er die Nachricht, die am Kopf der Warteschlange 30 erscheint (Schritt 50, Fig. 3).

Anschließend führt der primäre Prozeß 24 die Verarbeitung entsprechend der betreffenden Eingangsnachricht aus (Schritt 51). Dort, wo dieses Verarbeiten ein Treffen einer nicht-deterministischen Auswahl beinhaltet, bittet der primäre Prozeß den NDC-Block 27 um einen entsprechenden Auswahlwert und liefert dem Block 26 die zu verwendende Auswahlfunktion (oder einen Hinweis darauf) und alle Eingangsparameter, die nötig sind, um die Auswahl zu treffen. Der Grund dafür, daß der NDC-Block 27 beteiligt wird, besteht darin, daß in der primären und sekundären Einheit I und II nicht-deterministische Auswahlen unterschiedlich abgeleitet werden, und dadurch, daß diese unterschiedlichen Verhaltensweisen in dem NDC-Block enthalten sind, kann der Anwendungsprozeß 24 identisch funktionieren, ob er nun ein Teil der primären oder der sekundären Verarbeitungseinheit ist. Bei der primären Einheit I bewirkt der NDC-Block 27, daß die relevante Auswahlfunktion ausgeführt wird, und gibt den sich ergebenden nicht-deterministischen Auswahlwert an den Prozeß 24 zurück (Schritt 52). Der Auswahlwert wird ebenfalls in einem NDC-Protokoll 31, das durch den Block 27 unterhalten wird, protokolliert.

Jegliche Anwendungsausgangsnachrichten, die durch den primären Prozeß als Folge dessen, daß er die Eingangsnachrichten verarbeitet, erzeugt werden, werden in Neusende- Warteschlangen 32 gespeichert, die durch den Ausgangsblock 26 unterhalten werden (Schritt 53); diese Anwendungsausgangsnachrichten werden jedoch nicht aus der Wiederherstellungseinheit während ihres normalen Betriebs ausgegeben. Der Ausgangsblock 26 unterhält eine jeweilige Neusende- Warteschlange 32 für jede andere Wiederherstellungseinheit in dem System, wobei die Anwendungsausgangsnachrichten in der entsprechenden dieser Warteschlangen 32 gespeichert werden.

Wenn der primäre Prozeß 24 das Verarbeiten einer bestimmten Eingangsnachricht beendet hat, informiert er den Protokollblock 28, der anschließend diese Eingangsnachricht zusammen mit etwaigen nicht-deterministischen Auswahlen, die durch den primären Prozeß beim Verarbeiten der Eingangsnachricht getroffen werden (wobei derartige Auswahlen in dem Protokoll 31 gehalten werden), bei der Einheit II protokolliert - siehe Schritt 54.

Der Ausgang des primären Protokollblocks 28 wird durch den sekundären Protokollblock 28 empfangen (Schritt 55), und letzterer leitet die empfangene Eingangsnachricht an den sekundären Eingangsblock 25 weiter, wo sie in der Warteschlange 30 gespeichert wird. Falls mit der Eingangsnachricht eine nicht-deterministische Auswahl weitergeleitet wurde, leitet der sekundäre Protokollblock 28 diese Auswahl an den sekundären NDC-Block 27 weiter, wo sie in dem NDC- Protokoll 31 gespeichert wird.

Der Eingangsblock 25 der sekundären Verarbeitungseinheit II empfängt somit lediglich diejenigen Eingangsnachrichten, die bereits durch den primären Prozeß verarbeitet wurden, wobei die Empfangsreihenfolge dieser Nachrichten der Reihenfolge ihrer Verarbeitung durch den primären Prozeß entspricht (wobei das Betriebssystem und die Kommunikationsschicht 22 eine in der richtigen Reihenfolge erfolgende Lieferung gewährleisten).

Der sekundäre Prozeß 24 verarbeitet die Eingangsnachrichten in der Reihenfolge, in der sie in die Eingangswarteschlange 30 der Einheit II plaziert werden (Schritt 56). Falls während dieser Verarbeitung eine nicht-deterministische Auswahl benötigt wird, tut der sekundäre Prozeß 24 genau dasselbe wie sein primäres Gegenstück, er bittet nämlich den sekundären NDC-Block 27 um einen entsprechenden Auswahlwert und liefert dem Block 26 die zu verwendende Auswahlfunktion (oder einen Hinweis auf dieselbe) und etwaige Eingabeparameter, die nötig sind, um die Auswahl zu treffen. Statt zu bewirken, daß die Auswahlfunktion ausgeführt wird, gibt der sekundäre NDC-Block 27 jedoch lediglich die nicht- deterministische Auswahl, die ihm von dem primären Prozeß zusammen mit der Eingangsnachricht, die derzeit durch den sekundären Prozeß 24 verarbeitet wird, geliefert wurde, an den sekundären Prozeß zurück (Schritt 57). Auf diese Weise wird der sekundäre Prozeß derselben Abfolge von nicht- deterministischen Ereignissen (Eingangsnachrichten und internen Auswahlen) wie der primäre Prozeß unterworfen und hält somit dieselbe Abfolge von internen Zuständen ein wie der primäre Prozeß.

Jegliche durch den sekundären Prozeß 24 erzeugten Anwendungsausgangsnachrichten werden an den Ausgangsblock 26 der Einheit II ausgegeben, wo sie in Neusende-Warteschlangen 32 protokolliert werden (Schritt 58), wie schon die durch den primären Prozeß erzeugten Anwendungsausgangsnachrichten. Ferner werden die durch den sekundären Prozeß erzeugten Anwendungsausgangsnachrichten jedoch als die Ausgangsnachrichten der Wiederherstellungseinheit aus der Verarbeitungseinheit II ausgegeben (Schritt 59). Ausgangsnachrichten können nicht immer von der Wiederherstellungseinheit ausgegeben werden, sobald sie erzeugt werden, beispielsweise kann das Kommunikationsnetz überlastet sein, oder die entfernte empfangende Einheit ist eventuell nicht in der Lage, die Nachricht entgegenzunehmen. Die Ausgangsnachrichten werden somit in die entsprechenden Neusende- Warteschlange 32 eingereiht. Die Neusende-Warteschlangen weisen zwei Teile auf, einen Teil der nicht-versandten Nachrichten und einen Teil der versandten Nachrichten, wie nachstehend in bezug auf die Flußsteuerung näher beschrieben wird.

Indem eingerichtet wird, daß der Anwendungsprozeß 24, der durch die sekundäre Einheit II betrieben wird, für die Erzeugung der Wiederherstellungseinheit-Ausgangsnachrichten verantwortlich ist, wird sichergestellt, daß sich die Welt, die sich außerhalb der Wiederherstellungseinheit befindet, lediglich der Konsequenzen von Zuständen des Prozesses 24 bewußt sein kann, in die der sekundäre Prozeß bereits eingetreten ist. Sollte die primäre Verarbeitungseinheit I ausfallen, kann die sekundäre Verarbeitungseinheit II zu der primären Verarbeitungseinheit befördert werden, ohne ein Risiko, daß etwaige verlorene Zustände vorliegen, das heißt extern sichtbare Zustände, die durch die primäre, jedoch nicht durch die sekundäre Einheit erzielt wurden. Selbstverständlich kann der primäre Prozeß zum Zeitpunkt des Ausfalls der primären Einheit I Zustände erreicht haben, die durch den sekundären Prozeß nicht erreicht wurden, dies tut jedoch nichts zur Sache, da die externe Welt lediglich von dem Ergebnis der Verarbeitung durch den sekundären Prozeß in Kenntnis gesetzt wird (es ist ferner anzumerken, daß manche der zum Zeitpunkt des Ausfalls durch den primären, jedoch nicht durch den sekundären Prozeß erreichten Zustände anschließend durch den sekundären Prozeß erreicht werden, wenn er Eingangsnachrichten verarbeitet, die durch die primäre Einheit vor ihrem Ausfall protokolliert wurden).

Der dem vorliegenden Ausführungsbeispiel verliehene Name "späte Protokollierung" stammt von der Tatsache, daß jede Eingangsnachricht von der primären Einheit I erst dann bei der sekundären Einheit II protokolliert wird, nachdem der primäre Prozeß die Eingangsnachricht verarbeitet hat. Eine Charakteristik des Ausführungsbeispiels der späten Protokollierung besteht darin, daß die sekundäre Einheit inhärent niemals in Zustände eintreten kann, in die nicht bereits durch die primäre Einheit eingetreten wurde, einfach weil die Eingangsnachrichten erst nach einem Verarbeiten durch die primäre Einheit bei der sekundären Einheit protokolliert werden. Andererseits kann die primäre Einheit zu einem Verarbeiten ihrer Eingangsnachrichten übergehen, ohne darauf zu warten, daß die sekundäre Einheit eine bestimmte Verarbeitungsstufe erreicht.

Ausfallfreier Betrieb - Ausführungsbeispiel einer "frühen Protokollierung"

Bei einer alternativen Anordnung, die hierin als "frühe Protokollierung" bezeichnet wird, werden die Eingangsnachrichten, die durch die primäre Verarbeitungseinheit I empfangen werden, bei der sekundären Verarbeitungseinheit II protokolliert, ohne darauf zu warten, daß der primäre Prozeß 24 die Nachrichten verarbeitet, während die Schlüsselcharakteristik, bei der die Wiederherstellungseinheit- Ausgangsnachrichten durch den sekundären Prozeß erzeugt werden, beibehalten wird.

Bei dem Ausführungsbeispiel der frühen Protokollierung muß der sekundäre Prozeß beim Verarbeiten von Eingangsnachrichten selbstverständlich einen Empfang von etwaigen benötigten nicht-deterministischen Auswahlen von der primären Einheit abwarten. Diese Auswahlen werden bei der sekundären Verarbeitungseinheit protokolliert, sobald sie durch den primären Prozeß erzeugt werden, wobei diese Protokollierung auf eine solche Weise bewerkstelligt wird, um die sekundäre Verarbeitungseinheit zu befähigen, die empfangenen Auswahlen auf die zuvor empfangenen Eingangsnachrichten zu beziehen. Man wird erkennen, daß es sein kann, daß der sekundäre Prozeß 24 ein Verarbeiten einer Eingangsnachricht im Fall eines ausstehenden Empfangs einer benötigten nicht- deterministischen Auswahl von der primären Verarbeitungseinheit aufschieben muß.

Bei dem Ausführungsbeispiel der frühen Protokollierung ist es möglich, daß der sekundäre Prozeß in Zustände eintritt, die durch den primären Prozeß noch nicht erreicht wurden (insbesondere dort, wo das Verarbeiten einer Eingangsnachricht keine nicht-deterministischen Auswahlen erfordert). Dies tut jedoch nichts zur Sache, da diese Zustände Zustände sind, die der primäre Prozeß beim Verarbeiten der Eingangsnachrichten, die er bereits empfangen hat, zur gegebenen Zeit erreichen wird. Auch wenn der sekundäre Prozeß ausfallen sollte, wenn er dem primären Prozeß voraus ist und eine Wiederherstellungseinheit-Ausgangsnachricht erzeugt hat, die noch keine Übereinstimmung mit einer jüngsten Anwendungsausgangsnachricht von dem primären Prozeß aufweist, ergibt sich somit keine Uneinheitlichkeit mit der externen Welt, da der primäre Prozeß zu gegebener Zeit dieselben Zustände wie diejenigen durchläuft, die der sekundäre Prozeß vor seinem Ausfall erreichte.

Ausfallfreier Betrieb - Ausführungsbeispiel einer "unabhängigen Eingabe"

Es ist auch eine weitere Variante möglich, die hierin als das Ausführungsbeispiel der "unabhängigen Eingabe" bezeichnet wird, bei der wiederum die Schlüsselcharakteristik der Erzeugung der Wiederherstellungseinheit-Ausgangsnachricht durch die sekundäre Einheit beibehalten wird, bei der jedoch die Eingangsnachrichten nun durch die ursprünglichen Nachrichtenquellen sowohl an die primäre als auch die sekundäre Verarbeitungseinheit unabhängig voneinander gesendet werden. In diesem Fall muß der sekundäre Eingabeblock 25 auf eine Bestätigung von dem primären Protokollblock 28 warten, daß der primäre Eingabeblock 25 eine bestimmte Eingangsnachricht empfangen hat, bevor dieselbe in die Eingangswarteschlange 30 der Einheit II zur Verarbeitung durch den sekundären Prozeß 24 eingereiht wird. Bei dieser Einschränkung wird das Ausführungsbeispiel der unabhängigen Eingabe wie das Ausführungsbeispiel der frühen Protokollierung, und somit kann es sein, daß der sekundäre Prozeß 24 bei dem Ausführungsbeispiel der unabhängigen Eingabe wie auch bei dem zuvor erwähnten Ausführungsbeispiel sein Verarbeiten einer bestimmten Eingangsnachricht aufschieben muß, bis er eine benötigte nicht-deterministische Auswahl von dem primären Prozeß empfangen hat.

Bestätigungen

Wenn wir uns nun einer Betrachtung des Ausführungsbeispiels des späten Protokollierens der Wiederherstellungseinheit der Fig. 2 zuwenden, so sendet die Wiederherstellungseinheit im Zuge ihres normalen Betriebs Bestätigungen ('acksout' - ausgehende Bestätigungen), von Eingangsnachrichten, die sie empfangen hat, aus und empfängt von anderen Wiederherstellungseinheiten Bestätigungen ('acks-in' - eingehende Bestätigungen) des Empfangs von Wiederherstellungseinheit- Ausgangsnachrichten, die durch die sekundäre Einheit II gesendet wurden.

Die acks-out werden allgemein "im Huckepackverfahren" auf Ausgangsnachrichten, die durch den sekundären Ausgangsblock 26 an die Wiederherstellungseinheit, die die Eingangsnachricht, die gerade bestätigt wird, sandte, gesendet werden, aufgeladen. Um die Möglichkeit einer längeren Abwesenheit einer Ausgangsnachricht an diese Wiederherstellungseinheit abzudecken, ist es jedoch vorzuziehen, auch einen alternativen Übermittlungsmechanismus zu implementieren, beispielsweise einen Zeitablaufmechanismus, durch den eine ack-out beispielsweise nach einem vorbestimmten Zeitraum von selbst gesendet wird, falls in diesem Zeitraum keine Ausgangsnachricht an die erforderliche Wiederherstellungseinheit erzeugt wird.

Was acks-in betrifft, so können diese ebenfalls "im Huckepackverfahrenw auf einer Eingangsnachricht oder als separat gesandte Bestätigungen empfangen werden. In jedem Fall werden acks-in nach einem Empfang bei der primären Verarbeitungseinheit I an die sekundäre Verarbeitungseinheit II weitergeleitet. Bei beiden Einheiten werden die acks-in verwendet, um an den Neusende-Warteschlangen 32, die durch den entsprechenden Ausgangsblock 26 gehalten werden, eine Abfallsammeloperation durchzuführen, wobei es nicht mehr nötig ist, eine Kopie einer Ausgangsnachricht, die als empfangen bestätigt wurde, zu behalten (eine solche Bestätigung wird erst gesendet worden sein, nachdem die betreffende Nachricht sowohl bei der primären als auch der sekundären Verarbeitungseinheit der betreffenden Wiederherstellungseinheit empfangen wurde).

Das Senden und der Empfang von Bestätigungen ist für die Ausführungsbeispiele des frühen Protokollierens und der unabhängigen Eingabe im wesentlichen dasselbe, obwohl bei letzterem eine ack-out erst dann durch die sekundäre Verarbeitungseinheit II bezüglich einer bestimmten Eingangsnachricht gesendet wird, wenn die primäre Verarbeitungseinheit I die sekundäre Verarbeitungseinheit II informiert hat, daß sie ebenfalls die Eingangsnachricht empfangen hat.

Flußsteuerung

Bestätigungen werden in Verbindung mit einer Einschränkung der Länge der Neusende-Warteschlangen 32 verwendet, um eine Steuerung des Flusses von Nachrichten zwischen Wiederherstellungseinheiten zu erzielen. Dies ist beispielsweise dann nötig, wenn eine erste Wiederherstellungseinheit an eine zweite Wiederherstellungseinheit Nachrichten bei einer Geschwindigkeit sendet, bei der die zweite Wiederherstellungseinheit nicht in der Lage ist, diese zu verarbeiten.

Eine Flußsteuerung wird dadurch erzielt, indem folgendes gefordert wird:

1) die Gesamtlänge (einschließlich nicht-versandter Nachrichten) der Neusende-Warteschlange 32 einer sekundären Einheit II ist gleich der Länge der Eingangswarteschlange 30 der entsprechenden primären Einheit I der Wiederherstellungseinheit, die diese Nachrichten empfängt, und

2) acks-out werden nur dann gesendet, wenn eine Nachricht aus der Eingangswarteschlange 30 einer sekundären Einheit I entnommen wird und gerade dabei ist, durch die Anwendung 24 verarbeitet zu werden.

Unter Bezugnahme auf Fig. 7 weist die Neusende- Warteschlange 32 einer sekundären Einheit I zwei Teile auf. Ein Nicht-Versandte-Nachrichten-Teil 70, der Nachrichten hält, die darauf warten, versendet zu werden, ist von einem Versandte-Nachrichten-Teil 71, der Nachrichten hält, die bereits gesendet wurden, durch eine Markierung 72 getrennt. Nachrichten, die von der Anwendung 24 ausgegeben werden, treten bei 73 in das hintere Ende der Warteschlange ein und werden gesendet, nachdem sie eine Position 74, die zu der Markierung 72 benachbart ist, erreicht haben. Nachdem eine Nachricht gesendet worden ist, wird die Markierung 72 zu der anderen Seite der Nachricht bewegt, so daß sich die Nachricht dann in dem Versandte-Nachrichten-Teil 71 der Neusende-Warteschlange 32 befindet. Falls die Neusende- Warteschlange voll ist, wird die Anwendung 24 gestoppt, so daß keine weiteren Nachrichten an die Warteschlange gesandt werden. Die an der primären Einheit I betriebene wiederholte Anwendung 24 wird natürlich auch gestoppt. Nachdem Bestätigungen empfangen und Nachrichten in dem Versandte- Nachrichten-Teil 71 der Neusende-Warteschlangen 32 gelöscht wurden, können die Anwendungen 24 erneut gestartet werden.

Die Länge der Neusende-Warteschlangen 32 sowohl der primären als auch der sekundären Einheit ist so festgelegt, daß sie dieselbe Länge wie die Eingangswarteschlangen 30 sowohl der primären als auch der sekundären Einheit der entfernten Wiederherstellungseinheit aufweist, an die die Neusende- Warteschlange Nachrichten sendet, wie in Fig. 7 gezeigt ist. Die für diese Warteschlangen eingestellte Länge wird zwischen den beiden Wiederherstellungseinheiten ausgehandelt, wenn sie anfänglich konfiguriert werden. Wie oben beschrieben wurde, werden dann Bestätigungen von der Nachrichten empfangenden Wiederherstellungseinheit an die primäre Einheit I der Nachrichten sendenden Wiederherstellungseinheit gesandt. Jedoch wird eine Bestätigung nicht gesandt, wenn eine Nachricht zu dem hinteren Ende 75 einer Eingangswarteschlange 30 stößt, sondern wird erst gesandt, wenn diese von dem vorderen Ende 76 der Eingangswarteschlange 30 weggenommen wird. Wenn die sendende Wiederherstellungseinheit die Bestätigung empfängt, wird die entsprechende Nachricht von dem Versandte-Nachrichten-Teil 71 der Neusende-Warteschlange 30 der sekundären Einheit gelöscht. Dieser Flußsteuerungsprozeß gewährleistet somit, daß, wenn eine Eingangswarteschlange einer empfangenden Wiederherstellungseinheit voll ist, diese keine weiteren Nachrichten von einer sendenden Wiederherstellungseinheit empfängt.

Man sollte beachten, daß der Flußsteuerungsprozeß insofern sehr effizient ist, als er keine weiteren Steuernachrichten erfordert, sondern die Bestätigungen verwendet, die sowieso erforderlich sind, um Nachrichten aus den Neusende- Warteschlangen zu eliminieren. Da Bestätigungen von der primären Einheit I bei der sekundären Einheit II protokolliert werden (um Nachrichten aus beiden Neusende- Warteschlangen zu eliminieren), werden die verwendeten Flußsteuerungsangaben auch sowohl an der primären als auch an der sekundären Einheit automatisch repliziert bzw. wiederholt. Man wird einsehen, daß die Neusende-Warteschlange 32 einer primären Einheit I, obwohl sie wie oben beschrieben in zwei Teilen konfiguriert ist, normalerweise lediglich Nachrichten in dem Nicht-Versandte-Nachrichten-Teil 70 enthält.

Ausfallverhalten

Nachdem der Betrieb der Wiederherstellungseinheit in der Abwesenheit von Ausfällen beschrieben wurde, wird nun das Ansprechen der Wiederherstellungseinheit sowohl auf einen Ausfall entweder ihrer eigenen primären oder sekundären Verarbeitungseinheit oder auf einen Ausfall einer Verarbeitungseinheit einer anderen Wiederherstellungseinheit betrachtet.

Falls die sekundäre Verarbeitungseinheit II der Wiederherstellungseinheit der Fig. 2 ausfallen sollte, aus welchem Grund auch immer, so wird der Ersatzbetrieb- und Neusende- Steuerblock 29 der Einheit I ausgelöst, um entsprechende Schritte zu unternehmen. Die Erfassung eines Ausfalls der sekundären Einheit kann auf bekannte Weise bewerkstelligt werden, beispielsweise durch eine Systemeinheit, die einen "Herzschlag" bzw. "Puls" von jedem primären und sekundären Prozeß überwacht; wie eine Ausfallerfassung erreicht wird, ist für die vorliegende Erfindung nicht wesentlich und wird deshalb nicht näher beschrieben. Man wird einsehen, daß ein Ausfall einer Verarbeitungseinheit I, II die Folge eines innerhalb des Anwendungsprozesses 24 stattfindenden Ausfalls, eines Ausfalls der unterstützenden Software- Schichten 22 und 23 oder eines Ausfalls des Prozessors 20 der Einheit sein kann; in allen Fällen hört die Verarbeitungseinheit 24 auf, der Wiederherstellungseinheit die Funktionalität des Prozesses 24 zu liefern.

Der Ersatzbetriebsteuerblock 29 der Einheit I spricht auf einen Ausfall der sekundären Einheit II an, indem er die Abfolge von Aktionen, die auf der rechten Seite der Fig. 4 gezeigt ist, herbeiführt, Insbesondere werden die durch den primären Prozeß erzeugten Anwendungsausgangsnachrichten nun als die Ausgangsnachrichten der Wiederherstellungseinheit verwendet (Block 40, Fig. 4), indem es so eingerichtet wird, daß der Ausgangsblock 26 der Einheit I die Anwendungsnachrichten, die er von dem primären Prozeß empfängt, ausgibt (diese Ausgabe ist in Fig. 2 gestrichelt gezeigt, ebenso wie alle ausfallbezogenen Kommunikationen in dieser Figur). Wenn die primäre Einheit I zu einem Sender gemacht wird, weiß sie nicht genau, welche Ausgangsnachrichten die sekundäre Verarbeitungseinheit II vor ihrem Ausfall gesandt hat. Es sind zwei alternative Anordnungen möglich, zunächst kann der primäre Ausgangsblock 26 alle nicht-bestätigten Ausgangsnachrichten in seinen Neusende-Warteschlangen 32 neu senden. Dies kann dazu führen, daß eine Nachricht zweimal gesendet wird (einmal von der sekundären Einheit II und erneut von der primären Einheit I); durch ein Numerieren der Ausgangsnachrichten, die an eine bestimmte Wiederherstellungseinheit gesandt wird, in einer fortschreitenden Reihenfolge (eine Sequenz pro Zielwiederherstellungseinheit) kann jede empfangende Wiederherstellungseinheit doppelte Nachrichten jedoch identifizieren und verwerfen. In der Tat ist es lediglich notwendig, die erste Ausgangsnachricht, die von einer gegebenen Verarbeitungseinheit an eine bestimmte Wiederherstellungseinheit gesandt wird, explizit zu numerieren, da die Betriebssystem- und Kommunikationsschicht 22 eine Garantie einer nicht wiederholten Lieferung von Nachrichten in der richtigen Reihenfolge bereitstellt, wodurch ermöglicht wird, daß die Abfolgenummer nachfolgender Nachrichten von derselben Wiederherstellungseinheit impliziert wird. Statt alle nicht-bestätigten Ausgangsnachrichten erneut zu senden, kann alternativ dazu die primäre Einheit I, die die Verantwortung übernimmt, die primären Einheiten der entfernten Wiederherstellungseinheiten, an die Nachrichten gesandt wurden, abfragen und lediglich diejenigen Nachrichten, die nicht empfangen wurden, erneut senden. Die Anzahl solcher Nachrichten wird geringer sein als die Anzahl von nicht-bestätigten Nachrichten in ihren Neusende-Warteschlangen, da Nachrichten erst dann durch entfernte Wiederherstellungseinheiten bestätigt werden, nachdem sie an die sekundären Einheiten dieser Wiederherstellungseinheiten weitergeleitet wurden.

Man wird einsehen, daß, um eine Ausgangsnachricht (und somit selbstverständlich eine Eingangsnachricht, da die Ausgangsnachrichten einer Wiederherstellungseinheit allgemein die Eingangsnachrichten einer anderen bilden) eindeutig zu identifizieren, es notwendig ist, sowohl die Abfolgenummer der Nachricht als auch die Identität der betreffenden Abfolge, wie sie beispielsweise durch die Quelle- /Zielkombination identifiziert wurde, zu kennen - diese letzteren Informationen sind selbstverständlich allgemein als Teil der betreffenden Nachricht erhältlich. Bei der vorliegenden Spezifikation sollte die Bezugnahme auf eine Abfolgenummer einer Nachricht als eine Bezugnahme auf diese Abfolgenummer im Kontext der betreffenden Abfolge verstanden werden.

Auf einen Ausfall der sekundären Einheit II hin wird die primäre Einheit I sowohl für das Senden von Wiederherstellungseinheit-Ausgangsnachrichten als auch für das Senden von acks-out verantwortlich.

Als nächstes wird ein neuer sekundärer Prozeß an einer funktionstüchtigen Verarbeitungseinheit beigebracht (Block 41); Fachleute kennen die Einzelheiten, wie dies erzielt werden kann, und dementsprechend wird dieser Schritt hierin nicht näher beschrieben. Der Zustand des primären Prozesses 24 wird anschließend an den neuen sekundären Prozeß transferiert, um die beiden zu synchronisieren. Wie dieser Zustandstransfer im einzelnen erfolgt, liegt in der Verantwortung des primären Anwendungsprozesses 24, da allein dieser Prozeß weiß, welche Zustandsinformationen benötigt werden; der alternative Ansatz, eine Speicherbildkopie zu erstellen, wird nicht bevorzugt, da dies zu einer Ausbreitung von nicht-eingesammeltem Abfall und ähnlichen nicht- nützlichen Speicherinhalten führt).

Schließlich wird die Verantwortung für ein Senden von Wiederherstellungseinheit-Ausgangsnachrichten von der primären Verarbeitungseinheit I an die neue sekundäre Verarbeitungseinheit übergeben (Block 42), und die primäre Einheit I beginnt, bei der neuen sekundären Einheit zu protokollieren.

Wenn wir als nächstes betrachten, was auf den Ausfall der primären Verarbeitungseinheit I hin geschieht, so wird dieser Ausfall wiederum durch einen beliebigen geeigneten Mechanismus erfaßt, und diesmal wird der Ersatzbetrieb- und -Neusende-Steuerblock 29 der sekundären Verarbeitungseinheit II zum Handeln gebracht. Wie auf der linken Seite der Fig. 4 veranschaulicht ist, bewirkt der Ersatzbetriebsteuerblock 29 auf einen Ausfall der primären Einheit hin, daß die sekundäre Einheit II die Rolle der ausgefallenen primären Einheit I übernimmt, wobei der Prozeß 24 der Einheit II nun diejenigen durch die FT-Schicht 23 angebotenen Dienste nutzt, die für diese Rolle der primären Einheit geeignet sind (Block 44), was ein Bewirken umfaßt, daß für den Prozeß 24 je nach Bedarf nicht-deterministische Auswahlen getroffen werden. Unterdessen werden die anderen Wiederherstellungseinheiten benachrichtigt worden sein, Nachrichten an die Einheit II statt an die Einheit I zu senden. Der Ausgangsblock 26 der neu beförderten primären Einheit II bleibt vorübergehend für ein Senden von Ausgangsnachrichten und acks-out verantwortlich, muß jedoch keine Ausgangsnachrichten erneut senden.

Da es sein kann, daß die ausgefallene primäre Verarbeitungseinheit I Eingangsnachrichten empfangen hat, die nicht bei der Verarbeitungseinheit II protokolliert sind, werden die anderen Wiederherstellungseinheiten alle aufgefordert, alle etwaigen nicht-bestätigten Nachrichten, die sie in ihren Neusende-Warteschlangen für die Wiederherstellungseinheit, die den primären Ausfall erlebte, aufweisen, erneut zu senden (Block 45). Die Anforderung, daß Nachrichten neu gesendet werden, wird durch die neu beförderte primäre Verarbeitungseinheit II selbst erzeugt. Aufgrund des Schemas der sequentiellen Nachrichtennumerierung, das bereits oben erwähnt wurde, kann der Eingangsblock 25 der Einheit II, falls eine bereits durch die Einheit II empfangene Nachricht erneut gesendet werden sollte (beispielsweise weil die entsprechende ack-out noch nicht durch die Einheit II übermittelt worden ist), solche Duplikate erfassen und verwerfen.

Als nächstes wird eine neue sekundäre Verarbeitungseinheit beigebracht, und der Zustand des Prozesses 24 der neu beförderten primären Einheit II wird an die neue sekundäre Einheit transferiert (Block 46). Schließlich wird die Verantwortung für das Senden von Ausgangsnachrichten und acksout an die neue sekundäre Verarbeitungseinheit transferiert (Block 47), und die primäre Einheit II beginnt, bei der neuen sekundären Einheit zu protokollieren.

Wenn ein neu erzeugter sekundärer Prozeß beigebracht wird, werden seine Neusende-Warteschlangen leer sein, wenn nicht die Neusende-Warteschlangen 32 von dem primären Ausgangsblock 26 zu dem sekundären Ausgangsblock 26 transferiert (prüfpunktmäßiges Ablegen) werden. Es können drei alternative Methoden verwendet werden, um diese Neusende- Warteschlangen beizubringen und gleichzeitig Ausgangsnachrichten von der Wiederherstellungseinheit zu senden.

Eine erste Methode besteht darin, Ausgangsnachrichten sowohl von dem primären als auch dem sekundären Ausgangsblock zu senden, bis der primäre Ausgangsblock keine nicht- bestätigten Ausgangsnachrichten, die zum Zeitpunkt der Übergabe der Verantwortung an die sekundäre Einheit vorlagen, mehr enthält. Der Steuerblock 29, der dem primären Prozeß zugeordnet ist, kann diese diesen Umstand erfassen, indem er den entsprechenden Ausgangsblock jegliche Nachrichten, die er zum Zeitpunkt der Übergabe der Verantwortung in seinen Neusende-Warteschlangen aufweist, markieren läßt; falls eine Neusendeanforderung empfangen wird, ist es dann für den Steuerblock 29 eine einfache Sache, zu prüfen, ob noch etwaige derartige markierte Nachrichten existieren. Falls derartige Nachrichten vorliegen, so sendet der primäre Ausgangsblock 26 diese Nachrichten erneut, und der sekundäre Ausgangsblock 26 sendet die Nachrichten erneut in seinen eigenen Neusende-Warteschlangen. Diese Methode erfordert, daß der durch die Schicht 23 für die Unterstützung eines Ersatzbetriebs einer unterschiedlichen Wiederherstellungseinheit bereitgestellte FT-Dienst die Fähigkeit hat, Nachrichten von zwei unterschiedlichen Ressourcen innerhalb derselben Wiederherstellungseinheit zu empfangen.

Eine zweite alternative Methode, die ähnlich der ersten Methode ist, weist ein Verzögern des Transfers der Verantwortung von der primären Einheit zu der sekundären Einheit auf, bis die Neusende-Warteschlangen 32 der sekundären Einheit eingerichtet sind. Die primäre Einheit fährt fort, Ausgangsnachrichten zu senden, es werden jedoch keine Ausgangsnachrichten durch die sekundäre Einheit gesandt, bis ihre Neusende-Warteschlangen alle durch die Wiederherstellungseinheit gesandten Nachrichten, die nicht-bestätigt bleiben, enthalten. Zu diesem Zeitpunkt hört die primäre Einheit auf, Ausgangsnachrichten zu senden, und die sekundäre Einheit beginnt, Ausgangsnachrichten zu senden. Es gibt somit keinen Zeitpunkt, zu dem Ausgangsnachrichten durch beide Einheiten gesendet werden. Falls die primäre Einheit ausfällt, bevor die sekundäre Einheit beginnt, Nachrichten zu senden, fällt die Wiederherstellungseinheit komplett aus. Wenn diese Methode verwendet wird, müssen Bestätigungen, die durch die primäre Einheit ausgesandt werden, verzögert werden, bis die sekundäre Einheit die Nachricht, auf die sich die Bestätigung bezieht, gehandhabt hat, um zu verhindern, daß die sekundäre Einheit mit mehr Nachrichten von der primären Einheit bombardiert wird als sie verarbeiten kann. Dies wird dadurch erreicht, daß von der sekundären Einheit während des Zeitraums, während dessen sie ihre Neusende-Warteschlange aufbaut, und bevor sie eine Verantwortung für ein Aussenden von Nachrichten übernimmt, verlangt wird, daß sie Bestätigungen an die primäre Einheit sendet. Nachdem die primäre Einheit eine solche Bestätigung von der sekundären Einheit empfangen hat, sendet sie eine Bestätigung an die entfernte Wiederherstellungseinheit aus. Wenn die sekundäre Einheit Verantwortung übernimmt, sendet sie auf übliche Weise Bestätigungen aus.

Eine dritte Methode umfaßt ein unmittelbares Übergeben von Verantwortung an die sekundäre Einheit, obwohl ihre Neusende-Warteschlangen eventuell nicht alle nicht-bestätigten Nachrichten enthalten. Die sekundäre Einheit fragt dann die primären Einheiten von entfernten Wiederherstellungseinheiten ab, welche Nachrichten sie benötigen, falls sie überhaupt welche benötigen. Benötigte Nachrichten werden von der primären Einheit angefordert und an die entsprechende entfernte Wiederherstellungseinheit weitergeleitet. Obwohl diese Methode ähnlich dem im Stand der Technik bekannten prüfpunktmäßigen Ablegen von gesamten Neusende- Warteschlangen ist, beinhaltet sie einen weitaus geringeren Mehraufwand, da lediglich diejenigen Nachrichten, die wirklich durch entfernte Wiederherstellungseinheiten benötigt werden, von der primären Einheit zu der sekundären Einheit kopiert werden.

Zusätzlich zu einem Bereitstellen von FT-Diensten zum Unterstützen eines Ersatzbetriebs der Wiederherstellungseinheit selbst auf einen Ausfall der primären oder sekundären Einheit hin liefert die FT-Dienste-Schicht 23 ferner FT- Dienste zum Unterstützen eines Ersatzbetriebs anderer Wiederherstellungseinheiten. Der wichtigste dieser Dienste ist das erneute Senden von an eine bestimmte Wiederherstellungseinheit gesandten nicht-bestätigten Ausgangsnachrichten, wenn auf einen Prozeßausfall in der letzteren hin eine Anforderung erfolgt, dies zu tun. Die Neusende- Warteschlangen 32, die bereits beschrieben wurden, bilden selbstverständlich einen festen Bestandteil dieses Dienstes. Im Normalbetrieb werden die Ausgangsnachrichten lediglich von dem sekundären Ausgangsblock 26 erneut gesandt. Falls es noch keine wirksame sekundäre Verarbeitungseinheit gibt, weil sich die Wiederherstellungseinheit, die die Neusendeanforderung empfängt, selbst gerade von einem Verarbeitungseinheitausfall erholt und ihren neu geschaffenen sekundären Prozeß noch nicht mit dem primären Prozeß synchronisiert hat, so ist der primäre Ausgangsblock 26 andererseits für das Neusenden der Ausgangsnachrichten verantwortlich.

Eine weitere Fähigkeit der FT-Schicht 23 besteht im Plazieren von Ausgangsnachrichten, die von derselben Wiederherstellungseinheit empfangen wurden, in der richtigen Reihenfolge. Während die Kommunikationsschicht 22 die in die richtige Reihenfolge gebrachte Lieferung von Nachrichten von dem Ausgangsblock, den sie bedient, gewährleistet, werden während eines Ersatzbetriebs einer Wiederherstellungseinheit Ausgangsnachrichten von zwei Quellen gesandt, wie oben erwähnt wurde. Folglich besteht die Möglichkeit, daß die an eine andere Wiederherstellungseinheit gesandten Ausgangsnachrichten nicht in der richtigen Reihenfolge ankommen; insbesondere kann bzw. können die erste oder mehr Nachrichten, die von einer neuen sekundären Verarbeitungseinheit gesendet werden, vor älteren Nachrichten ankommen, die von der primären Verarbeitungseinheit gesendet werden. Aufgrund der zuvor erwähnten sequentiellen Numerierung von Nachrichten (explizit oder implizit) ist es jedoch möglich, daß der primäre Eingangsblock 25 einer empfangenden Wiederherstellungseinheit seine Eingangsnachrichten in die richtige Reihenfolge bringt, bevor er sie in die Warteschlange 30 plaziert. Dazu kann der Eingangsblock mit einer Frühe- Nachricht-Warteschlange 33 versehen werden, die er benutzt, um Nachrichten, die sich nicht in der richtigen Abfolge befinden, bis zu einem Empfang der fehlenden Nachrichten zu speichern. Falls eine der beiden oben beschriebenen alternativen Methoden, die nicht zum Senden von Nachrichten von zwei Quellen führen, verwendet wird, ist eine Frühe- Nachricht-Warteschlange 33 nicht erforderlich.

Bezüglich des Betriebs des Ausführungsbeispiels der frühen Protokollierung und des Ausführungsbeispiels der unabhängigen Eingabe unter Ausfallbedingungen ist ihr allgemeiner Betrieb ähnlich dem des oben beschriebenen Ausführungsbeispiels der späten Protokollierung. Fachleute werden ohne weiteres in der Lage sein, solche Variationen je nach Bedarf zu identifizieren und zu implementieren.

Mehrere Sekundäre

Obwohl bei den beschriebenen Ausführungsbeispielen einer Wiederherstellungseinheit lediglich zwei Wiederholungsanwendungsprozesse betrieben werden (einer durch die primäre Verarbeitungsentität und der andere durch die sekundäre Verarbeitungsentität), ist es möglich, mehr Wiederholungsprozesse zu betreiben, um die Fehlertoleranz der Wiederherstellungseinheit zu erhöhen. Wo also n Wiederholungsanwendungsprozesse zusätzlich zu dem durch die primäre Verarbeitungsentität betriebenen Anwendungsprozeß vorliegen, werden (n-1) Wiederholungsanwendungsprozesse vorliegen, die durch jeweilige sekundäre Verarbeitungsentitäten betrieben werden, wobei eine dieser sekundären Verarbeitungsentitäten als eine Senderentität dient, die für die Ausgabe von Wiederherstellungseinheit-Ausgangsnachrichten und acks-out verantwortlich ist. Die Senderentität arbeitet auf ähnliche Weise wie die sekundäre Verarbeitungseinheit II der Fig. 2; die nicht-sendenden sekundären Entitäten arbeiten ebenfalls wie die Einheit II, mit der Ausnahme, daß ihre Ausgangsblöcke keine Wiederherstellungseinheit-Ausgangsnachrichten oder acks-out senden.

Im Falle mehrerer sekundärer Verarbeitungsentitäten sind zwei Hauptanordnungen möglich. Bei einer "verketteten" oder "Weiterleitungs"-Anordnung bewerkstelligt die primäre Entität zunächst ihre Protokollierung bei einer ersten der sekundären Entitäten, und letztere ist dann für ein Protokollieren von Operationen bei der nächsten sekundären Entität verantwortlich, und so weiter, je nach Bedarf, wobei dies für die Anzahl von vorhandenen sekundären Entitäten fortgesetzt wird; bei dieser Anordnung stellt die letzte sekundäre Entität in der Protokollierungskette die Senderentität dar. Diese verkettete Anordnung erhöht die Fehlertoleranz der Wiederherstellungseinheit beträchtlich, da die Wiederherstellungseinheit, wenn n Entitäten vorhanden sind, auch dann funktionstüchtig bleiben kann, wenn bis zu n-1 Entitäten ausfallen.

Bei der zweiten Anordnung sind die sekundären Entitäten in einer "Auffächerungs"- oder "Eines-An-Viele"-Konfiguration bezüglich der primären Entität angeordnet, wobei letztere ihre Protokollierungsnachrichten effektiv parallel an alle sekundären Entitäten sendet; in diesem Fall kann eine beliebige der sekundären Entitäten ausgewählt werden, um als die Senderentität zu dienen. Zu den Vorteilen der Auffächerungsanordnung zählt, daß die Wiederherstellung nach einem Ausfall sehr schnell ist und daß kein Zeitraum einer Anfälligkeit für einen weiteren Ausfall vorliegt, während eine neue sekundäre Entität konfiguriert wird.

Fig. 5 veranschaulicht eine Wiederherstellungseinheit 60 mit einer primären Verarbeitungsentität 61 und einer verketteten Anordnung von zwei sekundären Entitäten 62, 63. Die primäre Entität 61 protokolliert Eingangsnachrichten, nicht-deterministische Auswahlen und acks-in in Protokollnachrichten bei der sekundären Entität 62, die wiederum ein Protokollieren bei der sekundären Entität 63 bewerkstelligt, wobei die letztere für die Erzeugung und das Senden von Wiederherstellungseinheit-Ausgangsnachrichten verantwortlich ist. Was einen Zeitpunkt des Bewerkstelligens der Protokollierung von der sekundären Entität 62 bei der sekundären Entität 63 betrifft, ist es möglich, eine Strategie des späten Protokollierens zu verfolgen, ähnlich der oben für die Übermittlung zwischen primären und sekundären Entitäten beschriebenen; alternativ dazu kann bei dem Protokollieren zwischen den Entitäten 62 und 63 eine Strategie einer frühen Protokollierung angewendet werden, wobei die Entität 62 die Eingangsnachrichten, nicht-deterministische Auswahlen und acks-in unmittelbar nachdem die Entität 62 diese Posten von der primären Entität 61 empfängt, bei der Entität 63 protokolliert. Das Schema der frühen Protokollierung weist offensichtlich eine geringere Latenzzeit auf als das Schema der späten Protokollierung, und dieser Unterschied der Latenzzeit nimmt mit der Anzahl von vorhandenen sekundären Entitäten zu.

Falls die primäre Entität 61 ausfällt, übernimmt die sekundäre Entität 62 die Rolle als die primäre Entität, und zwar sehr ähnlich der oben bereits unter Bezugnahme auf Fig. 2 bis 4 beschriebenen Weise; jedoch bleibt die sekundäre Entität 63 für das Senden von Wiederherstellungseinheit- Ausgangsnachrichten verantwortlich. Falls die sekundäre Senderentität 63 ausfällt, übernimmt die sekundäre Entität 62 die Rolle des Senders, wiederum auf ähnliche Weise wie die oben in dem Fall beschriebene, bei dem die primäre Entität eine ausgefallene sekundäre Entität der Wiederherstellungseinheit der Fig. 2 ablöst (obwohl die Entität 62 selbstverständlich in ihrer sekundären Rolle bleibt).

Falls die sekundäre Entität 62 ausfällt (oder, allgemeiner gesagt, ein inneres sekundäres Element einer Protokollierungskette), so muß die Protokollierungskette repariert werden, wobei die ausgefallene Entität umgangen wird - bei dem Beispiel der Fig. 5 erfordert dies, daß die primäre Entität ihre Protokollierungsnachrichten an die sekundäre Senderentität 63 umleitet. Da jedoch die Möglichkeit besteht, daß die ausgefallene innere Entität 62 vor ihrem Ausfall nicht alle durch die Entität 62 empfangenen Protokolle an die Entität 63 weitergeleitet hat, ist es allgemein notwendig, daß alle Verarbeitungsentitäten, die nicht die letzten beiden in der Protokollierungskette sind, eine Protokoll-Neusende-Warteschlange von Protokollnachrichten, die sie gesendet haben, unterhalten, wobei die Nachrichten in dieser Neusende-Warteschlange an die in Verarbeitungsrichtung übernächste Entität in der Protokollierungskette gesendet werden, falls die benachbarte, in Verarbeitungsrichtung nachgeordnete Entität ausfallen sollte. Es ist natürlich nicht nötig, daß die letzte Entität in der Protokollierungskette eine Protokoll-Neusende-Warteschlange unterhält, da sie keinerlei Protokollierung durchführt; was die vorletzte Entität angeht, so muß diese keine Protokoll- Neusende-Warteschlange unterhalten, da, falls die Entität, bei der sie protokolliert, ausfallen sollte (d. h. die letzte Senderentität), die vorletzte die Rolle der Senderentität übernimmt und keine Protokollierung durchführen muß.

Die Protokoll-Neusende-Warteschlangen müssen selbstverständlich verwaltet werden, um diejenigen Protokollnachrichten, die nicht mehr neu gesendet werden müssen (weil sie durch zumindest die nächsten beiden in Verarbeitungsrichtung nachgeordneten Entitäten empfangen wurden), zu beseitigen. Eine mögliche Art und Weise, die gewünschte Verwaltung zu erreichen, besteht in der Verwendung von expliziten Bestätigungen, die an alle Entitäten, die eine Protokoll-Neusende-Warteschlange unterhalten, gesendet werden, durch die letzte sekundäre Entität der Protokollierungskette, während Protokollnachrichten durch diese letztgenannte Entität empfangen werden; jede Entität, die eine solche Protokollbestätigung empfängt, löscht anschließend die entsprechende Protokollnachricht aus ihrer Protokoll-Neusende- Warteschlange. Eine Weiterentwicklung dieses Lösungsansatzes besteht darin, die letzte sekundäre Entität der Protokollierungskette lediglich Bestätigungen an die primäre Entität senden zu lassen, die diese Bestätigungen anschließend entlang der Protokollierungskette weiterleitet, wobei diese vorzugsweise im Huckepackverfahren von späteren Protokollnachrichten getragen werden. Es ist anzumerken, daß sich bei lediglich zwei sekundären Entitäten (wie in Fig. 5) der Ansatz einer expliziten Bestätigung darauf reduziert, daß die sekundäre Senderentität 63 Bestätigungen an die primäre Entität 61 sendet.

Ein alternativer Lösungsansatz bezüglich eines Verwaltens der Protokoll-Neulende-Warteschlangen besteht darin, implizite Bestätigungen zu verwenden. In diesem Fall ist jeder Protokollnachricht in einer Protokoll-Neusende- Warteschlange die Abfolgenummer der Ausgangsnachricht zugeordnet, die als erstes durch den primären Prozeß erzeugt wird, nachdem die letztgenannte die Eingangsnachricht, die in der Protokollnachricht enthalten ist, zum Verarbeiten verwendet. Acks-in, die einen Empfang von Ausgangsnachrichten bestätigen, werden durch die Empfänger dieser Ausgangsnachrichten auf die übliche Weise an die primäre Entität geliefert. Wenn eine Verarbeitungsentität eine solche ackin empfängt, kann eine beliebige Protokollnachricht in deren Protokoll-Neusende-Warteschlange (wo eine solche unterhalten wird), die eine zugeordnete Ausgangsnachricht- Abfolgenummer, die gleich der oder geringer als die ist, auf die sich die ackin bezieht, aufweist, einer Abfallsammlung unterzogen werden - dies ist der Fall, weil die entsprechende Ausgangsnachricht erst nach Empfang der entsprechenden Protokollnachricht durch die Senderentität von der Wiederherstellungseinheit ausgegeben sein wird.

Das Schema der impliziten Bestätigung ist nur effizient, wenn Ausgangsnachrichten häufig erzeugt werden; dementsprechend wird das Schema der impliziten Bestätigung vorzugsweise mit einem Rückgriff auf das Senden von expliziten Bestätigungen betrieben, falls beispielsweise die Größe der Protokoll-Neusende-Warteschlange eine vorbestimmte Grenze überschreitet.

Fig. 6 veranschaulicht eine Wiederherstellungseinheit 65 mit einer primären Verarbeitungsentität 66 und einer Auffächerungsanordnung von drei sekundären Entitäten 67, 68 und 69, wobei die sekundäre Entität 69 als die Senderentität dient. Die primäre Entität 61 protokolliert Eingangsnachrichten, nicht-deterministische Auswahlen und acks-in in Protokollnachrichten bei allen sekundären Entitäten 67, 68 und 69, wobei diese Protokollierung gemäß dem bereits oben beschriebenen Schema einer frühen Protokollierung oder dem Schema einer späten Protokollierung bewerkstelligt wird.

Falls die Senderentität 69 ausfällt, so wird eine der anderen sekundären Entitäten 67, 68 zu der Senderentität gemacht, wobei die sekundäre Entität, die die Senderrolle übernimmt, allgemein als der Bereitschaftssender vorbestimmt ist (obwohl dies nicht unbedingt nötig ist). Da der neuen Senderentität alle Protokollnachrichten von der primären Entität gesendet wurden, wird die Verarbeitungsabfolge dieses neuen Senders nicht unterbrochen, und somit besteht kein Bedarf, Zustandsinformationen von der primären Entität an den neuen Sender zu übermitteln oder Protokollnachrichten von der primären Entität an den neuen Sender erneut zu übermitteln. Da jedoch die neue Senderentität einen Zustand erreicht haben kann, der bezüglich der ausgefallenen Senderentität zum Zeitpunkt des Ausfalls der letzteren vorgerückt ist, muß die neue Senderentität etwaige nicht-bestätigte Anwendungsausgangsnachrichten in ihrer Ausgangsnachricht-Neusende-Warteschlange senden. In der Tat ist es möglich zu vermeiden, daß Ausgangsnachrichten neu gesendet werden müssen, indem es eingerichtet wird, daß die als der Bereitschaftssender bestimmte sekundäre Entität bezüglich ihrer Verarbeitung hinter der aktuellen Senderentität hinterherhinkt, so daß, wenn der designierte Bereitschaftssender auf einen Ausfall des ursprünglichen Senders hin die Senderrolle übernimmt, diese neue Senderentität ihre Verarbeitung ausgehend von einem Zustand fortsetzt, der hinter dem durch die ausgefallene Senderentität zum Zeitpunkt ihres Ausfalls erreichten liegt. Der Bereitschaftssender kann veranlaßt werden, vor einem Ausfall der ursprünglichen Senderentität hinter derselben hinterherzuhinken, indem es eingerichtet wird, daß der Bereitschaftssender ein Verarbeiten einer Eingangsnachricht verzögert, bis er einen Indikator von der Senderentität empfangen hat, daß die letztere ihre Verarbeitung dieser Eingangsnachricht abgeschlossen hat (dieser Indikator könnte anschließend an einen Ausgang einer beliebigen Ausgangsnachricht, die durch die Verarbeitung der betreffenden Eingangsnachricht erzeugt wird, gesandt werden).

Falls die primäre Entität 66 ausfällt, so ist die am weitesten vorgerückte der sekundären Entitäten 67 bis 69 angeordnet, um die Rolle der primären Entität zu übernehmen. Eine Bestimmung bezüglich dessen, welche sekundäre Entität am weitesten vorgerückt ist, wird durch einen Austausch von Nachrichten zwischen den sekundären Entitäten bewerkstelligt. Dadurch, daß man die am weitesten vorgerückte sekundäre Entität die primäre Entität werden läßt, wird sichergestellt, daß keine der verbleibenden sekundären Entitäten bereits in einen Zustand eingetreten ist, der nicht durch die primäre Entität erreicht ist (eine derartige Situation könnte zu einer Divergenz zwischen der neuen primären Entität und einer oder mehreren der sekundären Entitäten führen). Es ist jedoch möglich, daß manche der verbleibenden sekundären Entitäten nicht alle Protokollnachrichten, die durch die neue primäre Entität empfangen haben, als sie selbst eine sekundäre Entität war, empfangen wurden; dementsprechend muß die neue primäre Entität Protokollnachrichten an die verbleibenden sekundären Entitäten erneut senden. Zu diesem Zweck muß jede der ursprünglichen sekundären Entitäten eine Protokoll-Neusende-Warteschlange von Protokollnachrichten, die sie empfangen hat, unterhalten. Diese Protokoll-Neusende-Warteschlangen werden durch ein Schema einer expliziten Bestätigung verwaltet, das beinhaltet, daß jede sekundäre Entität auf einen Empfang einer Protokollnachricht hin eine Bestätigung an die primäre Entität zurücksendet; nachdem die primäre Entität von allen sekundären Entitäten Bestätigungen bezüglich einer bestimmten Protokollnachricht empfangen hat, sendet sie eine Abfallsammelanzeige bezüglich dieser Protokollnachricht an alle sekundären Entitäten aus, die sie autorisiert, diese Nachricht aus ihren Protokoll-Neusende-Warteschlangen zu entfernen. Die Abfallsammelanzeigen können zweckmäßigerweise im Huckepackverfahren an spätere durch die primäre Entität gesendete Protokollnachrichten angehängt werden.

Falls die zum Zeitpunkt des Ausfalls der primären Entität am weitesten vorgerückte sekundäre Entität die Senderentität ist, so muß natürlich eine der verbleibenden sekundären Entitäten auf die bereits beschriebene Weise die Rolle des Senders übernehmen; dieser neue Sender muß jedoch keine erneute Sendung von Ausgangsnachrichten bewerkstelligen, da dieser neue Sender per definitionem nicht in einem weiter vorgerückten Zustand sein wird als der alte Sender, der zu der primären Entität befördert wurde.

Statt die am weitesten vorgerückte sekundäre Entität auf einen Ausfall der ursprünglichen primären Entität hin die Rolle der primären Entität übernehmen zu lassen, ist es alternativ dazu möglich, eine vordesignierte der sekundären Entitäten (beispielsweise den Sender) die Rolle der neuen primären Entität übernehmen zu lassen. Da die neue primäre Entität in diesem Fall jedoch hinter einer oder mehreren der verbleibenden sekundären Entitäten hinterherhinken kann, muß die neue primäre Entität zu dem Zustand der am weitesten vorgerückten der verbleibenden sekundären Entitäten vorgerollt werden. Dazu informiert die neue primäre Entität die verbleibenden sekundären Entitäten über die jüngste Protokollnachricht, die sie empfangen hat, und diese sekundären Entitäten senden daraufhin etwaige spätere Protokollnachrichten, die sie in ihren Protokoll-Neusende- Warteschlangen aufweisen (wobei diese Warteschlangen auf die oben bereits beschriebene Weise unterhalten werden), an die primäre Entität. Die primäre Entität verwendet dann diese Protokollnachrichten, um vorwärtszurollen (dies beinhaltet, daß die neue primäre Entität in bezug auf ihre Verwendung von nicht-deterministischen Auswahlen in den Protokollnachrichten vorübergehend weiterhin als eine sekundäre Entität agiert); zur selben Zeit gibt die neue primäre Entität sowohl etwaige Protokollnachrichten in ihrer Protokoll-Neusende-Warteschlange als auch die an sie weitergeleiteten neuen Protokollnachrichten an alle sekundären Entitäten aus, um dadurch zu gewährleisten, daß alle sekundären Entitäten alle Protokollnachrichten empfangen haben (falls eine sekundäre Entität bereits eine Protokollnachricht empfangen hat, verwirft sie selbstverständlich jede neue an sie gesandte Kopie).

Varianten

Selbstverständlich sind viele Varianten der beschriebenen Ausführungsbeispiele der Erfindung möglich.

Obwohl die primäre und die sekundäre Verarbeitungsentität in Fig. 2 als separate Einheiten mit jeweils ihren eigenen Prozessoren 20 gezeigt sind, wäre es somit möglich, die primäre und die sekundäre Verarbeitungsentität zu überlappen, indem sie einen gemeinsamen Prozessor 20 und eine gemeinsame Betriebssystem- und Kommunikationsschicht 22 aufweisen, auf denen die primären und sekundären Wiederholungsanwendungsprozesse betrieben werden. In diesem Fall könnte eine einzige gemeinsame FT-Dienste-Schicht 23 für beide Nachbildungen bereitgestellt werden, oder ansonsten könnte eine jeweilige FT-Schicht für jedes bereitgestellt werden (dort, wo die FT-Dienste als verknüpfte Bibliotheken mit den Anwendungsprozessen 24 selbst enthalten sind, existiert dann lediglich die letztere Möglichkeit). Ein Betreiben von sowohl primären als auch sekundären Nachbildungen auf demselben Prozessor 20 beschränkt natürlich die Art eines Ausfalls, vor dem ein Schutz erfolgt, auf diejenigen Teile, die Nachbildungen sind, nämlich den tatsächlichen Anwendungsprozeß selbst und, wo diese für jede Nachbildung separat bereitgestellt ist, die FT-Dienste- Software.

Ferner können mehrere unterschiedliche Anwendungsprozesse über den Software-Schichten 22 und 23 auf demselben Prozessor 20 betrieben werden. In diesem Fall kann sich die Verteilung zwischen Prozessoren 20 der primären und sekundären Nachbildungen einer Anwendung von Anwendungsprozeß zu Anwendungsprozeß unterscheiden. Somit kann ein Prozessor 20 mit seinen Software-Schichten 22 und 23 zusammen mit einem Wiederholungsanwendungsprozeß einer ersten Anwendung eine primäre Verarbeitungsentität bezüglich dieser ersten Anwendung bilden, während er gleichzeitig zusammen mit einem Wiederholungsprozeß einer zweiten Anwendung eine sekundäre Verarbeitungsentität bezüglich dieser zweiten Anwendung bildet.

Es ist Wert, anzumerken, daß die FT-Dienste-Schicht 23 mit nicht wiederholten Prozessen verwendet werden kann, um diese Prozesse in ein Gesamtsystem, das die beschriebene Wiederherstellungseinheit umfaßt, zu integrieren. Diese nicht- replizierten Prozesse sind allgemein nicht kritisch für ein System, sondern müssen sich auf eine Weise verhalten, die mit dem Betrieb der Wiederherstellungseinheiten, die replizierte Anwendungsprozesse aufweisen, übereinstimmt. Zu diesem Zweck interagiert jeder nicht-nachgebildete Prozeß mit einer FT-Dienste-Schicht auf dieselbe Weise wie ein nachgebildeter Prozeß, jedoch ist die FT-Dienste-Schicht nun eingestellt, um in dem Fall, in dem keine sekundären Einheiten vorliegen, wie für eine primäre Verarbeitungseinheit zu arbeiten (so daß die primäre Einheit für ein Senden von Ausgangsnachrichten und ack-outs verantwortlich ist). Dienste wie beispielsweise Neusendungen von Ausgangsnachrichten werden auf diese Weise dem nichtreplizierten Prozeß zur Verfügung gestellt. Selbstverständlich muß der nicht- replizierte Prozeß nicht in der Lage sein, Zustandsinformationen an eine sekundäre Entität zu transferieren, wie es für den Prozeß 24 erforderlich ist.

Es ist eine Anmerkung Wert, daß die beschriebene Wiederherstellungseinheit auf eine pipelineartige Weise arbeitet, wobei die primäre Verarbeitungsentität der Wiederherstellungseinheit in der Lage ist, das Verarbeiten einer neuen Eingangsnachricht zu starten, bevor die Senderverarbeitungsentität eine durch das Verarbeiten der vorherigen Eingangsnachricht erzeugte Ausgangsnachricht ausgibt.


Anspruch[de]

1. Ein Verfahren zum Betreiben einer fehlertoleranten Wiederherstellungseinheit zum Empfangen und Verarbeiten von Eingangsnachrichten, um Ausgangsnachrichten zu erzeugen, wobei das Verfahren folgende Schritte aufweist:

(a) - Bereitstellen mindestens zweier Verarbeitungsentitäten, auf denen jeweilige Wiederholungsanwendungsprozesse zum Verarbeiten der Eingangsnachrichten laufen, um Anwendungsnachrichten zu erzeugen, wobei die eine Verarbeitungsentität als eine primäre Verarbeitungsentität dient und jede der anderen Verarbeitungsentitäten als eine sekundäre Verarbeitungsentität dient, wobei eine der sekundären Verarbeitungsentitäten als eine Senderverarbeitungsentität fungiert;

(b) - Empfangen der Eingangsnachrichten an der primären Verarbeitungsentität und Bewirken, daß der Wiederholungsanwendungsprozeß, der durch die letztere betrieben wird, hierin der primäre Prozeß, diese Eingangsnachrichten verarbeitet;

(c) - Protokollieren der Eingangsnachrichten und jeglicher nicht-deterministischer Auswahlen, die durch den primären Prozeß während seines Verarbeitens getroffen werden, bei jeder der sekundären Verarbeitungsentitäten;

(d) - Bewirken, daß der durch jede sekundäre Verarbeitungsentität betriebene Wiederholungsanwendungsprozeß, hierin ein sekundärer Prozeß, diejenigen der Eingangsnachrichten, die bereits bei der primären Verarbeitungsentität empfangen wurden, in derselben Reihenfolge wie der primäre Prozeß verarbeitet, wobei jegliche im Schritt (c) protokollierten nicht-deterministischen Auswahlen durch jeden sekundären Prozeß verwendet werden, statt daß letzterer seine eigenen nicht- deterministischen Auswahlen während des Verarbeitens trifft: und

(e) - Verwenden der Anwendungsnachrichten, die durch den sekundären Prozeß, der durch die Senderverarbeitungsentität betrieben wird, erzeugt werden, als die Wiederherstellungseinheit- Ausgangsnachrichten;

wobei das Verfahren ferner folgende Schritte aufweist:

(f) - auf einen Ausfall der primären Verarbeitungsentität hin, Bewirken, daß eine der sekundären Verarbeitungsentitäten die Rolle der primären Verarbeitungsentität übernimmt, und

(g) - auf einen Ausfall der Senderverarbeitungsentität oder auf ein Übernehmen der Rolle der primären Verarbeitungsentität durch die Senderverarbeitungsentität im Schritt (f) hin, Bewirken, daß eine andere der sekundären Verarbeitungsentitäten, wo vorhanden, die Senderverarbeitungsentität wird, und andernfalls Verwenden der durch den primären Prozeß erzeugten Anwendungsnachrichten als die Ausgangsnachrichten, wobei dieser Schritt (g) ohne einen Verlust von Wiederherstellungseinheit-Ausgangsnachrichten bewerkstelligt wird.

2. Ein Verfahren gemäß Anspruch 1, bei dem der Schritt (c) ferner ein Protokollieren jeder durch den primären Prozeß verarbeiteten Eingangsnachricht, nachdem letzterer sein Verarbeiten dieser Eingangsnachricht abgeschlossen hat, bei jeder der sekundären Verarbeitungsentitäten aufweist, wobei jeder derart protokollierten Eingangsnachricht etwaige der nicht-deterministischen Auswahlen zugeordnet sind, die durch den primären Prozeß getroffen werden, wenn er die Nachricht verarbeitet.

3. Ein Verfahren gemäß Anspruch 1, bei dem der Schritt (c) ferner ein Protokollieren jeder bei der primären Verarbeitungsentität empfangenen Eingangsnachricht bei der sekundären Verarbeitungsentität aufweist, ohne darauf zu warten, daß die Eingangsnachricht durch den primären Prozeß verarbeitet wird, wobei jegliche durch den primären Prozeß beim Verarbeiten dieser Eingangsnachricht getroffenen nicht-deterministischen Auswahlen anschließend bei jeder der sekundären Verarbeitungsentitäten protokolliert werden.

4. Ein Verfahren gemäß Anspruch 1, bei dem jede der sekundären Verarbeitungsentitäten die Eingangsnachrichten unabhängig von ihrem Empfang durch die primäre Verarbeitungsentität empfängt.

5. Ein Verfahren gemäß einem der Ansprüche 1 bis 4, bei dem mindestens zwei der sekundären Verarbeitungsentitäten bereitgestellt werden, wobei Schritt (c) auf eine Art und Weise des Weiterleitens bewerkstelligt wird, wobei die primäre Verarbeitungsentität das Protokollieren bei einer der sekundären Verarbeitungsentitäten bewerkstelligt, und diese Entität wiederum ein Protokollieren bei einer anderen der sekundären Verarbeitungsentitäten bewerkstelligt, und so weiter, je nach Bedarf, wobei die Senderverarbeitungsentität die letzte Entität in dieser Protokollierungskette ist.

6. Ein Verfahren gemäß Anspruch 5, das folgende Schritte umfaßt:

- Aufrechterhalten mindestens einer Neusende- Warteschlange von Posten, die im Schritt (c) protokolliert wurden, und

- auf einen Ausfall einer intermediären der sekundären Verarbeitungsentitäten in der Protokollierungskette hin, Neusenden zumindest bestimmter der Posten von der Neusende-Warteschlange an die sekundäre Verarbeitungsentität, die auf die ausgefallene sekundäre Verarbeitungsentität in der Protokollierungskette folgt.

7. Ein Verfahren gemäß Anspruch 6, bei dem eine jeweilige der Neusende-Warteschlangen durch mindestens jede andere Verarbeitungsentität als die letzten beiden in der Protokollierungskette aufrechterhalten wird, wobei die Posten in jeder derartigen Warteschlange diejenigen sind, die durch die entsprechende Verarbeitungsentität ausgesandt werden.

8. Ein Verfahren gemäß Anspruch 6 oder 7, das den Schritt des Bewirkens, daß die letzte der Verarbeitungsentitäten in der Protokollierungskette auf einen Empfang eines der bei derselben protokollierten Postens hin einen Indikator ausgibt, und den Schritt des Verwendens des Indikators, um eine Entfernung des Postens von der oder jeder der Neusende-Warteschlangen einzuleiten, umfaßt.

9. Ein Verfahren gemäß einem der Ansprüche 1 bis 4, bei dem mindestens zwei der sekundären Verarbeitungsentitäten vorgesehen sind, wobei Schritt (c) auf eine Eines-An-Viele-Weise bewerkstelligt wird, wobei die primäre Verarbeitungsentität das Protokollieren bei allen der sekundären Verarbeitungsentitäten bewerkstelligt.

10. Ein Verfahren gemäß Anspruch 9, das ferner folgende Schritte umfaßt:

- Aufrechterhalten, für jede sekundäre Verarbeitungsentität, einer Neusende-Warteschlange von Posten, die im Schritt (c) bei dieser Entität protokolliert wurden, und

- nachdem eine der sekundären Verarbeitungsentitäten im Schritt (f) zu der primären Verarbeitungsentität befördert wurde, Verwenden der Neusende- Warteschlangen, um sicherzustellen, daß alle verbleibenden Verarbeitungsentitäten dieselben protokollierten Posten empfangen haben, um dadurch zu ermöglichen, daß diese Entitäten zu denselben Zuständen vorgerollt werden.

11. Ein Verfahren gemäß Anspruch 10, bei dem der Schritt (f) die Schritte des Bestimmens, bei welcher der sekundären Verarbeitungsentitäten der Anwendungsprozeß am meisten vorgerückt ist, des Unterstützens, daß diese Verarbeitungsentität die primäre Verarbeitungsentität sein soll, und des Sendens zumindest bestimmter Posten von der Neusende-Warteschlange der neuen primären Verarbeitungsentität an die verbleibenden sekundären Verarbeitungsentitäten beinhaltet.

12. Ein Verfahren gemäß Anspruch 10, bei dem der Schritt (f) die Schritte des Weiterleitens jeglicher Posten, die in den Neusende-Warteschlangen der verbleibenden sekundären Verarbeitungsentitäten, jedoch nicht in der Neusende-Warteschlange der neuen primären Verarbeitungsentität vorhanden sind, von den Neusende- Warteschlangen der verbleibenden sekundären Verarbeitungsentitäten an die neue primäre Verarbeitungsentität, und des Verwendens dieser weitergeleiteten Posten, um die primäre Verarbeitungsentität vorzurollen, beinhaltet.

13. Ein Verfahren gemäß einem der Ansprüche 9 bis 12, einschließlich der Schritte des Bewirkens, daß jede sekundäre Verarbeitungsentität auf einen Empfang eines bei derselben protokollierten der Posten einen Hinweis ausgibt, und des Einleitens des Entfernens des Postens von den Neusende-Warteschlangen, wenn alle sekundären Verarbeitungsentitäten einen solchen Hinweis bezüglich eines bestimmten der Posten erzeugt haben.

14. Ein Verfahren gemäß einem der Ansprüche 1 bis 4, bei dem lediglich eine der sekundären Verarbeitungsentitäten bereitgestellt wird.

15. Ein Verfahren gemäß Anspruch 1, das im Anschluß an einen Ausfall einer der Verarbeitungsentitäten die zusätzlichen Schritte des Beibringens einer neuen sekundären Verarbeitungsentität, die einen neuen sekundären Prozeß betreibt, und des Transferierens von Zustandsinformationen über einen der Wiederholungsanwendungsprozesse, den eine nicht ausgefallene der Verarbeitungsentitäten der Wiederherstellungseinheit betreibt, an diesen neuen sekundären Prozeß aufweist.

16. Ein Verfahren gemäß Anspruch 15, bei dem normalerweise lediglich eine der sekundären Verarbeitungsentitäten bereitgestellt wird, wobei der zusätzliche Schritt den Schritt des Bewirkens, nachdem der Transfer der Zustandsinformationen abgeschlossen ist, daß die neue sekundäre Verarbeitungsentität als die Senderverarbeitungsentität dient, aufweist.

17. Ein Verfahren gemäß Anspruch 1, bei dem die Eingangsnachrichten Informationen bezüglich ihrer Quelle und, zumindest implizit, ihres Sequenzierens enthalten und bei dem Schritt (b) ferner die Schritte des vorübergehenden Speicherns von Eingangsnachrichten, die nicht in der richtigen Abfolge von einer der Quellen empfangen werden, während ein Empfang von fehlenden, in der Abfolge früher auftauchenden Nachrichten erwartet wird, und des Unterbreitens der von der Quelle empfangenen Eingangsnachrichten zum Verarbeiten durch den primären Prozeß in ihrer korrekten Abfolge beinhaltet.

18. Ein Verfahren gemäß Anspruch 1, das ferner folgende Schritte aufweist:

- Protokollieren, bei einer Neusende-Warteschlangen- Anordnung, der Anwendungsnachrichten, die durch denjenigen der Wiederholungsanwendungsprozesse, dessen Anwendungsnachrichten gemäß Schritt (g) im Fall eines Ausfalls der Senderverarbeitungsentität als die Ausgangsnachrichten verwendet werden sollen; und

- Neusenden, von der Neusende-Warteschlangen- Anordnung, mindestens einiger der darin gehaltenen Anwendungsnachrichten auf einen Ausfall der Senderverarbeitungsentität hin.

19. Ein Verfahren gemäß Anspruch 1, das ferner folgende Schritte aufweist:

- Protokollieren, bei einer Neusende-Warteschlangen- Anordnung, der durch die Senderverarbeitungsentität erzeugten Anwendungsnachrichten; und

- Neusenden, von der Neusende-Warteschlangen- Anordnung, mindestens einiger derjenigen Ausgangsnachrichten, die für eine bestimmte weitere der Wiederherstellungseinheiten bestimmt sind, auf einen Ersatzbetrieb der letzteren hin.

20. Ein Verfahren gemäß Anspruch 1, das ferner folgende Schritte aufweist:

- Protokollieren, bei einer entsprechenden Neusende- Warteschlangen-Anordnung, der durch jeden der Wiederholungsanwendungsprozesse erzeugten Anwendungsnachrichten;

- im Anschluß an einen Ausfall der Verarbeitungsentität:

-- Beibringen einer neuen sekundären Verarbeitungsentität, die einen neuen der sekundären Prozesse betreibt,

-- Versehen des neuen sekundären Prozesses mit einer zugeordneten der Neusende- Warteschlangen-Anordnungen, und

-- Transferieren von Zustandsinformationen, jedoch nicht von protokollierten Anwendungsnachrichten, die einem der Wiederholungsanwendungsprozesse, die bei einer nicht ausgefallenen der Verarbeitungsentitäten der Wiederherstellungseinheit laufen, zugeordnet sind, an den neuen sekundären Prozeß; und

- auf einen Ersatzbetrieb einer bestimmten weiteren der Wiederherstellungseinheiten hin, Neusenden, von der Neusende-Warteschlangen-Anordnung, die dem durch die Senderverarbeitungsentität betriebenen sekundären Prozeß zugeordnet ist, mindestens einiger der bei derselben protokollierten Nachrichten, die an die bestimmte weitere der Wiederherstellungseinheiten adressiert sind;

wobei dieser letzte Schritt, wenn die Senderverarbeitungsentität durch die neue sekundäre Verarbeitungsentität gebildet wird, den Schritt des Bewirkens, daß die nicht ausgefallene Verarbeitungsentität an die bestimmte weitere Wiederherstellungseinheit Anwendungsnachrichten in ihrer Neusende-Warteschlangen-Anordnung sendet, die an die bestimmte weitere Wiederherstellungseinheit adressiert sind und Zuständen der nicht ausgefallenen Verarbeitungsentität zugeordnet sind, die vor dem Transferieren von Zustandsinformationen an die neue sekundäre Verarbeitungsentität eingegeben werden, umfaßt.

21. Ein Verfahren gemäß einem der Ansprüche 18 bis 20, das die weiteren Schritte des Empfangens von Eingangsbestätigungen, die den Empfang der Ausgangsnachrichten bestätigen, und des Entfernens derjenigen Ausgangsnachrichten, deren Empfang bestätigt wurde, aus den Neusende-Warteschlangen-Anordnungen umfaßt.

22. Ein Verfahren gemäß Anspruch 1, das ferner den Schritt des Ausgebens von Bestätigungen von Eingangsnachrichten umfaßt, die bei derjenigen der Verarbeitungsentitäten empfangen wurden, die den Wiederholungsanwendungsprozeß betreibt, dessen Anwendungsnachrichten derzeit als die Ausgangsnachrichten verwendet werden.

23. Ein Verfahren gemäß Anspruch 1, bei dem jede der Verarbeitungsentitäten jeweils einen Prozessor aufweist, der den entsprechenden der Wiederholungsanwendungsprozesse betreibt.

24. Ein Verfahren gemäß Anspruch 1, bei dem die Verarbeitungsentitäten einen gemeinsamen Prozessor verwenden, an dem die Wiederholungsanwendungsprozesse betrieben werden.

25. Ein Verfahren gemäß Anspruch 1, das folgende weitere Schritte aufweist:

- Protokollieren, bei einer Neusende-Warteschlangen- Anordnung von feststehender Länge, der Anwendungsnachrichten, die durch die Senderverarbeitungsentität erzeugt wurden, sowohl bevor als auch nachdem die Anwendungsnachrichten durch die Senderverarbeitungsentität gesendet wurden; und

- Anhalten des sekundären Anwendungsprozesses, falls die Neusende-Warteschlangen-Anordnung von feststehender Länge voller Anwendungsnachrichten ist.

26. Ein Verfahren gemäß Anspruch 25, das folgende weitere Schritte aufweist:

- Protokollieren, bei einer Neusende-Warteschlangen- Anordnung von feststehender Länge, der Eingangsnachrichten, die bei den primären und sekundären Verarbeitungsentitäten empfangen wurden; und

- Ausgeben einer Bestätigung einer bestimmten Eingangsnachricht, wenn die bestimmte Eingangsnachricht von der Eingabe-Warteschlangen-Anordnung der feststehenden Länge zum Verarbeiten durch die sekundäre Verarbeitungsentität entfernt wird.

27. Ein Verfahren gemäß Anspruch 26, das auf eine anfängliche Konfigurierung einer Wiederherstellungseinheit hin den weiteren Schritt des Verhandelns mit jeder der weiteren Wiederherstellungseinheiten, mit der Eingangs- oder Ausgangsnachrichten ausgetauscht werden, umfaßt, um geeignete feststehende Längen für jede der Eingangs-Warteschlange-Anordnungen und Neusende- Warteschlange-Anordnungen einzustellen.

28. Ein Verfahren gemäß Anspruch 1, das im Anschluß an einen Ausfall einer sekundären Verarbeitungsentität folgende zusätzliche Schritte aufweist:

- Beibringen einer neuen sekundären Verarbeitungsentität, die einen neuen der sekundären Prozesse betreibt, wobei die Verantwortung für ein Senden von Ausgangsnachrichten an die neue sekundäre Verarbeitungsentität übertragen wird, und

- Bewirken, daß die neue sekundäre Verarbeitungsentität von der primären Verarbeitungsentität lediglich diejenigen Ausgangsnachrichten anfordert, die von anderen der Wiederherstellungseinheiten benötigt werden.







IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com