Frage

Erlang (oder Joe Armstrong?) Beratung NICHT defensive Programmierung verwenden und Prozesse Absturz zu lassen (und nicht verschmutzt Ihren Code mit unnötigen Wachen versuchen, den Überblick über die zu halten Wrack) macht mir so viel Sinn, jetzt, dass ich frage mich, warum ich so viel Mühe auf Fehler verschwendet über die Jahre Handhabung!

Was ich Wunder ist - ist dieser Ansatz nur für Plattformen wie Erlang? Erlang hat eine VM mit einfacher native Unterstützung für Prozessüberwachung Bäume und Prozesse neu zu starten ist wirklich schnell. Soll ich meine Entwicklungsarbeit (wenn nicht in der Erlang Welt) verbringen Aufsicht Bäume neu zu erstellen, anstatt bogging mich nach unten mit Top-Level-Exception-Handler, Fehlercodes, null Ergebnisse etc etc etc.

Denken Sie, diese Änderung der Ansatz würde gut in (sagen wir) .NET oder Java Raum?

War es hilfreich?

Lösung

Es ist überall einsetzbar . Unabhängig davon, ob Sie schreiben Sie Ihre Software in einem „lassen es krachen“ -Muster, es trotzdem zum Absturz, zum Beispiel, wenn die Hardware ausfällt. „Lassen Sie es krachen“ gilt überall dort, wo Sie Realität standhalten müssen. Da sagte James Hamilton:

Wenn ein Hardware-Fehler keine unmittelbare Verwaltungsvorschriften erfordert, wird der Dienst einfach nicht kostengünstig und zuverlässig skalieren. Der gesamte Dienst muss überleben Versagen ohne menschliche Interaktion administrativer fähig sein. Ausfallwiederherstellung muss ein sehr einfacher Weg sein, und dieser Weg muss häufig geprüft werden. Armando Fox von der Stanford hat argumentiert, dass der beste Weg, um den Ausfall Weg zu testen, ist nie den Dienst nach unten normalerweise zu schließen. Nur schwer versagen sie. Das klingt kontraintuitiv, aber wenn die Fehler Pfade werden nicht häufig verwendet wird, sie wird nicht funktionieren, wenn nötig.

Dies gilt nicht genau mean „nie Wachen Gebrauch“, though. Aber keine Angst, zum Absturz zu bringen!

Andere Tipps

Ja, es ist überall anwendbar, aber es ist wichtig zu beachten, in welchem ??Kontext es gemeint ist, verwendet werden. Es tut nicht bedeutet, dass die Anwendung als Ganze Abstürze, die, wie @PeterM wies darauf hin, kann in vielen Fällen katastrophal sein. Das Ziel ist es, ein System aufzubauen, das als Ganzes stürzt nie aber kann Fehler intern behandeln. In unserem Fall war es Telecomms Systeme, die Ausfallzeiten haben, in der Größenordnung von Minuten pro Jahr erwartet werden.

Das grundlegende Design ist das System und zu isolieren, zentrale Teile des Systems Schicht, die anderen Teile zu überwachen und zu steuern, die die Arbeit machen. In OTP Terminologie, die wir haben Supervisor und Arbeiter Prozesse. Supervisors haben die Aufgabe, die Arbeiter überwachen und anderen Aufsichtsbehörden, mit dem Ziel, sie in der richtigen Art und Weise neu zu starten, wenn sie abstürzen, während die Arbeiter alle die eigentliche Arbeit tun. das System Strukturierung richtig in Schichten mit diesem Prinzip die Funktionalität strikte Trennung ermöglicht es Ihnen, die meisten der Fehler der Arbeiter in den Betreuern Umgang heraus zu isolieren. Sie versuchen, mit einem kleinen ausfallsichere Fehlerbetriebssystemkern, die, wenn sie richtig verarbeiten können Fehler irgendwo im Rest des Systems enden. Es ist in diesem Zusammenhang, in dem die "let-it-Crash" Philosophie verwendet werden soll.

erhalten Sie das Paradox, wo man überall über Fehler und Ausfälle mit dem Ziel, sie tatsächlich in der Handhabung denkt so wenige Orte wie möglich.

