Dieser Artikel wurde maschinell übersetzt.

Vorhersage: Bewölkt

Zwischenspeicherung in einer Rolle in Windows Azure

Joseph Fultz

 

Joseph FultzDie alte Vorstellung, dass Glück die vorbereiteten begünstigt soll die Idee zu vermitteln, dass egal wie glücklich Sie sind, Sie vorbereitet um das Glück Vorkommen zu nutzen müssen. Ich habe oft gedacht, dass diese Aussage beschreibt ziemlich genau Zwischenspeichern. Wenn Sie Glück haben, für das Universum, so mit dem hohen Nutzung Ihrer Website und Dienstleistungen auszurichten sind, würden Sie besser vorbereitet sein, den Inhalt schnell zu dienen.

Im Januar habe ich einige Konzepte in Bezug behandelt auf Zwischenspeichern, die sich eher taktisch auf einigen Kodierung der Ansätze (msdn.microsoft.com/magazine/hh708748). Mit dem Zusatz der engagierten und co-located Rollen für das Windows Azure Zwischenspeichern (Vorschau), die ich hier als Vorschau einfach Zwischenspeichern beziehen werden Zwischenspeichern, glaubte ich, dass es wäre sinnvoll zu prüfen, wie diese Rollen als Teil der Gesamtarchitektur der Projektmappen verwenden. Das wird keine vollständige Abdeckung von Zwischenspeicherungsfeatures sein; Stattdessen hat es soll eine Designeransicht was zu tun mit den großen Blöcken.

Ein Cache unter jedem anderen Namen...

... ist nicht das gleiche. Sicher, die Backend-Implementierung ist ziemlich ähnlich, und seine Vorläufer Windows Azure Shared Zwischenspeichern, Caching-Vorschau wird bewegen, wie die Daten, die Sie in den lokalen Cache-Client abrufen. Noch wichtiger ist, obwohl Caching-Vorschau einige Funktionen fehlen aus dem Shared Cache stellt, also die Umstellung auf rollenbasierte Zwischenspeichern nicht nur erweitert die verfügbaren Feature-Set, es gibt Sie auch bessere Kontrolle über die Bereitstellungsarchitektur. Um zu starten, lassen Sie uns klären der Hauptunterschied zwischen den engagierten und co-located Rollen: durch die Konfiguration.

Wenn Sie die Cache-Knoten konfigurieren, haben Sie die Möglichkeit die gesamte Rolle in den Cache zu widmen oder nur einen Prozentsatz der Rolle abgesehen. Nur als eine Möglichkeit, schnell das Reservieren von RAM für den co-located Cache prüfen, schauen Sie sich Abbildung 1, aus denen hervorgeht, nutzbare RAM nach der Cache-Reservierung bleibt. (Beachten Sie, dass die co-located Option nicht in der X-Small-Instanz verfügbar ist.)

Abbildung 1 verbleibenden RAM

Oft ist der erste Gedanke einfach einige mittlere oder kleine Größe wählen und einige Größe des Speichers reserviert. Solange die Größe des Arbeitsspeichers für den vorgesehenen Verwendungszweck und innerhalb der Grenzen des verfügbaren RAM ausreichend ist, ist dies ein feiner Ansatz. Jedoch, wenn die Anzahl der Objekte hoch und es ist eine vernünftige Erwartung, dass der Cache-Client auf jedem Computer die maximale Anzahl von Objekten abhalten könnte, das Ergebnis unerwarteter Speicherdruck könnte. Darüber hinaus könnte zu wenig-Cache-RAM zu unerwünschten Cache Räumungen, reduzieren die Gesamteffizienz des Caches.

Abbildung 2 zeigt den Prozentsatz der RAM-Nutzung basierend auf der virtuellen Maschine (VM) Größe. Das Diagramm basiert zum einen auf msdn.microsoft.com/de-de/library/hh914152, das zeigt der Größe des Arbeitsspeichers für die Zwischenspeicherung im dedizierten Modus verfügbar.

Abbildung 2 Cache Konsum für dedizierte Rolle

Größe des virtuellen Computers Verfügbaren Speicher für die Zwischenspeicherung % der RAM-Nutzung basierend auf virtuelle Maschinengröße
Small (Klein) Ca. 1 GB 57%
Medium (Mittel) Ca. 2,5GB 57%
Groß Ca. 5,5GB 79%
XL Ca. 11GB 79%

