AppFabric Caching - Richtige Verwendung von DataCacheFactory und DataCache
Ich bin auf der Suche für die meisten performante Art und Weise zu arrangieren Nutzung der datacache und datacache Fabrik für AppFabric-caching-Aufrufe, die zwischen 400 und 700 cache bekommt pro Seite laden (und kaum legt). Es scheint, dass mit einer einzigen statischen DataCacheFactory (oder vielleicht ein paar in einer round-robin-setup) ist der Weg zu gehen.
Rufe ich GetCache("cacheName") für jeden DataCache-Objekt anfordern, oder mache ich eine statische damals DataCache factory initialisiert und verwendet, dass für alle Anrufe?
Muss ich die Ausnahmen behandeln, überprüfen Sie die fail-codes und versucht, Wiederholungen?
Muss ich beachten, Streit, wenn mehr als ein thread versucht, den cache-Speicher und will den gleichen Artikel (per Schlüssel)?
Gibt es irgendeine Art von Dokumentation, die ordnungsgemäß untersucht die Gestaltung und Nutzung dieser?
Einige Informationen, die ich gesammelt habe bisher aus dem forum:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
"Erstellen der Fabrik umfasst den Anschluss an die cluster und kann einige Zeit in Anspruch nehmen. Aber wenn man einmal das factory-Objekt und das cache, mit der Sie arbeiten möchten, Sie können einfach die Wiederverwendung dieser Objekte zu tun, versetzt und gelangt in den cache, und Sie sollten sehen, die wesentlich schnellere Leistung."
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
"Erstellung von Einzel-DataCacheFactory (singleton) ist mehr Leistung als das erstellen mehrerer DataCacheFactory. Sie sollten nicht DataCacheFactory für jeden Anruf, es wird performance-hit."
"Bitte versuchen Sie, Kapseln round-robin-Algorithmus (mit 3/4/5 factory-Instanzen) in Ihrer singleton und vergleichen Sie Last-test-Ergebnisse."
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
"Sie können erhöhen Sie die Anzahl der clients zu erhöhen, die cache-Durchsatz. Aber manchmal, wenn Sie wollen, um kleinere Kunden und den Durchsatz zu erhöhen, ein trick ist die Verwendung mehrerer DataCacheFactory-Instanzen. Die DataCacheFactory-Instanz erstellt eine Verbindung zu den Servern (e..g wenn es 3 Server, es werden 3 Anschlüsse) und bündelt alle Anforderungen aus dem datacaches auf diese verbindungen. Also, wenn der put/get-Volumen ist sehr hoch, diese TCP-verbindungen könnten beseitigt werden. Also eine Möglichkeit ist das erstellen mehrerer DataCacheFactory-Instanzen und verwenden Sie dann die Operationen auf Ihnen."
Hier, was in Verwendung ist so weit... die Eigenschaft aufgerufen wird und der Rückgabewert ist nicht null hat, wird ein Vorgang ausgeführt wird.
private static DataCache Cache
{
get
{
if (_cacheFactory == null)
{
lock (Sync)
{
if (_cacheFactory == null)
{
try
{
_cacheFactory = new DataCacheFactory();
}
catch (DataCacheException ex)
{
if (_logger != null)
{
_logger.LogError(ex.Message, ex);
}
}
}
}
}
DataCache cache = null;
if (_cacheFactory != null)
{
cache = _cacheFactory.GetCache(_cacheName);
}
return cache;
}
}
Sehen diese Frage auf Microsoft AppFabric-forum: http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f
InformationsquelleAutor der Frage CRice | 2010-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die Antwort von den forum-post:
InformationsquelleAutor der Antwort CRice
Nehme ich wirklich die Antwort sein sollte, versuchen Sie es in beide Richtungen und sehen, ob es einen großen Unterschied gibt, aber eine statische DataCache, scheint mir mehr Sinn machen, als ein entsprechender Aufruf
GetCache
für jeden Anruf zu Bekommen.Dass 'Schieben Client-Performance" Artikel legt nahe, dass es einen sweet spot, wo die Anzahl der DataCacheFactory-Instanzen bekommt man maximale Leistung über die der Speicher-overhead zu arbeiten beginnt, gegen Sie - es ist eine Schande, Sie nicht geben, keine Richtlinien (oder sogar eine Faustregel), wo dieser Ort sein könnte.
War ich noch nicht in jegliche Dokumentation, die auf Maximierung der Leistung - ich denke, AppFabric ist noch zu neu für diese Richtlinien wurden ausgeschüttelt noch. Ich habe einen Blick in den Inhalt für die Pro AppFabric-Buch, aber es scheint sehr viel mehr betroffenen in der Regel mit dem workflow (Dublin) Seite AppFabric-eher als die Zwischenspeicherung (Velocity) Stück.
Eine Sache würde ich aber sagen: gibt es irgendeine Möglichkeit für Sie, um cache 'Gröber' - Objekte, so können Sie weniger Anrufe zu
Get
? Könnten Sie cache-Sammlungen anstatt einzelne Objekte und dann entpacken Sie die Sammlungen auf dem client? 700-cache wird pro Seite geladen werden, scheint mir eine riesige Zahl!InformationsquelleAutor der Antwort PhilPursglove