Frage

Wie oft lösen Sie Ihre Probleme, die durch einen Computer, Router-Programm, Browser neu zu starten? Oder auch durch das Betriebssystem oder Software-Komponente neu zu installieren?

Dies scheint ein gemeinsames Muster zu sein, wenn ein Verdächtiger ist, die Softwarekomponente seines Zustand nicht in der richtigen Weise nicht halten, dann nur Sie den ursprünglichen Zustand erhalten, indem Sie die Komponente neu zu starten.

Ich habe gehört, dass Amazon / Google einen Cluster von viel viele Knoten hat. Und noch eine wichtige Eigenschaft jedes Knotens ist, dass es in Sekunden neu starten können. Also, wenn einer von ihnen ausfällt, dann ist es wieder in Ausgangszustand zurückkehrt ist nur eine Frage des neu zu starten.

Gibt es Sprachen / Frameworks / Entwurfsmuster gibt, die Hebelwirkung dieser techinque als Bürger erster Klasse?

Bearbeiten Die Verbindung, die einige Prinzipien, die hinter Amazon sowie allgemeine Grundsätze der Verfügbarkeit und Konsistenz beschreibt: http://www.infoq.com/presentations/availability-consistency

War es hilfreich?

Lösung

Dies ist üblich in den Embedded-Systemen weltweit und in der Telekommunikation. Es ist viel weniger häufig in der Server-basierten Welt.

Es gibt eine Forschungsgruppe, die Sie interessieren könnten. Sie gearbeitet haben Erholung-Oriented Computing oder "ROC". Das wichtigste Prinzip bei der ROC ist, dass die sauberste, am besten, zuverlässigsten Zustand, dass jedes Programm in sein kann, ist direkt nach dem Start. Daher einen Fehler beim Erfassen, bevorzugen sie die Software neu zu starten, anstatt zu versuchen, von dem Fehler zu erholen.

Klingt einfach genug, nicht wahr? Nun, die meisten der Forschung hat gegangen in diese Idee umzusetzen. Der Grund dafür ist genau das, was Sie und andere commenters haben darauf hingewiesen:. O neu gestartet sind zu langsam eine entwicklungsfähige Recovery-Methode sein

ROC stützt sich auf drei Hauptteile:

  1. Ein Verfahren zum Fehler erkennt so früh wie möglich.
  2. Ein Mittel, um die fehlerhafte Komponente zu isolieren, während der Rest des Systems zu erhalten.
  3. Component-Level neu gestartet wird.

Der eigentliche Schlüssel Unterschied zwischen ROC und dem typischen „nächtlichen Neustart“ -Ansatz ist, dass ROC eine Strategie ist, wo die Neustarts sind eine Reaktion. Was ich meine ist, dass die meisten Software mit einer gewissen Fehlerbehandlung und Wiederherstellung geschrieben (throw-und-Fang, Protokollierung, wiederholen Schleifen, etc.) Eine ROC-Programm würde erkennen, den Fehler (Ausnahme) und sofort Ausfahrt. Ein Vertauschen der beiden Paradigmen nur lässt Sie mit den schlimmsten beiden Welten --- geringe Zuverlässigkeit und Irrtümer vorbehalten.

Andere Tipps

Das ist eigentlich sehr selten in der Unix / Linux-Welt. Diese Osen wurden entwickelt (und so war Fenster), sich zu schützen von schlecht benommen Prozesse. Ich bin sicher, dass Google ist nicht auf harten Neustart angewiesen Misbehaved Software zu korrigieren. Ich würde diese Technik sagen sollte nicht verwendet werden, und wenn jemand sagt, dass der fatest Weg zur Genesung für ihre Software sollten Sie für etwas anderes suchen!

Mikrocontroller haben in der Regel einen Watchdog-Timer, der (durch eine Codezeile) zurückgesetzt werden muss wird jeder so oft oder auch der Mikrocontroller zurückgesetzt. Dies hält die Firmware von in einer Endlosschleife stecken zu bleiben, steckte für die Eingabe warten, etc.

ungenutzte Speicher werden manchmal auf einen Befehlssatz, der einen Reset verursacht, oder einen Sprung zu einem der gleichen Stelle, die die Mikrocontroller an beginnen, wenn er zurückgesetzt wird. Dadurch wird den Mikrocontroller zurückgesetzt, wenn es irgendwie zu einem Ort außerhalb des Programmspeichers springt.

Embedded Systeme können eine Checkpoint-Funktion haben, wo alle n ms wird der aktuelle Stack gespeichert. Der Speicher ist nicht flüchtig auf Strom Neustart (dh batteriegepuffert), so an einem Leistungs Start, ein Test durchgeführt, um zu sehen, ob der Code zu einem alten Kontrollpunkt springen muss, oder wenn es ein neues System.

Ich werde erraten, dass eine ähnliche Technik (aber anspruchsvollere) für Amazon / Google verwendet wird.

Obwohl ich nicht von einem Design-Mustern per se denken kann, in meiner Erfahrung, es ist ein Ergebnis der „select ist gebrochen“ von den Entwicklern.

Ich habe einen 50-User-Standort Krüppel sowohl SQL Server Enterprise Edition (mit einer 750 MB-Datenbank) und einen Novell-Server gesehen wegen des schlechten Verbindungsmanagements gekoppelt mit einem übermäßigen Anruf und ohne Caching. Novell war immer die Täter laut Entwicklern, bis wir einen fehlenden „Closeconnection“ Anruf in einer Kern-Bibliothek gefunden. Bis dahin wurden Tausende ausgegeben, ohne Erfolg, auf Upgrades, dass eine fehlende Codezeile zu adressieren.

(Warum hatte sie Enterprise Edition über mir war so nicht fragen !!)

Wenn Sie auf Skriptsprachen wie PHP läuft aussehen auf Apache, beginnt jeder Aufruf einen neuen Prozess. Im einfachsten Fall wird es keinen Staat zwischen Prozessen geteilt und sobald der Aufruf der Prozess beendet ist, beendet ist.

Die Vorteile sind weniger Last auf Ressourcen-Management, wie sie freigegeben werden, wenn der Prozess abgeschlossen ist und weniger Bedarf für die Fehlerbehandlung, da der Prozess wird entwickelt, um ausfall schnell und es kann nicht in einem inkonsistenten Zustand gelassen werden.

Ich habe es ein paar Plätze auf der Anwendungsebene gesehen (ein App Neustart selbst wenn es Bomben).

Ich habe das Muster auf Anwendungsebene implementiert, wobei ein Service von dBase-Dateien zu lesen beginnt, Fehler nach dem Lesen x Höhe der Zeit zu bekommen. Es sieht für einen bestimmten Fehler, die ausgelöst wird, und wenn es diesen Fehler sieht, ruft der Dienst eine Konsolenanwendung, die den Prozess tötet und startet den Dienst. Es ist kludgey, und ich hasse es, aber für diese besondere Situation, ich konnte keine bessere Antwort finden.

UND bedenken Sie, dass IIS eine eingebaute Funktion hat, die den Anwendungspool unter bestimmten Bedingungen neu gestartet wird.

Für diese Angelegenheit einen Dienst neu zu starten ist eine Option für jeden Dienst unter Windows als eine der Maßnahmen zu ergreifen, wenn der Dienst nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top