Ich bin gerade dabei, eine ASP.NET MVC-Webanwendung in C# zu erstellen.Erstellen einer skalierbaren ASP.NET MVC-Webanwendung
Ich möchte sicherstellen, dass diese Anwendung so gebaut wird, dass sie in der Zukunft skaliert werden kann, ohne dass ein größeres Re-Factoring erforderlich ist.
Ich bin ziemlich scharf darauf, eine Art von Warteschlange zu verwenden, um alle Schreibvorgänge in meine Datenbank zu buchen und einen Prozess zu haben, der diese Warteschlange asynchron abfragt, um das Update durchzuführen. Sobald diese Daten in die Datenbank zurückgeschrieben wurden, muss der Client mit den neuen Informationen aktualisiert werden. Dies hat zur Folge, dass der Prozess zum Zurückschreiben der Daten in die Datenbank aufgrund von Geschäftsregeln, die auf dem Server ausgeführt werden, eine kurze Zeit in Anspruch nehmen kann.
Meine Frage ist, was wäre der beste Weg, um das Update aus der Perspektive Client \ Browser zu behandeln.
Ich denke entlang der Linien der Entsendung der Daten zurück auf den Server und Hinzufügen der Daten in die Warteschlange und sofort eine Antwort an den Client senden, dann mit einer Frequenz abfragen, um die aktualisierten Daten zu erhalten. Irgendwelche Best Practices oder Muster hierzu würden geschätzt werden.
Auch in Bezug auf das Lesen von Daten aus der Datenbank würden Sie vorschlagen, bestimmte Techniken zu verwenden oder würde lesen direkt aus db ausreichend sein, mein Szenario gegeben.
Update Ich dachte, ich würde ein Update auf diesem, wie es schon eine Weile ist. Wir haben tatsächlich Windows Azure verwendet, aber die Lösung ist auch für andere Plattformen geeignet.
Wir haben die Windows Azure-Warteschlange verwendet, um Nachrichten \ Befehle zu veröffentlichen. Dies ist ein sehr schneller Prozess und kehrt sofort zurück. Wir haben dann eine Worker-Rolle, die diese Nachrichten in einem anderen Thread verarbeitet. Dies ermöglicht es uns, db writes \ updates auf der Web-Rolle in der Theorie zu minimieren, was es uns erlaubt, leichter zu skalieren.
Wir behandeln den Benutzer per E-Mail oder sogar im Hintergrund, je nachdem, um welche Art von Daten es sich handelt.
Meine erste Frage mit dieser würde sein, warum möchten Sie Ihre Datenbank schreibt asynchron, wenn Sie dann Ihre Benutzer warten auf die Ergebnisse geschrieben werden? –
Mein Problem ist, dass es möglicherweise eine Geschäftsregel gibt, die für einen bestimmten Zeitraum ähnlich einem db-Trigger ausgeführt wird. Während dies für eine kleine Anzahl von Benutzern in Ordnung sein könnte, sehe ich dies als einen Flaschenhals, der möglicherweise dazu führen könnte, dass Benutzeranforderungen auf dem Client auslaufen, was ich vermeiden möchte. – gsobocinski