2009-02-20 7 views
5

Wir haben 22 HTTP-Server, die jeweils eigene ASP.NET-Caches ausführen. Sie lesen von einer Nur-Lese-DB, die nur außerhalb der Stoßzeiten aktualisiert wird.Wer verwendet Memcached mit ASP.NET in einer verteilten Farm?

Wir verwenden eine Dateiabhängigkeit, um den Cache ungültig zu machen und die Server aufzufordern, ihre Caches neu zu erstellen ... Wenn dies zu Spitzenzeiten geschieht, besteht die Gefahr, dass unser DB-Cluster wegen der plötzlichen Überschwemmung herunterkommt Verbindungen.

Hat jemand memcached mit ASP.NET in dieser verteilten Form verwendet? Es scheint mir, dass es einen großen Vorteil bieten würde, nur einen Cache aufzubauen (und die DB 21 mal weniger zu treffen), während memcached das Verteilen auf jede Box übernehmen würde.

Wenn Sie haben, legen Sie es in der gleichen Box wie die HTTP-Felder, oder führen Sie eine separate Cache-Ebene? Wie gut skaliert es, können wir erwarten, dass es leistungsfähige Server braucht? Unser Arbeitsdatensatz ist nicht riesig (Wir haben ihn in 4 Gigabyte Speicher auf jeder HTTP-Box in Ordnung gebracht).

Wie behandeln Sie die Ungültigkeitserklärung?

Auf der Suche nach Erfahrungen und Kriegsgeschichten.

EDIT: Win2k3, IIS6, 64-Bit-Server ... 4 Gigs pro Box (ich glaube, wir haben es auf 16 Gigs erhöht, wenn wir auf 64-Bit-Server geändert haben).

Antwort

5

"Memcached behandeln würde es auf jedes Feld der Verteilung von"

Memcached einen Cache in einer Memcached Farm zu jeder Box nicht verteilen oder replizieren. Der memcached-Client hashediert im Grunde den Schlüssel und wählt einen Cache-Server basierend auf diesem Hash aus. Wenn einer der Memcached-Server fehlschlägt, gehen alle zwischengespeicherten Elemente auf diesem Server verloren. Der Client erkennt jedoch den Fehler und beginnt mit dem Schreiben von Werten auf einen anderen Server. Wenn dies der Fall ist, muss Ihr Code fehlende Elemente im Cache berücksichtigen und bei Bedarf zurücksetzen.

Dieser Artikel beschreibt die Memcached-Architektur im Detail: How memcached works.

+0

Danke, ich habe gerade eine Stunde damit verbracht, alles auf dieser Seite zu lesen. – FlySwat

1

Haben Sie sie nicht zusammen verwendet, aber ich habe sie beide in separaten Projekten verwendet.

Zuletzt sah ich die Dokumentation explizit gesagt, dass die Freigabe mit dem Webserver in Ordnung war.

Memcache braucht wirklich nur RAM und wenn Sie Ihren asp.net Cache aus der Gleichung herausnehmen, wie viel RAM ist Ihr Webserver tatsächlich? Wahrscheinlich nicht viel. Es wird nicht viel mit Ihrem Webserver für CPU konkurrieren und es braucht überhaupt keine Festplatte. Sie könnten in Erwägung ziehen, den Netzwerkverkehr (falls noch nicht geschehen) von eingehenden Webanforderungen zu trennen.

Es funktionierte gut und war schnell Ich hatte keine Probleme damit.

Oh, die Ungültigkeitserklärung war explizit auf dem Projekt, auf dem ich es verwendet habe. Nicht sicher, welche anderen Modi es dafür gibt.

2

Best Practice (nach der Memcached-Site) ist Memcached auf der gleichen Box wie Ihre Web-Server-App laufen oder sonst Sie http-Aufrufe (was nicht so schlimm ist, aber es ist nicht optimal). Wenn Sie einen 64-Bit-App-Server betreiben (was Sie wahrscheinlich tun sollten, wenn Sie memcached ausführen), können Sie jeden der Server mit sehr viel Arbeitsspeicher laden und er wird für memcached verfügbar sein. CPU-Ressourcen, die von memcached verwendet werden, haben nicht viel zu bieten. Wenn also Ihr aktueller App-Server nicht sehr besteuert wird, bleibt dies auch so.

0

Wert auschecken Velocity, die ein verteilter Cache von Microsoft bereitgestellt wird. Ich kann Ihnen keinen Punkt-für-Punkt-Vergleich zu Memcached geben, aber Velocity ist in ASP.NET integriert und wird weiterhin mehr Entwicklung und Integration erhalten.

1

Wenn Sie Replikation über Ihre memcached-Server erhalten möchten, dann lohnt sich vielleicht ein Blick auf repcached. Es ist ein Patch für Memcached, der den Replikationsteil behandelt.

Verwandte Themen