Freigeben über


Memcached-Wrapper für Azure-In-Role Cache

Wichtig

Microsoft empfiehlt, alle neuen Entwicklungen azure Redis Cache zu verwenden. Aktuelle Dokumentation und Anleitung zum Auswählen eines Azure Cache-Angebots finden Sie unter Welches Azure Cache-Angebot ist für mich geeignet?

Memcache im Überblick

Memcache ist eine verteilte Arbeitsspeicher-Cachelösung, die zum Beschleunigen großer Webanwendungen verendet wird, indem die Datenbank entlastet wird. Memcache wird von vielen der größten Websites im Internet verwendet und wurde auf innovative Weise mit anderen Technologien zusammengeführt.

Azure unterstützt das Memcache-Protokoll, um Kunden mit vorhandenen Memcache-Implementierungen die einfache Migration in Azure zu ermöglichen. Wenn eine Anwendung Memcache bereits verwendet, ist es nicht notwendig, diesen Code durch neuen zu ersetzen.

Das Ausführen von Azure Caching mit Memcache ist eine bessere Option als z. B. Memcache selbst in einer Workerrole auszuführen. Der Grund liegt darin, dass Azure Caching Mehrwertfunktionen bietet, z. B. normales Herunterfahren, Hochverfügbarkeit, lokales Cashing (auf dem Clientshim), Benachrichtigungen (auf dem Clientshim), Datenkonsistenz und einfache horizontale oder vertikale Skalierbarkeit, die für die Clients transparent ist – um nur einige Aspekte zu nennen. Das Serverhashschema und die Partitionsverwaltung in Azure Caching mit Memcache unterstützen den Lastenausgleich und erhalten die Datenkonsistenz.

Unterstützung des Memcache-Protokolls

Azure Caching unterstützt das Memcache-Wire-Protokoll. Es sind zwei Versionen des Protokolls verfügbar: eine binäre Version und eine Textversion

Azure Caching unterstützt dieses Protokoll neben seinem eigenen Wire-Protokoll. Ein Memcache-Client sollte Kompatibilität mit Azure erwarten können. Azure Cachig unterstützt beinahe jede API, die von anderen Memcache-Implementierungen unterstützt wird.

Sollte ein Benutzer also eine Memcache-Anwendung mit Azure verwenden wollen, fügen Sie der Anwendung einen Verweis auf die Implementierung von Memcache von Azure hinzu. Sie sollte dann unverändert weiterhin funktionieren, ohne dass weitere Änderungen an der Anwendung erforderlich sind.

Memcache unterstützt zwei unterschiedliche Entwicklererfahrungen: die Verwendung eines "Servergateways" und die Verwendung eines "Client-Shim".

Memcache-Servergateway

Unter den Aspekten der Implementierung, der Bereitstellung und des Konzeptansatzes ist ein Servergateway einfach, es erfordert jedoch auch einige wichtige Vorsichtsmaßnahmen, die weiter unten beschrieben werden.

Wenn ein Servergateway verwendet wird, lauscht der Servercachecluster an einem Memcache-Socket. Es wird also ein Socket geöffnet und auf Pakete für das Memcache-Protokoll gelauscht. Es ist keine Übersetzungsschicht vorhanden (siehe unten).

Öffnen Sie zum Aktivieren dieser Funktion in Ihrem Cachecluster einen weiteren internen Endpunkt, benennen Sie diesen, und erklären Sie ihn dann zu Ihrem Memcache-Port. Der gesamte an diesen Port gebundene Datenverkehr wird über das Memcache-Protokoll empfangen.

Das Servergateway verschlechtert jedoch in hochgradig leistungssensitiven Szenarien die Leistung im Vergleich zur Verwendung des Clientshimszenarios. Der Grund liegt darin, dass Memcache-Implementierungen Hashing auf andere Weise als Azure Caching implementieren. Memcache-Implementierungen verlegen das Hashingschema auf den Cacheclient. In Azure generiert der Cacheserver den Hash. Das Verhalten von Azure Caching besteht darin, den Cacheserver das Hashverhalten angeben zu lassen. Auf diese Weise kann der Server Lastenausgleich ausführen, sich vergrößern bzw. verkleinern, keinen Datenverlust sicherstellen usw.

Wenn Azure ein Element zwischenspeichert, wird ein Hash basierend auf dem Schlüssel des Elements generiert. Azure verwendet den Hash, um zu ermitteln, welcher Server im Cachecluster das zwischengespeicherte Element enthalten wird. Als Ergebnis muss das Azure-Servergateway dem Schlüssel erneut einen Hashwert zuweisen und das Element dann an den Zielserver im Cachecluster weiterleiten. Für diesen Vorgang fällt ein zusätzlicher Netzwerkhop an, der die Leistung verschlechtert.

Memcache-Clientshim

Der Memcache-Clientshim wird auf dem Client installiert, der auf den Cache zugreift. Dabei handelt es sich im Allgemeinen um die Azure-Rolle, die die Anwendung selbst ausübt. Der Clientshim unterstützt den lokalen Cache.

