Wir haben es mit einem interessanten Problem bei StackOverflow zu tun.
Wir haben eine ganze Reihe kleiner Aufgaben, die bald erledigt werden müssen. Ein Beispiel ist das Aktualisieren von Listen mit verwandten Fragen. In der Vergangenheit haben wir diese Aufgaben auf die Seitenladevorgänge einiger Benutzer übertragen.
Das war nie ideal, aber es war nicht wirklich auffällig. Jetzt, da SO das 1.000.000-Fragezeichen überschritten hat, spüren es die unglücklichen Benutzer.
Die natürliche Lösung besteht darin, diese Aufgaben tatsächlich in den Hintergrund zu rücken. Ich habe zwei Möglichkeiten, dies zu tun.
1. In IIS als benutzerdefinierter Thread-Pool / Work-Queue
Grundsätzlich drehen wir einige Threads (nicht ThreadPool , um IIS nicht zu beeinträchtigen) und lassen sie einige Sammlungen bedienen, in die wir Funcs schieben .
Der große Vorteil hier ist die Einfachheit. Wir müssen uns nicht darum kümmern, etwas zu organisieren, und wir müssen auch nicht sicherstellen, dass ein externer Dienst verfügbar ist und reagiert.
Wir erhalten auch Zugriff auf alle unsere gemeinsamen Codes.
Der Nachteil ist, dass wir keine Hintergrund-Threads verwenden sollten. Die Einwände, die ich kenne, beziehen sich alle auf das Verhungern von IIS (wenn Sie ThreadPool verwenden) und auf das zufällige Absterben der Threads (aufgrund des AppPool-Recyclings).
Wir haben eine vorhandene Infrastruktur, um den zufälligen Thread-Tod zu einem Nicht-Problem zu machen (es ist im Grunde genommen möglich, einen abgebrochenen Task zu erkennen), und die Anzahl der Threads zu begrenzen (und Threads zu verwenden, die keine ThreadPool-Threads sind) ist ebenfalls nicht schwierig.
In StackOverflow verschoben , da es hier nicht wirklich angesprochen wurde.
2. Als Dienstleistung
Entweder eine Lösung von Drittanbietern oder eine benutzerdefinierte.
Grundsätzlich würden wir eine Aufgabe über die Prozessgrenzen hinweg auf einen Dienst verlagern und dies einfach vergessen. Vermutlich verknüpfen wir Code oder beschränken uns auf unformatiertes SQL + eine Verbindungszeichenfolge.
Der Profi ist, dass es der "richtige Weg" ist, dies zu tun.
Die Nachteile sind, dass wir entweder sehr eingeschränkte Möglichkeiten haben oder ein System ausarbeiten müssen, um diesen Service mit unserer Codebasis synchron zu halten. Wir müssen auch alle unsere Überwachungs- und Fehlerprotokollierungen irgendwie einbinden, die wir mit der Option "In IIS" kostenlos erhalten.
Gibt es weitere Vorteile oder Probleme mit dem Serviceansatz?
Kurz gesagt, gibt es unvorhergesehene und unüberwindbare Probleme, die Ansatz 1 unbrauchbar machen, und wenn ja, gibt es gute Dienste von Drittanbietern, die wir nach Ansatz 2 suchen sollten?