2016-09-27 6 views
2

Wir haben mehrere IIS-Webserver mit Lastenausgleich für unsere Anwendung, die von einer MS SQL-Serverdatenbank unterstützt werden. Wir speichern Anwendungskonfigurationsinformationen in der Datenbank. Während die Anwendung läuft, ändere ich häufig die Konfiguration und die Änderungen müssen an die anderen Webserver weitergegeben werden. Gibt es einen guten Weg, dies zu tun? Ich habe es über SignalR getan (um anderen Servern eine Änderung mitzuteilen und sie sollten ihre Konfiguration aktualisieren), aber SignalR ist nicht immer zuverlässig und manchmal bekommt ein Server die Nachricht nicht. Gibt es eine bessere Lösung?Synchronisieren von IIS-Webserverkonfigurationen

Danke

+0

haben Sie versucht Node.Js + Socket.IO? –

+1

@vishwaratna Gibt es irgendeinen Grund, warum du einen komplett anderen Tech-Stack als SignalR empfehlen würdest, der das gleiche im bestehenden Tech-Stack macht? –

Antwort

0

Aktualisiert

Ich verstehe, was Sie jetzt brauchen eine Anwendungsebene Konfigurationsänderung zu propagieren.

Sie könnten, wie Sie erwähnt haben, SignalR verwenden. Dies würde erfordern einen zentralen Server, der die Websocket-Verbindungen hostet, aber hat den Vorteil, "Instant".

Alternativ, wenn Ihre Anforderungen einfach sind, würde vielleicht ein kurzfristiger In-Memory-Cache ausreichen.

Wenn es komplex ist, würde ich empfehlen, in Ereigniswarteschlangen (MSMQ, RabbitMQ) zu suchen. In diesem Modell veröffentlicht die Instanz, die die Konfiguration ändert, ein Ereignis in die Warteschlange, das von den anderen Instanzen in einem Hintergrundthread verwendet werden kann.

Original-Antwort

Microsoft Web Deploy wurde gebaut, dies zu tun. Es unterstützt das Synchronisieren von Standorten über mehrere Server hinweg, sogar bis hin zu Einstellungen für den Anwendungspool und SSL-Zertifikaten.

Die IIS-Dokumentationswebsite enthält eine spezifische Seite, die für Ihren Anwendungsfall relevant ist: Synchronize IIS.

Es gibt eine Menge bei der Konfiguration von Web Deploy beteiligt, damit ich nicht alles hier zu erklären versuchen, aber für die Nachwelt Gründe den Befehl einen lokalen Standort zu einem entfernten Rechner wäre zu synchronisieren:

msdeploy.exe -verb:sync 
      -source:apphostconfig="Default Web Site" 
      -dest:apphostconfig="Default Web Site",computername=Server1 

(Der Befehl wurde mehrere Linien zur besseren Lesbarkeit aufgeteilt über)

Als einen völlig alternativen Ansatz, könnten Sie auch ein „Pull-Konfiguration“ System wie Powershell Desired State Configuration oder Chef verwenden.

+0

Wenn ich es richtig verstehe, würde dies die erste Server/IIS-Konfiguration synchronisieren, was im Moment kein Problem ist (obwohl ich in die Straße schauen muss). Mein Problem ist jetzt ein Benutzer ändert eine Konfiguration (die in der Datenbank gespeichert ist) und der Server, der die Änderung erhalten hat, ist der Änderung bewusst, aber ich muss die anderen Webserver der Konfigurationsänderung melden (ohne IIS neu zu starten) – jwerfel

+0

@ jwerfel Aktualisiert meine Antwort. –

+1

Danke für die Antwort @ richard-szalay, für jetzt denke ich, dass ich bei SignalR bleiben werde, da wir nur ein paar Webserver haben, aber ich werde in die Verwendung fortgeschrittener sogar Warteschlangen schauen. – jwerfel

Verwandte Themen