In meinem co-located Raster (Abbildung 1), ich habe nicht 40 prozentuale Zuteilung für den Sendern Typ hinausgehen, weil ich annahm, ich müsste eine Mehrheit der Arbeitsspeicher für die Anwendung. Im Vergleich dazu die dedizierte Version normalerweise bietet mehr RAM, aber scheint, maximalen Effizienz der RAM Zuteilung der VM-Größe zu schlagen. In diesem Sinne sind zwei mittlere VMs weniger nützlich als ein großer. Natürlich kann eine große Instanz mit Optionen wie Hochverfügbarkeit (HA), die Ihre Daten dupliziert, die Sie in Ihrer Zwischenspeicherung Infrastruktur vielleicht nicht helfen. Dennoch lohnt es wiegen die Bedürfnisse des Raumes gegen die Notwendigkeit für Redundanz und wählen Sie eine Konfiguration, die nicht nur die technische Anforderungen erfüllt, sondern optimiert auch die Kosten.

Wenn Zwischenspeicherung gezielt, eine RAM-Dürre in der Regel gemacht wird, ist kein Problem. Allerdings ist in Fällen, wo der gemeinsame Cache verwendet wird, Sitzungsobjekte und/oder der Ausgabecache sichern, die Situation ein bisschen schwieriger wegen der Tendenz zur Verwendung von Sitzung für alles und die Schwierigkeiten bei der Vorhersage von genauen laden. Beispielsweise wenn Sie eine Model-View-Controller-Anwendung ausführen, die Tiefe Modelle hat Sie in Sitzung platziert sind und erhöhen Sie die maximale Anzahl von Objekten für den Cache-Client, treten möglicherweise unerwünschte Ergebnisse Mittel oder höher ausgelastet. Dies würde Oberfläche als langsamer Website-Leistung durch Entfernungen aus dem gemeinsamen Cache von Speicherdruck erwarten Sie nicht verursacht; vergessen Sie nicht, der Cache-Client wahrscheinlich mehr RAM als erwartet durch die Kombination von eine erhöhte maximale Objektanzahl und ein Tiefe Diagramm hält. Rahmen hilft Sie heraus ein wenig durch die serialisierte Objekte komprimieren, aber für solch eine wertvolle und endliche Ressource als RAM, Sorgfalt bei der Buchhaltung ist die bewährte, besonders beim versuchen, den RAM unter Anwendung, Ausgabecache, Sitzungsobjekte, Data-Cache und Cache-Client zu teilen. Hilfe bei der Dimensionierung Ihrer Caches, hat Microsoft veröffentlicht die Capacity Planning Guide-Kalkulationstabelle Sie unter finden msdn.microsoft.com/library/hh914129.

Bereiche

Regionen hinzufügen einige nette Funktionen, aber zu einem Preis. Die Kosten sind, dass die Region fixiert ist, auf einem einzigen Server zwingen alle Anforderungen für Objekte in der Region um durch diesen Cache-Host beseitigt werden, wenn es nicht in den Cache-Client gespeichert ist. Der Vorteil ist, dass Regionen mit Tag-Funktion bietet. Meine bevorzugten Regionen wird zum pre-fetched Referenzdaten zu halten. Dies könnte scheinen Torheit anfangs wegen dem Engpass-Problem, aber mal sehen.

Die Cache-Nutzung zu betrachten, nehmen wir postulieren, dass ich einen Katalog von 10.000 Produkte mit bis zu acht Varianten für jedes Produkt, haben also einen umfassender Katalog potentiell 80.000. Wenn jedes Objekt, das ein Element 1 K Durchschnitt, das ist ca. 82 MB zu mischen um für jede Anforderung, sowie Platz im Cache Client. Darüber hinaus werden eine Anzahl von virtuellen Kataloge entweder eine vollständige Kopie oder Teilmenge des Originals, also ich konnte am Ende mit einer Explosion von Referenzdaten über, gemischt werden alle serviert durch die einzige Region-Host (siehe Abbildung 3).

Cache Layout with a Single Region
Abbildung 3 Cache Layout mit einer einzigen Region

Mit ein wenig Arbeit erstelle ich weitere Regionen Unterabschnitte der Daten zu halten. Beispielsweise könnte ich meinen Katalog in Abteilungen oder Segmente aufteilen. Ich könnte, z. B. Erstellen einer Region für Konsumgüter und eine für professionelle Produkte, was zu etwas wie was gezeigt wird, in Abbildung 4.

Cache Layout with Two Regions
Abbildung 4 Cache-Layout mit zwei Regionen

Dies bietet ein wenig mehr Granularität im Cache, das Aktivieren der Verwendung von kleineren Rollen zu halten alle meine Cacheobjekte, Cache-Aktuelles zu erleichtern und Verkehr zu verringern, die Abfragen auf jede Rolle reduzieren und durch den Einsatz von Tag Abfragen filtern.

