Neuer Amazon Web Service: Ein schlüsselfertiger Cache

Wolken-Cache: Amazon ElastiCache

Eberhard Wolff

Amazon baut sein Cloud-Angebot jenseits einfacher virtueller Rechner und Storage konsequent aus: Neben einer Tomcat-basierten Laufzeitumgebung (Elastic Beanstalk) und MySQL bzw. Oracle Datenbanken (Relational Database Service, RDS) gibt es nun auch eine Beta für ein Cache: ElastiCache.

ElastiCache kann genutzt werden, um Daten im Speicher zu halten und dadurch den Zugriff auf andere Systeme oder Datenbanken einzusparen. So kann die Performance der Anwendung optimiert werden. ElastiCache basiert auf dem Open-Source-Projekt memcached, so dass ElastiCache genau so wie ein memcached-Server angesprochen wird. Jede memcached-Library funktioniert also auch mit ElastiCache.

Die Idee hinter dieser Technologie ist, auf speziell dafür vorgesehenen Servern Daten abzulegen. Der Zugriff auf die Daten erfolgt über das Netz. Dieser Ansatz unterscheidet sich also von einem Cache, der in der Anwendung selbst angelegt wird, wie dies häufig beispielsweise bei O/R-Mappern wie Hibernate der Fall ist. Der Ansatz hat den Nachteil, dass der Zugriff auf den Cache über das Netzwerk erfolgt, was zu einer höheren Latenz führt. Der Vorteil ist, dass so auch sehr große Caches möglich sind, da der gesamte Speicher eines Servers oder gar eines Clusters für den Cache genutzt werden kann. Die Speicherverwaltung übernimmt der Cache, so dass die JVM und ihre Garbage Collection außen vor bleiben. Java-Umgebungen sind auf kurzlebige Objekte optimiert und nicht auf Caches mit ihren langlebigen Objekten. Bei einem Cluster kann durch Replikation der Daten auch eine hohe Verfügbarkeit des Caches erreicht werden. memcached wird von zahlreichen großen Web Sites wie Twitter, Youtube oder Flickr genutzt.

ElastiCache und memcached legen unter einem Schlüssel einen Wert ab. Unter dem Schlüssel können prinzipiell beliebige Daten liegen – also Web Seiten genauso wie Daten, die sonst aus der Datenbank ausgelesen würden. memcached bietet dabei ein recht einfaches Protokoll an, für das zahlreiche Clients – auch für Java- existieren. Für Java bietet sich zum Beispiel spyMemcached an.

Mit ElastiCache bietet Amazon im Wesentlichen schlüsselfertige memcached-Installationen an. Dabei gibt es Cache Nodes mit unterschiedlich viel Cache-Speicher – von 1.3 GB bis hin zu 68 GB. Die Kosten richten sich nach der Größe der verwendeten Cache Nodes und werden pro Stunde abgerechnet. Durch das Clustering kann ein vorhandener Cache mit zusätzlichen Cache Nodes ergänzt werden. In der Amazon-Cloud-Infrastruktur ist das Anlegen eines neuen Rechners und damit einer neuen Cache Nodes problemlos möglich. Dieser Ansatz ist unter dem Namen „Scale Out“ bekannt, weil höherer Last durch die Nutzung von mehr Rechnern begegnet wird.

Amazon gibt memcached-Konfigurationen vor, die auf die Knotengröße angepasst sind, aber eigene Anpassungen sind mit Cache Parameter Groups auch möglich. Um Ausfallsicherheit zu gewähren oder mit besonders großen Datenmengen umzugehen, können Cache Nodes zu Cache Clustern zusammengefasst werden.

Amazon teilt seine Cloud in Regions wie US-East oder EU-West auf. Zurzeit ist Elasticache in einer Beta und nur in EU-East nutzbar. Innerhalb dieser Region gibt es Availability Zones. Das sind im Prinzip getrennte Rechenzentren. Sie sind so organisiert, dass der Ausfall einer Availability Zone keine Konsequenzen für anderen Availability Zones hat. Ein Cache Cluster ist in einer Availability Zone. Sollte die für die benötigte Verfügbarkeit nicht ausreichen, so können mehrere Cache Cluster in unterschiedlichen Availability Zones genutzt werden. Der Zugriff auf den Cache kann durch „Security Groups“ eingeschränkt werden. Sie sind vergleichbar mit Firewall-Konfigurationen und erlauben den Zugriff auf die Server nur von bestimmten IP-Adressen auf bestimmte Ports.