Der beste Ansatz, um einen Fehler zu behandeln, hängt natürlich von dem Fehler und dem System. Manchmal ist es am besten, um zu versuchen und fangen Fehler lokal innerhalb eines Prozesses und versuchen, sie dort zu handhaben, mit der Option, wieder zu versagen, wenn das nicht funktioniert. Wenn Sie eine Anzahl von Arbeitsprozessen haben zusammenarbeiten, dann ist es oft am besten, sie alle, und starten Sie sie wieder zum Absturz bringen. Es ist ein Vorgesetzter, der tut dies.

Sie haben eine Sprache benötigen, die Fehler / Ausnahmen erzeugt, wenn etwas schief geht, so kann man trap sie oder haben sie den Prozess zum Absturz bringen. Nur ignorieren Werte Fehler Rückkehr ist nicht das Gleiche.

Es heißt ausfall schnell. Es ist ein gutes Paradigma zur Verfügung gestellt Sie ein Team von Menschen, die auf den Ausfall reagieren können (und tun so schnell).

in der Marine alle Leitungen und elektrische montiert an der Außenseite einer Wand (vorzugsweise auf der mehrere öffentlichen Seite einer Wand). Auf diese Weise, wenn es ein Leck oder ein Problem ist, ist es wahrscheinlicher, schnell erkannt werden. In der Marine sind die Menschen für reagiert nicht auf einen Fehler bestraft, so dass es sehr gut funktioniert: Ausfälle schnell und beaufschlagten schnell erkannt werden

.

In einem Szenario, in dem jemand auf einem Fehler nicht schnell handeln kann, wird es eine Frage der Meinung, ob es günstiger ist der Fehler zu ermöglichen, das System zu stoppen oder um den Fehler zu schlucken und weiter fortzusetzen versuchen.

Ich schreibe Programme, die auf Daten aus realen Situationen verlassen und wenn sie abstürzen können sie große $$ in physischen Schaden (ganz zu schweigen von großen $$ in entgangenen Einnahmen) verursachen. Ich würde in einem Blitz von einem Job sein, wenn ich nicht defensiv hätte programmieren.

Wenn das gesagt denke ich, dass Erlang ein Sonderfall sein muss, dass nicht nur Sie die Dinge sofort neu zu starten, dass ein Neustart Programm auftauchen kann, schauen Sie sich um und sagt: „ahhh .. das ist, was ich tat!“

Meine Kollegen und ich dachte über das Thema nicht besonders Technologie weise aber mehr von einer Domäne Perspektive und mit einem Sicherheits Fokus.

Die Frage ist, „Ist es sicher, es abstürzen zu lassen?“ oder besser: „Ist es sogar möglich, ein Robustheit Paradigma wie Erlang anwenden‚läßt es krachen‘, um sicherheitsrelevante Software-Projekte?“.

Um eine Antwort zu finden wir ein kleines Forschungsprojekt haben mit einer close-to-Realität Szenario mit Industrie und vor allem medizinischem Hintergrund. Werfen Sie einen Blick hier ( http://bit.ly/Z-Blog_let-it-crash). Es gibt sogar ein Papier zum Download bereit. Sagen Sie mir, was Sie denken!

Ich persönlich denke, es in vielen Fällen anwendbar ist und sogar wünschenswert, vor allem, wenn es eine Menge Fehler Handhabung zu tun (sicherheitsrelevanter Systeme). Sie können nicht immer Verwendung Erlang (Echtzeit-Funktionen fehlen, keine wirkliche Embedded-Unterstützung, Kunden whishes ...), aber ich bin ziemlich sicher, können Sie es sonst implementieren (z Threads, Ausnahmen, Message-Passing). Ich habe es noch nicht, obwohl es versucht, aber ich möchte.

IMHO Einige Entwickler Griff / Wrap-geprüfte Ausnahmen mit Code, der wenig Wert hinzuzufügen. Es ist oft einfacher, ein Verfahren zu ermöglichen, die ursprüngliche Ausnahme zu werfen, wenn Sie es zu handhaben werden und einen Wert hinzuzufügen.

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