Die Fähigkeit, Tag-Inhalt ist die Hauptfunktion die Verwendung von Regionen fahren. So kann ich den Inhalt in meine Kataloge Marke; bei Computern z. B. hätte Markierungen wie z. B. ich: "Laptop" "4 GB," "8 GB," "15 Zoll", "HD-Audio", "Desktop" und So weiter. Auf diese Weise kann ich mit einen Aufruf einer der Methoden GetObjectsByTag UI Elemente wie eine facettierte Produktsuche für Navigation aktivieren. Es bedeutet auch, den Datenzugriff reengineering layer und in einiger Hinsicht Behandlung den Cache mehr als primären Daten Quelle, durch die die Abfragen auf die Facetten (Tags) der Daten zufrieden sind.

Eine interessante Möglichkeit, dieses Feature nutzen soll, Windows Azure Storage Tabellen als Backend-Datenspeicher, verwenden aber Pre-Fetch Daten, taggen und nimm sie in den Cache. Dies bietet einige der Filterung fehlt in der aktuellen Inkarnation von Tabellen unter Beibehaltung von Kosten auf ein Minimum.

Mit Regionen bietet viel Flexibilität beim Abrufen von zwischengespeicherte Daten, aber merken Sie die spezifische Art der Belastung, die es auf die Bereitstellungsinfrastruktur platziert. Dennoch sind die Regionen praktisch als Mittel zur Pre-Fetch und Referenzdaten zugreifen.

Hohe Verfügbarkeit

Es ist eine lustige Sache mit HA-Caches zu betrachten — Sie verwenden einen HA-Cache vorsichtig sein, aber Sie müssen darauf achten, dass bei der Verwendung von HA. Zumindest müssen Sie entsprechend nachdenklich darüber, was wirklich hoch verfügbar sein werden.

Da jede Rolle aktiviert zur Duplizierung des Speicherplatzes benötigt für die eigentlichen Objekte verdoppelt, führen Sie aus RAM wesentlich schneller. So als eine Frage des Designs ist es am besten verwenden HA nur für jene Eigenschaften, die es wirklich brauchen oder, die UX um Kosten nicht willkürlich hochtreiben oder künstlich auszulösen Cache Räumungen durch Speicher verhungern infolge exzessiven Verbrauch von duplizierten Cache erheblich verbessern würde.

Ich habe einige Hinweise, die vermuten lässt, schlägt Sitzungsobjekte in den HA-Cache also Sie Abfragen können über Benutzer in aktive Sitzungen basierend auf bestimmte Tag-Werte. In den meisten Fällen wäre dies keine sinnvolle Vorgehensweise, wie es ungerechtfertigt die Last verteilt, wenn Sie Sitzungsobjekte aus Cache abrufen; Diese Auslastungsmuster sollten stärker dem Load-balancing der Website befolgen. Da Sie auch viele leere anonyme Profile neben identifiziert registrierter Benutzer möglicherweise, Tag-basierte Suche nach Auftraggebern als Benutzerprofile sind eigentlich mehr einschränkender als hilfreich.

Ich schlage vor, Sie setzen Benutzerobjekte, Sitzungen, Ausgabezwischenspeicherung und dergleichen in ihre eigenen benannten Caches, aber nicht für die Vervielfältigung ermöglichen. In Fällen wo bearbeiten Daten an eine Sitzung gebunden ist, Sie sollten sichern die Sitzung mit einem HA-Cache je nachdem, wo Sie im Lebenszyklus der Anwendung sind. Wenn die app noch wird entworfen und erstellt, ist es besser, diese in-Situ-Zustand-Objekte zu trennen und sie in einen HA-Cache außerhalb der Sitzung. Damit können Sie die Daten bearbeiten eines Benutzers über die Sitzung hinaus zu verwalten und um die Sitzung zu halten in einem viel gleichmäßiger verteilt Cache. Allerdings, wenn Ihre app weiter entlang ist, und Sie haben Daten, die Sie nicht verlieren wollen für rechtliche, finanzielle oder nur der Benutzerfreundlichkeit aus Gründen, die mit der Session-Objekt verknüpft sind, ist es akzeptabel, nur eine Sitzung Draht zu den HA-Cache — nur sicher sein, ausdrücklich betonen, dass in Ihren Auslastungstests und kennen die Grenzen der Umsetzung. Über Daten, die durch ihren Inhalt oder ihre Nummer in einem Prozess wichtig ist­— wie die Datenschnittstelle sichern eine Bearbeitung — die Datentypen, die unmittelbaren Ziele für HA sind große Referenz-Sets, pre-fetched Daten und vorberechneten Daten.

Die Gemeinsamkeit zwischen all diesen ist die Kosten für diese Daten wieder Pre-Fetch. Bei pre-fetched oder vorberechneten Referenzdaten die Inbetriebnahme, die Kosten, um den Cache zu prime kann ganz erheblich sein und Verlust der Daten während der Laufzeit schwere und sogar katastrophale Auswirkungen auf die Website-Ausführung haben könnte. Abbildung 5zeigt, wie die Cacheobjekte mit HA eingeschaltet verteilt werden könnte. Da die Duplikate in einer Domäne unterschiedliche Schuld sein müssen, können Sie sehen, wie die Duplikate reduzieren den gesamten RAM für den Cache zur Verfügung. Dies ist nicht zu sagen, dass es immer schlecht, so viel wie es ist zu sagen, dass es ist, was notwendig ist. Ich behaupte einfach eine bewusste Wahrnehmung der potenziellen Auswirkungen der HA.

