2010-02-22 8 views
5

Wir haben mehrere Möglichkeiten für die Anmeldung in unserer .NET (C#) Server-Anwendung. Wir werden die Enterprise Library verwenden. So, hier sind die Möglichkeiten zu gehen:Performance-Vergleich für die Protokollierung in MSMQ/Textdatei/Datenbank

1) Protokoll in MSMQ synchron schreiben, dann lesen MSMQ mit Win Service. Die Warteschlange befindet sich auf dem lokalen Computer für die Serveranwendung.
2) Protokoll auf Platte schreiben (d. H. Textdateien rollen) synchron.
3) Schreiben Protokoll in Datenbank (Oracle, in unserer Anwendung) synchron.

Log-Menge könnte ziemlich hoch sein. Also welcher ist der leistungsfähigste? Ich schätze, Bestellung ist 1, 2, 3. Habe ich Recht? Gibt es in diesem speziellen Szenario außer der Schreibgeschwindigkeit noch einen anderen Leistungsfaktor? Gibt es andere Möglichkeiten, auf die ich hier nicht hingewiesen habe, könnte das besser sein?

Antwort

4

, ohne die Bedürfnisse in Bezug auf der Protokollierung der Anwendung zu hören:

habe ich das Gefühl, dass das MSMQ Logging-Szenario für das Problem ein bisschen eines großen Hammers ist.

MSMQ wird definitiv schneller sein, da Ihre Anwendung ein Netzwerk-Kommunikationsprotokoll verwenden wird, anstatt mit Festplatten-Latenz und DB-Verbindungserstellung zu arbeiten. & Abbau. Wenn MSMQ jedoch die Festplatte verwendet, ist die Verstärkung wahrscheinlich vernachlässigbar. Dann ist die Frage, ob diese MSMQ-Ziel-/Zielwarteschlange auf dem lokalen Rechner ist.

-Stick mit dem Disk-Logging

Erwägen mit der Protokollierung in eine Datei auf der Festplatte mit entsprechendem Rollovers (Tag/Stunde je nach Bedarf) kleben. Es gibt einige Problemumgehungen, wenn Sie SUPER mit Spindeldrehzahlen beschäftigen - denken Sie daran, diese Protokolldateien auf eine RAM-Disk zu schreiben. Haben Sie dann einen Prozess, um diese Dateien regelmäßig aus dem Arbeitsspeicher und auf die Festplatte zu kopieren, wie Sie es für richtig halten.

Messen Sie Ihre Logging Performance-Anforderungen

Cue die Witze über vorzeitige Optimierung. Messen und erneut messen. Sie werden einfach nicht wissen, was Sie brauchen, bis Sie wissen, wie gut Ihre Lösung funktioniert. Berücksichtigen Sie, dass Sie wahrscheinlich über 10.000-RPM-Spindles verfügen und dass eine Datenträgerprotokollierungslösung wahrscheinlich eine angemessene Leistung erbringt. Ein bisschen YAGNI könnte sich einschleichen, wenn die Entscheidung darin besteht, zu der komplexen Lösung einer "ausgelagerten" Komponente wie MSMQ oder einem Datenbank-Write zu springen. Ich sage das mit deinen angegebenen Bedürfnissen um Geschwindigkeit.

+0

Hallo, danke für die Antwort. Aktualisierte Frage bezüglich "MSMQ Ziel-/Zielwarteschlange". – rovsen

1

Ich denke, Sie sollten "Protokoll in Datenbank asynchron schreiben" betrachten. für jedes Element, das Sie protokollieren möchten, wird es in den Speicher eingereiht und ein separater Thread wird in die Datenbank geschrieben. Es ist sinnlos, die Hauptanwendung darauf zu warten, dass die Protokollierung abgeschlossen wird, vorausgesetzt, die Reihenfolge der Protokollierungsnachrichten wird durch den Warteschlangenmechanismus aufrechterhalten.

Haben Sie sich auch log4net angesehen? Es enthält zahlreiche Protokollierungsoptionen einschließlich einer leistungsstarken rotierenden Protokoll auf Platte, UDP-Protokollierung, ....

Sie können auch Splunk als eine Möglichkeit, Ihre Protokolldateien suchen, nachdem Sie sie suchen.

1

Ihr Ranking von MSMQ, Datei und DB sollte in typischen Situationen korrekt sein.

Ich weiß, dass Sie über die Leistung besorgt sind, aber ich habe noch ein Szenario in einer Geschäftsanwendung, wo ich den verwendeten Protokollierungsmechanismus bedauert habe.Im Vergleich zu der Zeit, die für die Ausführung der Geschäftslogik aufgewendet wurde, war die Zeit für die Protokollierung nicht nur von Bedeutung.

Wenn Sie sich wirklich Gedanken über die Leistung machen, sollten Sie auch andere Optionen neben Enterprise Library untersuchen. z.B. log4net ist historisch schneller gelaufen.

Neben der Leistung würde ich auch andere Anforderungen berücksichtigen. z.B. Müssen Sie die Protokolle melden oder abfragen? Benötigen Sie ein zentrales Protokoll-Repository (oder wäre es nützlich)? Wenn die Antworten auf eine dieser Fragen ja sind, würden Sie wahrscheinlich mit einer Datenbank oder MSMQ gehen wollen, die eine Datenbank einspeist.

Andere Überlegungen können bestehende Implementierungen oder Standards sein, Gesamtlösungskomplexität (MSMQ> Datei), Unterstützbarkeit der verschiedenen Optionen (z. B. möchten Sie MSMQ möglicherweise nicht verwenden, wenn keine operativen Kenntnisse vorhanden sind).