2010-11-21 9 views
0

Ich arbeite an einem System, das aus einer Kette von Datentransformation Komponenten besteht. Jede dieser Komponenten führt eine sehr einfache Aufgabe für ein Objekt durch, bevor sie an die nächste Komponente in der Kette übergeben wird. Jede dieser Komponenten wird als Windows-Dienst ausgeführt. Ich habe das System auf diese Weise entwickelt, um die Wartung zu verbessern und die zukünftige Erweiterbarkeit zu unterstützen.Schnelle, effiziente Interprozessing Messaging

Im Moment übergebe ich diese Objekte zwischen den Komponenten mit Message Queuing, aber das wird schnell zu einem Problem. Es gibt wahrscheinlich Dutzende von Diensten, die ständig Nachrichtenwarteschlangen lesen und in sie schreiben. Wie ich es verstehe, werden alle Nachrichten serialisiert und auf die Festplatte geschrieben, was in meinem System, wo der Durchsatz sehr schnell ist, sehr verschwenderisch erscheint.

Gibt es noch andere etablierte Systeme, die ich für die Kommunikation zwischen den Prozessen verwenden könnte, die den Aufwand für kontinuierliche Lese- und Schreibvorgänge vermeidet?

Danke.

Antwort

1

Wenn Sie keine garantierte zuverlässige oder transaktionale Nachrichtenübertragung benötigen, sollten Sie die Leistung unter System.Messaging deutlich verbessern können, indem Sie Ihre Message.Recoverable-Eigenschaften auf false setzen. Übrigens ist dies bereits falsch, daher ist Ihre Annahme zur Festplattennutzung möglicherweise nicht korrekt, vorausgesetzt, die ursprüngliche Lösung verwendet MSMQ.

Typ: System.Boolean

true, wenn die Zustellung der Nachricht gewährleistet ist (durch die Nachricht auf dem Datenträger gespeichert, während en Strecke); falsch, wenn die Lieferung nicht gewährleistet ist. Der Standardwert ist falsch.

Die beste Lösung hängt von den Anforderungen Ihres Dienstes ab. Sie können dies möglicherweise verwenden, oder Sie benötigen möglicherweise einen Dienstbus mit extrem niedriger Latenz (normalerweise ein kommerzielles Produkt) oder etwas dazwischen, das Sie selbst erstellen.

+0

Ich verwende die Standardeinstellungen, so wird dies in meinem aktuellen System falsch sein. – Barg

+0

Was bringt Sie dann dazu zu denken, dass alles auf die Festplatte geschrieben wird? –

+0

Eine Annahme. Ich begann tatsächlich, eine Nachrichtenwarteschlangenimplementierung zu entwickeln, die so viele Objekte im Speicher speichert, bevor entschieden wird, sie auf die Platte zu schreiben (z. B. wenn der 'Ziel' Dienst offline geht). Die Objekte werden über eine Named Pipe von der Quelle an den 'Server' gesendet und vom Ziel über eine andere Named Pipe gelesen. Dies war im Durchschnitt 3x schneller als MSMQ. Ich mag es jedoch nicht, das Rad neu zu erfinden, wenn es nicht nötig ist, also habe ich auf eine bestehende Lösung gehofft, wenn es eine gibt. – Barg

1

ZeroMQ ist eine Nur-Speicher-Warteschlangenimplementierung.