High Availability and Fault Domains
Abbildung 5 hohe Verfügbarkeit und Fehlertoleranz-Domains

LEGO Haus

Entwickler mag oft Entwicklung als Gebäude mit Legosteine denken; Erstellen Sie die grundlegenden Blöcke und setzen Sie sie zusammen in eine nützliche Anwendung. Diese Idee ist wahr, selbst als wir bewegen uns weiter oben die Büroaufgaben von Funktionen zu Objekten Infrastruktur-Komponenten. Zu diesem Zweck möchte ich Ihnen einige Entwurf Hinweise hinterlassen.

Verwenden Sie zuerst alle Werkzeuge zu Ihrem Vorteil. Geben Sie sich nicht auf nur HA oder keine HA weil ein Weg einfacher ist. Verwenden Sie nur bereichsbasierte Cache nicht, weil Sie ihnen suchen können; oder weil sie an eine Instanz angeheftet bekommen zu verzichten. Vielmehr konstruieren Sie Ihre Zwischenspeichern Infrastruktur an Ihre Anforderungen anpassen.

Abbildung 6 zeigt den dedizierten Rollen ich verwenden, um Haus meine duplizierte Caches und die Regionen, die ich für mehr Reich durchsuchbare Caches verwenden. Als allgemeine Regel zugunsten ich dedizierten Cache Rollen für Gehäuse Regionen, weil ich nicht will, um eine Rolle zu laden, die User-Traffic mit allen Datenverkehr für Cacheabrufe mit Bezug zu einer bestimmten Region dient. Die unterste Zeile in Abbildung 6 zeigt, mit dem co-located-Stil der Zwischenspeicherung, um Sitzung, Ausgabe und verschiedene andere Daten, die ich möglicherweise während der Ausführung meiner Anwendung Zwischenspeichern zu halten. Dies ist nicht zu sagen, ich bin mit dedizierten stecken oder co-located Rollen als dargestellt, wie das meist auf die RAM-Anforderungen der Artikel kommt, will ich zum Cache in den Rollen. In der Tat für viele Implementierungen tut die unterste Zeile allein den Trick ohne Notwendigkeit für HA, Regionen oder die große Menge an RAM, die durch die spezielle Rolle gewährte.

Cache Deployment Possibilities
Abbildung 6 Cache Bereitstellung Möglichkeiten

Schließlich Abbildung 7 ist ein Raster, das meine ab identifiziert Punkt für verschiedene Arten von Daten, wenn ich überlege, wie man meine Cache-Bereitstellung Architekt.

Abbildung 7 Konfigurationseinstellungen

Typ der Daten Verwenden Sie Hektar Verwenden der Region Gewidmet Im Zusammenhang
Sitzung (Session)       X
Output       X
Allgemeine Daten     X X
Pre-Fetch X   X  
Pre-calc X   X  
Wichtige Daten X      
Filterbare   X X  

Dadurch in keiner Weise soll Nutzung zu diktieren oder weisen auf eine Rolle oder Funktion eignet sich nur für den Slot, die, den ich gefunden haben. Es ist nur mein Ausgangspunkt. Hätte ich einen großen Satz von pre-fetched Daten wollte ich nach Tags suchen können, würde ich die Elemente kombinieren gekennzeichneten ich, enden mit einer dedizierten Cache-Rolle, die Regionen und HA verwendet. Als ein Beispiel wenn ich von meinem Ausgangspunkt abweichen könnte, wenn ich eine bereitgestellte Anwendung Sitzung verwendet seine Modelle Zwischenspeichern, während der Benutzer Daten bearbeitet, würde ich wahrscheinlich meine Tendenz zur Sitzung in einem co-located Cache und nicht nur steckte es in eine spezielle Rolle, aber aktivieren HA auch werfen.

Also, wenn Sie Glück haben, eine geschäftige Website haben, stellen Sie sicher, dass Ihr Glück auch weiterhin richtig Vorbereiten Ihrer Zwischenspeicherung Infrastruktur.

Joseph Fultz ist Softwarearchitekt bei Hewlett-Packard Co. und Mitglied der HP.com Global IT-Gruppe. Zuvor war er als Software-Architekt für Microsoft und arbeitet mit seiner Spielklasse Enterprise und ISV Kunden, Architektur und Design-Lösungen zu definieren.

Unser Dank gilt den folgenden technischen Experten für die Durchsicht dieses Artikels: Rohit Sharma und Hanz Zhang