Frage

Lassen Sie uns sagen, ich habe eine eigenständige Windows-Dienst in einem Windows-Server-Computer ausgeführt. Wie stellen Sie sicher, es ist hochverfügbar?

1). Was sind alle Design-Ebene Richtlinien, die Sie vorschlagen?

2). Wie macht man es wie primäre hochverfügbare / sekundär, z. B., die Clustering-Lösungen, die derzeit auf dem Markt verfügbar

3). Wie mit Querschnittsthemen in Fall behandeln, jede Fail-Over-Szenarien

Wenn andere können Sie denken Sie es bitte hier hinzuzufügen ..

Hinweis: Die Frage ist nur für Windows und Windows-Dienste im Zusammenhang, versuchen Sie, diese Regel zu befolgen:)

War es hilfreich?

Lösung

Um den Dienst zumindest Laufen halten Sie für die Windows Service Manager automatisch starten Sie den Dienst anordnen können, wenn er abstürzt (die Registerkarte Wiederherstellung auf den Service-Eigenschaften sehen.) Weitere Informationen finden Sie hier zur Verfügung stehen, darunter eine Batch-Skript diese einstellen Eigenschaften - Restart ein Windows-Dienst, wenn er abstürzt

Hochverfügbarkeit ist mehr als nur den Service bis von außen zu halten - dem Dienst selbst mit High-availabiity im Verstand errichtet werden muss (dh Verwendung gute Programmierpraktiken in geeignete Datenstrukturen, Paare Ressource aquire und Freigabe) und die ganzer Stress-getestet, um sicherzustellen, dass es unter dem zu erwartenden Belastungen bleiben wird.

Für Idempotent Befehle, Tolerierung intermittierende Ausfälle (wie gesperrter Ressourcen) durch erneuten Aufruf des Befehl, um eine bestimmte Anzahl von Malen erreicht werden. Dies ermöglicht es den Dienst den Client von dem Ausfall zu schützen (bis zu einem gewissen Punkt.) Der Client sollte auch antizipieren Ausfall codiert werden. Protokollierung, die den Benutzer auffordert, Retrying X mal, Protokollierung einen fatalen Fehler und verlassen, werden alle möglichen Handler - - Der Kunde kann Dienstfehler auf verschiedene Weise handhaben, welche die richtige für Sie nach Ihren Anforderungen abhängt. Wenn der Dienst „Gesprächszustand“ hat, wenn der Dienst hart ausfällt (d Prozess neu gestartet wird), sollte der Kunde bewusst sein und ths Situation umgehen, wie es in der Regel aktuellen Gesprächszustand bedeutet, verloren gegangen ist.

Eine einzige Maschine Hardware-Fehler anfällig sein wird, so dass, wenn Sie eine einzelne Maschine verwenden wollen, dann sorgen sie redundante Komponenten. HDDs sind besonders fehleranfällig, so dass zumindest gespiegelten Laufwerke haben, oder ein RAID-Array. PSUs sind der nächste Schwachpunkt, so redundanter PSU lohnt sich auch, wie ein UPS ist.

In Bezug auf Clustering unterstützt Windows-Service-Clustering und verwaltet Dienste einen Netzwerknamen verwenden, anstatt einzelne Computernamen. Auf diese Weise können Sie Ihre Kunden zu jeder Maschine verbinden, den Service und kein hartcodierte Namen ausgeführt wird. Aber es sei denn, Sie zusätzliche Maßnahmen ergreifen, das ist Ressource-Failover - richtend Anforderungen von einer Instanz des Dienstes zu einem anderen. Converstaion Zustand ist in der Regel verloren. Wenn Ihre Dienste in eine Datenbank schreiben, dann sollte das auch geclustert werden, um auch reliabiity zu gewährleisten und sicherzustellen, dass Änderungen an den gesamten Cluster verfügbar ist, und nicht nur der lokale Knoten.

Das ist wirklich nur die Spitze des Eisbergs, aber ich hoffe, es gibt Ihnen Ideen auf die weitere Forschung zu beginnen.

Microsoft Clustering Service (MSCS)

Andere Tipps

Wenn Sie die Probleme, brechen Sie versuchen zu lösen, ich glaube, Sie wahrscheinlich mit ein paar Antworten kommen werde selbst. Als Justin im Kommentar erwähnt, gibt es keine eine Antwort. Es hängt ganz auf das, was Sie da tut und wie Kunden sie nutzen. Sie geben auch keine Details über die Client-Server-Interaktivität. HTTP? TCP? UDP? Andere?

Hier sind einige Dinge zu denken, Sie zu erhalten begonnen.

1) Was tun Sie, wenn der Dienst oder Server ausfällt?

  • Wie wäre es laufen mehr als eine Instanz von Ihren Dienst auf separaten Servern?

2) Ok, aber jetzt wie tun die Kunden über die mehrere Dienste wissen?

  • Sie können die Liste harte Code in jedem Client (nicht empfohlen)
  • Sie können über alle von ihnen DNS-Round-Robin zu Bounce-Anfragen verwendet werden.
  • Sie können ein Load-Balancing-Gerät verwenden.
  • Sie können einen separaten Dienst haben, über alle anderen Dienste kennt und Kunden verfügbaren Dienste richten kann.

3) Was also, wenn ein Dienst ausfällt?

  • Sie die Client-Anwendungen wissen, was zu tun ist, wenn der Dienst sie verbunden sind, zu untergeht? Wenn nicht, dann müssen sie aktualisiert werden, um diese Situation zu behandeln.

Das sollte man mit der Grundidee von den ersten Schritten, wie man mit hoher Verfügbarkeit, um loszulegen. Wenn Sie spezifische Informationen über Ihre Architektur zur Verfügung stellen, werden Sie wahrscheinlich eine viel bessere Antwort erhalten.

Wenn der Dienst aussetzen keine Schnittstelle für die Client-Verbindung können Sie:

  • Broadcast- oder belichten, um eine „Ich bin am Leben“ Nachricht oder ein Signal eine Datenbank / Registrierung / tcp / was auch immer, dass du lebt

  • Haben Sie einen zweiten Dienst (Monitor), dass die Kontrollen für diese Signale „Ich bin am Leben“ und versucht, den Dienst für den Fall neu zu starten ist es nach unten

Aber wenn Sie ein Client durch namedpipes mit diesem Dienst verbinden / tcp / etc, würde der Client die Adresse der Maschine zu überprüfen, mit dem Dienst in einer Datenbank ausgeführt wird, oder etwas ausgefallenere wie ein intelligenter Schalter umleiten Verkehr hat .

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