Welchen Vorteil bietet ElastiCache gegenüber einer eigenen Installation von memcached in der Amazon-Cloud? Zunächst muss der Kunde sich bei diesem Angebot nicht um die Installation von memcached kümmern. Außerdem gibt es noch einige weitere Vorteile:

  • Der Ausfall einer Cache Node wird automatisch festgestellt und ein neuer Rechner wird gestartet, der auch automatisch in den Cluster aufgenommen wird.
  • Updates und Patches der Software werden von Amazon eingespielt, so dass man sich nicht selber um das Stopfen von Sicherheitslücken kümmern muss. Für die Installation wird ein von Kunden definiertes Zeitfenster genutzt.
  • Mit Hilfe von des Cloud-Watch-Dienstes können die Cache Nodes überwacht werden. Dabei werden auch Daten gemessen, die spezifisch für den Cache sind wie beispielsweise Cache Hits.

Damit setzt Amazon seinen Ansatz fort, sein Angebot im Bereich IaaS (Infrastructure as a Service) mit virtuellen Rechnern und Storage um komplexere Dienste zu ergänzen. Dazu zählen zum Beispiel auch der Relational Database Service (RDS), bei dem man Oracle- oder MySQL-Server mieten kann und ähnliche Vorteile hat wie bei ElastiCache. Ebenfalls gibt es mit Elastic Beanstalk ein PaaS (Platform as a Service), das auf Tomcat basiert und auf das man sehr einfach Java-Anwendungen deployen kann.

Wie die anderen Amazon-Dienste auch kann der Nutzer ElastiCache auf verschiedene Weisen steuern:

  • Über die Web-Schnittstelle können Caches, Cache Nodes und Cache Cluster erzeugt und konfiguriert werden.
  • Dieselben Möglichkeiten bieten die Kommandozeilenwerkzeuge. Dadurch können Abläufe automatisiert werden.
  • Wer noch mehr Flexibilität benötigt, kann auf die SOAP-Web-Services-Schnittstelle zugreifen und zur Automatisierung eine beliebige Programmiersprache nutzen.

So kann ElastiCache manuell administriert werden oder Prozesse automatisiert werden.

Die Schnittstelle des Caches selbst bietet die Möglichkeit, Daten unter einem bestimmten Schlüssel abzulegen und abzurufen. Dabei ist es auch möglich, festzulegen, wie lange die Daten im Cache vorgehalten werden sollen. Außerdem kann ein numerischer atomar Wert erhöht werden. So können netzwerkweite Zähler eingerichtet werden. Da die Daten im Speicher vorgehalten werden, ist der Zugriff performant möglich. Der Cache unterstützt optimistische Concurrency Control: Beim Ändern eines Wertes kann der aktuelle Wert mit einem vorher gelesenen Wert verglichen werden. Wenn in der Zwischenzeit jemand den Wert geändert hat, so bekommt man eine Fehlernachricht. Ein konkretes Beispiel würde den Umfang dieses Artikels sprengen. Für eine Einführung in ElastiCache bietet sich dieser GettingStartedGuide an.

Fazit

ElastiCache setzt auf die bewährte Cache-Software memcached auf und bietet sie schlüsselfertig in der Cloud an. Damit fügt Amazon seinen Angeboten einen weiteren interessanten Dienst hinzu, der für die Performance der Anwendungen zentral sein kann und sich in zahlreichen Projekten bewährt hat. Mit solchen In-Memory-Ansätzen sind in der Cloud besonders gut nutzbar, da man dort leicht neue Server zu einem Cache Cluster hinzufügen kann. Für den Entwickler ist der Cache im wesentlichen eine große Map – die wesentliche Herausforderung ist, welche Daten man in dem Cache hält, um so einen möglichst großen Vorteil aus dem Cache zu ziehen.

Eberhard Wolff (Twitter: @ewolff) arbeitet als Architecture and Technology Manager für die adesso AG in Berlin. Er ist Java Champion, Autor einiger Fachbücher und regelmäßiger Sprecher auf verschiedenen Konferenzen. Sein Fokus liegt auf Java, Spring und Cloud-Technologien.
Geschrieben von
Eberhard Wolff
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.