2010-06-10 11 views
9

Frage dazu, wie die Cache-Funktion von AppFabric verwendet werden kann.Fragen zur Verwendung der Cache-Funktion von AppFabric

Ich entschuldige mich für eine Frage, die ich in der Lage sein sollte, aus der Dokumentation zu beantworten, aber ich habe gelesen und gelesen und kann diese Frage nicht beantworten, was mich glauben lässt, dass ich ein grundlegend fehlerhaftes Verständnis von was AppFabric haben Caching-Funktionen sind vorgesehen für.

Ich arbeite für eine geografisch verteilte Firma. Wir haben eine bestimmte Anwendung, die ursprünglich als Client/Server-Anwendung geschrieben wurde. Es ist so massiv und geschäftskritisch, dass wir es in eine bessere architektonische Lösung umwandeln wollen.

Eine der Ideen, die wir hatten, bestand darin, die App so zu konvertieren, dass sie ihre Daten mit WCF-Aufrufen an einen gemeinsam lokalisierten Webserver liest, der die Kommunikation mit der Datenbank in den USA zwischenspeichert. Die Art der Anwendung ist so, dass jeder dazu neigt, dieselben 2000 Datensätze oder so mit nur gelegentlichen Aktualisierungen zu sehen, und diese Aktualisierungen werden von einer begrenzten Gruppe von Benutzern gemacht.

Ich hoffte, dass der Cache-Mechanismus von AppFabric mir erlauben würde, einen globalen Cache einzurichten und wenn ein Benutzer in Asien zum Beispiel Daten anforderte, die nicht im Cache waren oder abgestanden waren, die der Webserver aus der Datenbank lesen würde Stellen Sie in den USA die Daten dem Benutzer zur Verfügung und aktualisieren Sie dann den Cache, der diese Daten an die anderen Webserver weiterleitet, damit sie nicht selbst zur Datenbank zurückkehren können.

Kann AppFabric auf diese Weise arbeiten oder soll ich nur die Server ihre eigenen Daten aus der Datenbank abrufen lassen?

Antwort

11

Also, wenn ich Sie richtig verstehe, Sie haben:

  • ein Datenbank-Server in den USA
  • Web-Server auf der ganzen Welt?
  • (potentiell) ein AppFabric-Cache in den USA

AppFabric gibt Ihnen möglicherweise zwei Möglichkeiten, dieses Szenario zu begegnen.

  1. Lokale Cache
    In einem AppFabric-Setup haben die Kunden die Möglichkeit, einen lokalen Cache von Objekten zu haben, wo der erste Aufruf an den Cache für ein Objekt, das Objekt im lokalen Cache platziert und nachfolgenden Anforderungen für die Objekt werden aus dem lokalen Cache erfüllt. Objekte werden entweder aufgrund eines Zeitlimits oder weil der Hauptcache den lokalen Cache benachrichtigt, dass das Objekt veraltet ist, aus dem lokalen Cache entfernt. Sie konfigurieren dies in Ihrem web.config:

    <dataCacheClient> 
        <localCache isEnabled="true" sync="NotificationBased" ttlValue="300" /> 
    </dataCacheClient> 
    

    In Ihrem Fall sind dann Ihre Webserver die Clients; Wenn einer Ihrer asiatischen Benutzer ein Objekt anfordert, würde der lokale Cache für den Asia-Webserver eine Kopie dieses Objekts enthalten. Aktualisierungen an diesem Objekt würden an den Hauptcache weitergegeben, und in einer auf Benachrichtigungen basierenden Einrichtung würden Kopien dieses Objekts in lokalen Caches auf den anderen Webservern für ungültig erklärt, so dass die nächste Anfrage vom Hauptcache und dann von der Der lokale Cache wird mit dem aktualisierten Objekt aktualisiert.

  2. Colocate den AppFabric-Cache auf den Webservern
    Es gibt nichts zu stoppen Ihre Webserver als AppFabric-Cache-Server! In dieser Konfiguration würden Sie den lokalen Cache nicht verwenden, da dies nicht sinnvoll ist, wenn der Hauptcache bereits lokal für Ihren Client ist.Dies würde jedoch sicherstellen, dass Ihr Client immer die neueste Version eines zwischengespeicherten Objekts aus dem Cache zieht.
    Sie müssen jedoch vorsichtig mit Netzwerklasten umgehen, da diese Konfiguration dazu führen kann, dass Ihr USA-Webserver immer zwischengespeicherte Objekte von (zB) Ihrem europäischen Webserver liest, was Ihre Server bei der Bereitstellung verlangsamen könnte Cache-Anfragen sowie Web-Traffic.

In beiden Fällen nicht vergessen, dass, während die Kunden die neueste Version des im Cache gespeicherten Objekt empfangen wird, gibt in AppFabric keine Ausdauer ist und Sie Ihre Änderungen an der Datenbank zur gleichen Zeit, wie Sie das Update müssen zwischengespeicherten Objekt, sonst besteht die Gefahr, dass veraltete Daten in den Cache gelesen werden.

+0

Phil, vielen Dank für Ihre (sehr detaillierte) Antwort. Dies hilft, sich so stark zu verfestigen. –

+3

Microsoft empfiehlt nicht, nicht dedizierte Hosts für AppFabric Cache-Knoten, insbesondere IIS-Hosts, zu verwenden, da Konflikte unter Last auftreten. – andrewbadera

+1

"Objekte werden entweder aufgrund eines Zeitlimits oder weil der Hauptcache den lokalen Cache benachrichtigt, dass das Objekt veraltet ist, aus dem lokalen Cache entfernt." - Die lokalen Caches kontaktieren jedoch die Hauptcaches basierend auf einem Abfrageintervall (standardmäßig 300 Sekunden). Alle Änderungen an einem Objekt im Hauptcache zwischen den Abfragen werden von den lokalen Caches nicht übernommen. Daher werden sie nach Aktualisierungen des Hauptcaches kurzzeitig Stand-Kopien ausgeben. – redcalx

Verwandte Themen