Der Shim ist eine Übersetzungsschicht. Er übersetzt Memcache-Clientaufrufe in die Azure Caching-API. Der Shim besteht aus zwei Bestandteilen – einem Memcache-Protokollhandler und einem Azure Caching-Client. Der Shim – die Übersetzungsschicht – wird dort auf dem Client selbst installiert, wo die Aufrufe Get und Put an die Azure Caching-API erfolgen.

Wenn der Memcache-Client einen Verweis auf localhost als Memcache-Server enthält, werden Put-Vorgänge anfangs von der lokalen Instanz des Shims anstatt vom Cacheserver in Azure verarbeitet. Der Shim ermittelt dann den richtigen Zielserver im Cachecluster und leitet den Put-Vorgang an Azure weiter.

Auf diese Weise entfällt der zusätzliche Netzwerkhop, der im Szenario mit einem Servergateway erforderlich ist. Der Nachteil besteht darin, dass Sie diesen Shim abrufen und in Ihre Anwendung integrieren müssen.

Verwenden des Servergateways im Vergleich zum Clientshim

Es gibt zwei Topologien des Zwischenspeicherns: gemeinsames Zwischenspeichern und eine dedizierte Cacherolle.

Wenn der Cachecluster in einer dedizierten Cacheworkerrolle bereitgestellt wird, verwenden Sie den Memcache-Shim vom Cacheclient. Dies führt zu besserer Leistung und vermeidet AutoErmittlungscode.

Wenn Sie zusammengestellte Caches verwenden, und der Cacheclient wird in der gleichen Rolle gehostet, verwenden Sie das Memcache-Servergateway. Die Verwendung des Clientshims führt zu einer zusätzlichen Verarbeitungs- und Weiterleitungsschicht und ist nicht erforderlich, wenn auf den Cache aus der gleichen Rolle zugegriffen wird. Die zusätzliche Weiterleitung führt zu nicht erforderlichem Mehraufwand.

Es ist kein Programmiermodell für die Verwendung des Servergateways oder des Clientshims verfügbar. Es sind nur Änderungen der Konfigurationseinstellung erforderlich. Der Clientshim erfordert außerdem eine Installation.

Die Verwendung eines Servergateways oder eines Clientshims ähnelt mehr einem Bereitstellungsvorgang als einem Programmiermodellvorgang. Als Programmierer rufen Sie die gleichen Get- oder Put-APIs auf – nur die Anwendung ist ein wenig anderes verdrahtet. Anstatt auf den ursprünglichen Cacheserver zu verweisen, verweist sie nun auf das Servergateway oder den Clientshim.

Das Servergateway und der Clientshim kennen die verwendete Memcache-Clientbibliothek nicht, weil Memcache-Standardimplementierungen das gleiche Protokoll verwenden. Der Cacheserver verarbeitet die Datenpakete, die dem Memcache-Standardprotokoll genügen, nicht die Memcache-Clientimplementierungen selbst.

Bereitstellen des Servergateways für Azure-Anwendungen

  1. Navigieren Sie in der Rolle, die den Cacheserver hosten soll, zu den Rolleneigenschaften und zur Registerkarte Cashing.

  2. Aktivieren Sie das Kontrollkästchen "Zwischenspeichern aktivieren".  Dadurch werden Eingabeendpunkte in csdef, dem ImportModule-Element und anderen Csdef/cscfg-Einstellungen hinzugefügt. Die nächste Bereitstellungsaktion besteht im manuellen Hinzufügen eines Eingabeendpunkts namens "memcache_default" auf der Registerkarte Endpunkte.

  3. Nun muss der Client so konfiguriert werden, dass er auf diesen Cluster verweist. Wenn Sie das Servergateway mit einem zusammengestellten Cache oder den Clientshim mit einem dediziertemn Cache verwenden, sollte die Anwendung einfach einen Verweis auf localhost_NameDieserRolle enthalten – AutoErmittlung ist nicht erforderlich.

Bereitstellen des Clientshims für Azure-Anwendungen

  1. Klicken Sie in der Rolle mit dem Memcache-Client mit der rechten Maustaste auf den Rollennamen, und wählen Sie dann Bibliothekspaketverweis hinzufügen aus, um das NuGet-Fenster zu öffnen.

  2. Suchen Sie nach "Azure Caching Memcache-Shim". Installieren Sie dieses NuGet-Paket.

  3. Das Paket erstellt den Starttask, fügt einen internen Endpunkt für memcache_default hinzu, ordnet diesen 11211 zu und fügt dann die entsprechenden Abschnitte dataCacheClients in die Dateien App.config und web.config ein. Diese Angaben können auf der Registerkarte für die internen Endpunkte geändert werden.

  4. Geben Sie den Rollennamen im autoDiscovery-Element von App.config oder Web.config ein.

  5. Der Client muss nun so konfiguriert sein, dass er auf den Shim verweist. Bearbeiten Sie die Memcache-Clientkonfiguration, und legen Sie den Server auf localhost fest. Die richtigen Portnummern müssen ebenfalls festgelegt werden.