Gewusst wie: Verwenden des Windows Azure-Zwischenspeicherns
Zwischenspeicherung kann die Leistung Ihrer Webanwendungen verbessern, indem Sie die Notwendigkeit für die wiederholte Berechnung von dieselben Ergebnisse reduzieren. Wenn Sie die Zwischenspeicherung verwenden, können häufig angeforderte Inhalte und andere Daten einmal berechnet und für die wiederholte Verwendung gespeichert werden.
Befolgen Sie die Anweisungen in diesem Thema, um Support für die Zwischenspeicherung zu Windows Azure Anwendungen hinzuzufügen. Mit Windows Azure-Zwischenspeicherung können Sie Rollen, die speziell für die Zwischenspeicherung vorgesehen sind, einrichten oder sonst nicht verwendete Ressourcen in einer Rolle für die Zwischenspeicherung verwenden. Beispielsweise, wenn Ihre Webserverrolle nur die Hälfte der verfügbaren Ressourcen in jeder Instanz verwendet, können Sie diese Ressourcen verwenden, um Ausgaben, Sitzungszustand, oder häufig verwendete Daten zwischenzuspeichern.
Sie konfigurieren in den .cscfg- und .csdef-Dateien für die Windows Azure Anwendung die Zwischenspeicherung und Sie können diese Konfiguration am einfachsten mithilfe der Einstellungen auf der Eigenschaftenseite Cachedienst für eine Rolle vornehmen. Um einen Cache in einer bestimmten Rolle zu verwenden, fügen Sie Informationen zu den XML-Konfigurationsdateien für diese Rolle hinzu. In einer ASP.NET Web-Rolle ist die entsprechende Konfigurationsdatei web.config. Für andere Rollen ist die Konfigurationsdatei app.config. Sie können die Informationen in der Konfigurationsdatei manuell oder mithilfe eines NuGet-Pakets hinzufügen. Weitere Informationen zu Windows Azure-Zwischenspeicherung finden Sie unter Windows Azure-Zwischenspeicherung für Rolleninstanzen.
Sie können das Zwischenspeichern auf zwei Arten konfigurieren. Sie können Zwischenspeicherung zu einem Cloud-Dienst durch Hinzufügen einer Cache-Worker-Rolle hinzufügen, die ausschließlich für die Zwischenspeicherung verwendet wird, oder Sie können Zwischenspeicherung konfigurieren, um Arbeitsspeicher, CPU und Bandbreitenressourcen für eine bereits vorhandene Rolle zu verwenden. Ein dedizierter Cache wird als eine separate Rolle ausgeführt. Diese Option ist geeignet, wenn die Ressourcen Ihrer Instanzen ausschließlich für die Ausführung dieser Instanzen verwendet werden sollen. Ein zusammengestellter Cache wird in derselben Instanz wie eine andere Rolle ausgeführt. Diese Option ist geeignet, wenn Sie Rolleninstanzen haben, die nicht vollständig die Ressourcen des Computers verwenden, auf denen sie ausgeführt werden.
Dieses Thema enthält folgende Abschnitte:
Sie können entweder die Zwischenspeicherung einer vorhandenen Rolle hinzufügen oder eine Cache-Worker-Rolle erstellen, die Sie aus anderen Rollen verwenden können.
So fügen Sie einem Cloud-Dienst eine dedizierte Cache-Worker-Rolle hinzu
Öffnen Sie das Kontextmenü für das Windows Azure-Projekt, und wählen Sie dann Neues Workerrollenprojekt.
Wählen Sie in der Liste der Projektvorlagen die Vorlage Cache-Worker-Rolle, und geben Sie einen Namen für das Projekt an, z. B. CacheWorkerRole1.
Ein Worker-Rollen-Projekt wird erstellt.
Erweitern Sie unter dem Projekt Windows Azure den Knoten Rollen, öffnen Sie das Kontextmenü für die Cache-Worker-Rolle, die Sie gerade erstellt haben, und wählen Sie Eigenschaften.
Rollen-Designer für dieses Projekt wird angezeigt.
Auf der Registerkarte Konfiguration legen Sie die entsprechende Größe der virtuellen Maschine und die Anzahl der Instanzen für diese Rolle fest.
Auf der Registerkarte Cachedienst beachten Sie, dass unter Cacheclustereinstellungen Dedizierter Cache ausgewählt ist.
Konfigurieren Sie das Verhalten, das Sie für den Standardcache verwenden möchten, oder erstellen Sie benannte Caches mit benutzerdefinierten Eigenschaften.
Jeder benannte Cache hat einen eigenen Satz konfigurierbarer Eigenschaften. Zeigen Sie auf die Tabellenüberschriften zum Anzeigen von Informationen darüber, wie Sie jeden benannten Cache konfigurieren können. Weitere Informationen finden Sie unter Gewusst wie: Konfigurieren des Windows Azure-Zwischenspeicherns.
So fügen Sie Zwischenspeichern zu einer vorhandenen Rolle hinzu
Im Windows Azure-Projekt erweitern Sie den Knoten Rollen, öffnen Sie das Kontextmenü für die Rolle, der Sie Zwischenspeicherung hinzufügen möchten, und wählen Sie dann Eigenschaften.
Wählen Sie auf der Registerkarte Cachedienst das Kontrollkästchen Cachedienste aktivieren.
Wählen Sie die Option Zusammengestellt, und wählen Sie dann einen Prozentsatz der Speicherressourcen des virtuellen Computers, der die Rolle hostet, der für den Cache reserviert werden soll. Diese Zahl sollte im Allgemeinen im Bereich von 30 bis 55 Prozent für eine virtuelle Maschine der Größe Klein und bei bis zu 80 Prozent für einen virtuellen Computer der Größe Sehr groß liegen. Sie können diese Nummer optimieren, indem Sie sich mithilfe von Remotedesktop auf dem virtuellen Computer anmelden, wenn Ihr Cloud-Dienst bei normaler Auslastung ausgeführt, und dann mit dem Task Manager % physikalischen Speicher anzeigen. Sie können den verbleibenden Speicher für einen zusammengestellten Cache verwenden.
Konfigurieren Sie das Verhalten, das Sie für den Standardcache verwenden möchten, oder erstellen Sie benannte Caches mit benutzerdefinierten Eigenschaften.
Sie können Ihrem Projekt manuell Zwischenspeicherverweise hinzufügen, wie in diesem Abschnitt beschrieben, oder Sie können NuGet verwenden, wie in Verwenden von NuGet, um eine Zwischenspeicherung für eine Rolle hinzuzufügen weiter unten in diesem Thema beschrieben. Durch manuelles Hinzufügen der Verweise können Sie sehen, wo diese Assemblys auf Festplatte liegen, dies ist aber umständlich.
So verwenden Sie einen Cache in einer Webrolle
Klicken Sie im Kontextmenü für den Knoten Verweise unter dem Projekt mit der Rolle, in der Sie einen Cache verwenden möchten, auf Verweis hinzufügen.
Aktivieren Sie im Dialogfeld Verweis hinzufügen die entsprechenden Kontrollkästchen, um Verweise auf die folgenden Assemblys hinzufügen, und wählen Sie dann die Schaltfläche OK:
Microsoft.ApplicationServer.Caching.AzureClientHelper
Microsoft.ApplicationServer.Caching.Client
Microsoft.ApplicationServer.Caching.Core
Microsoft.Web.DistributedCache
Öffnen Sie im Projekt mit der Rolle, der Sie Zwischenspeicherung hinzufügen möchten, die Datei web.config für ein Webrollenprojekt, oder öffnen Sie die Datei app.config für andere Projekttypen.
Wenn der configSections-Abschnitt nicht vorhanden ist, fügen Sie ihn ein. Fügen Sie in diesem Abschnitt eine Deklaration des Caching-Abschnitt hinzu, wie im folgenden Code gezeigt.
<configSections> <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/> </configSections>Fügen Sie XML hinzu, das den zu verwendenden benannten Cache angibt.
<dataCacheClients> <tracing sinkType="DiagnosticSink" traceLevel="Verbose"/> <dataCacheClient name="default"> <autoDiscover isEnabled="true" identifier="WebRole1"/> </dataCacheClient> </dataCacheClients>Wenn Sie nur einen Cache deklarieren, kann der Name default lauten, wie im vorherige Beispiel dargestellt. Wenn Sie mehrere Caches deklarieren, fügen Sie einen separaten dataCacheClient-Abschnitt für jeden Cache hinzu und geben Sie jedem Cache einen eindeutigen Namen. Der Cache mit dem Namen default wird zurückgegeben, wenn Sie im Code die GetDefaultCache-Methode für das DataCacheFactory-Objekt aufrufen. Das identifier-Attribut gibt entweder den Namen des Webrollenprojekts, dem Sie Zwischenspeicherunterstützung hinzugefügt haben, oder eine Cache-Worker-Rolle an.
Nun, da Sie einen verteilten Caches in dieser Rolle konfiguriert haben, können Sie aus Code durch Erstellen einer DataCacheFactory und eines DataCache-Objekts darauf zugreifen.
Fügen Sie in einer Code-Behind-Datei Ihrer Page-Klasse Deklarationen hinzu, und fügen Sie einen Zufallszahlengenerator hinzu, sodass Sie einige Daten haben, um den Cache zu testen.
static DataCacheFactory myFactory; static DataCache myCache; static Random randomizer = new Random();Wenn Sie eine Webanwendung erstellen, die den Cache verwendet, ersetzen Sie den Code in der Webseite Default.aspx mit dem folgenden Code.
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <p style="font-size:large; height: 283px;"> <asp:Label ID="Label0" runat="server" Text="Text for the cache: " /> <asp:TextBox runat="server" ID="TextBox1" Width="125" /> <br /> <br /> <asp:Button runat="server" onclick="OnPutInCache" Text="Put in Cache" id="AddCachedItemsButton" /> <asp:Button runat="server" onclick="OnGetFromCache" Text="Get from Cache" id="GetCachedItemsButton" /> <asp:Label ID="Label1" runat="server" Width="500" /> <br /> <br /> <br /> Cached Datestamp: <%= DateTime.Now.ToString() %><br /> Fresh Datestamp: <asp:Substitution runat="server" methodname="GetFreshDateTime" id="UnCachedArea" /><br /><br /> </p> </asp:Content>Fügen Sie Code zum Initialisieren des Cache hinzu.
protected void Page_Load(object sender, EventArgs e) { try { //Get a named cache (or default cache) if (myCache == null) { // You should initialize the data cache factory // once and keep reusing the same object. myFactory = new DataCacheFactory(); myCache = myFactory.GetDefaultCache(); // If you want to get a handle to a named cache // that is not the default cache, supply the // cache's name from the configuration file: // myCache = myFactory.GetCache("anotherNamedCache"); } } catch (DataCacheException dce) { Label1.Text = dce.ToString(); } }Dieser Initialisierungscode sollte vor jedem Versuch, den Cache zu verwenden, aufgerufen werden. Beispielsweise können Sie diesen Code dem Page_Load-Ereignishandler hinzufügen. Andernfalls wird ein Handle für den Cache mithilfe der Cache-Factory-Methode GetDefaultCache() erstellt. Wenn kein Cachename angegeben ist, wird der Cache mit dem Namen default verwendet. Die Ausnahme DataCacheException kann ausgelöst werden, sobald Sie mit Cache-Methoden arbeiten. Der vorherige Code fängt diese Ausnahme ab und zeigt sie dem Benutzer in einem Label-Steuerelement an.
Fügen Sie Code hinzu, um den Cache zu verwenden.
/// <summary> /// Adds the value of the TextBox to the cache /// </summary> protected void OnPutInCache(object sender, EventArgs e) { try { myCache.Put("MyKey", TextBox1.Text); Label1.Text = " \" " + TextBox1.Text + "\" has been added to the cache."; } catch (DataCacheException dce) { Label1.Text = dce.ToString(); } }Im vorherige Beispiel wird ein einfaches Webformular mit einem Textfeld und einer Schaltfläche vorausgesetzt, Sie können jedoch den gleichen Code zum Zwischenspeichern beliebiger Daten verwenden. Wie im Beispiel dargestellt, verwenden Sie die Put-Methode, um Daten zum Cache hinzuzufügen. Der Cache funktioniert wie ein Wörterbuch. Das erste Argument ist der Schlüssel; das zweite Argument sind die Daten, die Sie zwischenspeichern möchten.
Rufen Sie Daten aus der Zwischenspeicherung durch Aufrufen der Get-Methode und Angeben des Schlüssels ab.
/// <summary> /// Gets the cached item (that was added from the TextBox) /// </summary> protected void OnGetFromCache(object sender, EventArgs e) { try { string outputFromCache = myCache.Get("MyKey") as string; Label1.Text = "\"" + outputFromCache + "\" has been retrieved from the cache."; } catch (DataCacheException dce) { Label1.Text = dce.ToString(); } }
Ausgabecaching verbessert die Leistung einer Website durch Verringern die Notwendigkeit, Daten zu regenerieren, die bereits abgerufen wurden. Durch Bearbeiten der Konfigurationsdatei für die Anwendung können Sie den verteilten Cache verwenden, um Ausgabe für eine ASP.NET-Anwendung zwischenzuspeichern, ohne Änderung des Programm-Codes.
Zwischenspeichern der Ausgabe in einer ASP.NET-Anwendung
Öffnen Sie die Datei web.config für die ASP.NET-Anwendung, für die Sie die Zwischenspeicherung der Ausgabe konfigurieren möchten.
Fügen Sie die folgenden Zeilen hinzu, um die Ausgabezwischenspeicherung für die Verwendung des verteilten Cache zu konfigurieren.
<caching> <outputCache defaultProvider="defaultProvider" > <providers> <add cacheName="default" name="defaultProvider" dataCacheClientName="nameOfDataCacheClient" applicationName="<unique-appId>" type= "Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" /> </providers> </outputCache> </caching>Geben Sie für cacheName den Namen des entsprechenden benannten Cache an, der von der angegebenen dataCacheClient gehostet wird. Das dataCacheClient-Attribut gibt die Rolle an, die den Cache hostet.
Fügen Sie die OutputCache-Direktive auf den Seiten hinzu, deren Ausgabe zwischengespeichert werden soll.
<%@ OutputCache Duration="60" VaryByParam="*" %>
Duration ist die Zeitspanne in Sekunden, für die Daten im Cache verbleiben sollen. VaryByParam gibt an, dass für jede Parameterkombination eine andere Version der Seite zwischengespeichert werden soll. Das Sternchen (*) in diesem Zusammenhang bedeutet, bei allen Parametern variieren. Sie können auch Parameter als Namen angeben. Eine vollständige Beschreibung der verfügbaren Optionen finden Sie unter OutputCache-Direktive
Sie haben den Ausgabecache konfiguriert.
Dieser Abschnitt veranschaulicht das Zwischenspeichern von Sitzungszustandsinformationen für eine ASP.NET-Webanwendung ohne ihren Code zu ändern.
Um Informationen zum Sitzungszustand zwischenzuspeichern
Öffnen Sie die Datei web.config für die ASP.NET-Webanwendung, für die Sie die Zwischenspeicherung des Sitzungszustands konfigurieren möchten.
Fügen Sie die folgenden Zeilen hinzu, und geben Sie den Namen des Caches an, den Sie verwenden möchten (in diesem Fall "default"), den Namen des Anbieters, den Namen des dataCacheClient und die Anwendung-AppId.
<!--Set up custom session state provider --> <sessionState mode="Custom" customProvider="defaultProvider"> <providers> <add cacheName="default" name="defaultProvider" dataCacheClientName="nameOfDataCacheClient" applicationName="<unique-appId>" type= "Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"/> </providers> </sessionState>
Sie können mehrere benannte Caches für verschiedene Zwecke erstellen und konfigurieren. Beispielsweise können Sie einen Cache für Ausgaben und einen programmgesteuerten Cache für Daten verwenden.
So verwenden Sie mehrere benannte Caches
Öffnen Sie im Rollen-Designer die Registerkarte Cachedienst für eine Rolle.
Fügen Sie unter Benannte Caches einen benannten Cache für die Ausgabe und einen weiteren für Informationen zum Sitzungszustand hinzu.
In der Tabelle Benannte Caches werden die Eigenschaften für die benannten Caches angezeigt.
Beispielsweise können Sie die Entfernungsrichtlinie für den Ausgabecache auf TTL und für den Sitzungszustandscache auf Keine festlegen.
Öffnen Sie die Datei "web.config", und ändern Sie die Attribute "cacheName" in den Abschnitten "outputCache" und "sessionState" auf die neuen Werte.
Sie können eine Zwischenspeicherung für eine vorhandene Rolle am einfachsten mit dem Paket-Manager NuGet hinzufügen. Wenn Sie die Windows Azure Tools installiert haben, kann NuGet die entsprechenden Verweise hinzufügen und alle erforderlichen Änderungen an den Konfigurationsdateien vornehmen.
So fügen Sie mit NuGet eine Zwischenspeicherung für Windows Azure hinzu
Stellen Sie sicher, dass die neueste Version von NuGet installiert ist.
Weitere Informationen und Installationsanweisungen finden Sie unter NuGet.
Öffnen Sie im Projektmappen-Explorer das Kontextmenü für den Projektknoten mit der Rolle, für die Sie die Zwischenspeicherung hinzufügen möchten, und wählen Sie dann NuGet-Pakete verwalten.
Das Dialogfeld NuGet-Pakete verwalten wird angezeigt.
Stellen Sie bei der Juni 2012-Version sicher, dass in der Liste am oberen Rand des Dialogfelds NuGet Pakete verwalten der Wert Vorabversion einschließen und nicht Nur stabile angezeigt wird.
Wählen Sie in der Onlinegalerie Windows Azure-Zwischenspeichern, und klicken Sie dann auf die Schaltfläche Installieren.
Das Projekt wird geändert, es werden Verweise auf Cache-Assemblys hinzugefügt, und die Konfigurationsdateien werden aktualisiert, um einen Cache konfigurieren.
Suchen Sie in der Konfigurationsdatei für das Projekt, das dataCacheClient-Element, das über ein untergeordnetes autoDiscover-Element verfügt.
Ändern Sie in diesem untergeordneten Element den Wert des identifier-Attributs in den Namen der Rolle, die den Cache bereitstellt.
<dataCacheClient name="default"> <autoDiscover isEnabled="true" identifier="CacheWorkerRole1"/> </dataCacheClient>Um den Cache zu verwenden, ändern Sie den Code, wie zuvor in diesem Thema beschrieben.
Um einen Ausgabecache oder einen Sitzungszustandscache zu aktivieren, bearbeiten Sie die Konfigurationsdatei für die entsprechende Rolle, und nehmen Sie die anderen Änderungen vor, die zuvor in diesem Thema beschrieben wurden. Für einen programmgesteuerten Cache fügen Sie in Ihren Code-Behind-Dateien den entsprechenden Code ein, um einen Cache zu erstellen und Daten hinzufügen und abrufen zu können.
(optional) Um NuGet-Pakete für eine komplette Projektmappe zu verwalten und mehreren Projekten gleichzeitig eine Unterstützung für die Zwischenspeicherung hinzuzufügen, öffnen Sie das Kontextmenü für den Projektmappenknoten, und wählen Sie NuGet-Pakete verwalten. .