Amazon Web Services

Aus Cloud Computing Workshop
Wechseln zu: Navigation, Suche

Amazon Web Services (AWS) ist eine Sammlung verschiedener Webservices, die auf dem Webportal von Amazon.com im Internet als Cloud-Lösung angeboten werden. Amazon Web Services wurde im Juli 2002 als Dienst für andere Webseiten oder clientseitige Anwendungen gestartet. Die Dienstleistungen werden großteils über HTTP transportiert, wobei unter anderem REST und SOAP genutzt werden können. Nach Angaben von Amazon.com haben sich bereits über 490.000 Entwickler für die Nutzung von AWS registriert (Stand 25. Februar 2009)[1].


AWS Produkte[Bearbeiten]

Grundsätzlich bietet Amazon eine Vielfalt von Produkten im Cloud-Bereich an. Für eine vollständige Liste aller Möglichkeiten macht es daher Sinn, sich direkt auf der Webseite des Herstellers zu informieren. Im Folgenden sollen jedoch ausschließlich die Möglichkeiten jener Komponenten betrachtet werden, welche im Rahmen der Eigenentwicklung (vgl. Selbst entwickelte Beispielapplikation) von Belangen waren.

So sollen in diesem Abschnitt vor allem die folgenden Services näher untersucht und erläutert werden:[2]

  • Amazon Simple Storage Service (S3)
  • Amazon Simple DB
  • Amazon Simple Queue Service
  • Amazon Elastic Compute Cloud (EC2)
  • Amazon Elastic Beanstalk
  • Amazon Elastic Load Balancing

All diese Komponenten sollen auf ihre Möglichkeiten untersucht werden.

Amazon Simple Storage Service (S3)[Bearbeiten]

Der Simple Storage Service bietet eine zuverlässige Speichermöglichkeit von Daten. Die 3 im Namen steht hierbei für die Leistung, dass alle Daten dreifach gespiegelt werden. Dies bietet eine extrem hohe Datensicherheit und garantiert einen ausfallsicheren Service. Des Weiteren bietet S3 eine Java-Klasse, welche das Management der Daten übernimmt. Ein weiteres Merkmal von S3 ist, dass die Anzahl von zu speichernden Dateien unbegrenzt ist, was bedeutet, dass beim Ausnutzen aller Verfügbaren Inodes eines Linux-Systems automatisch weitere Server/Images hinzugezogen werden. Zusätzlich können Dateien mit Größen zwischen einem Byte und fünf Terabyte hochgeladen werden.[3]

Wie bei allen Services von Amazon können Daten auf Servern in drei unterschiedlichen Regionen, also den USA (Oregon, Nord-Kalifornien, Palo Alto), Europa (Nord Irland), Asien (Tokyo, Singapur) oder Südamerika (Sao Paulo) abgelegt werden. Alle Server entsprechen nationalen Regulationen. Zusätzlich gibt es in den USA noch eine GovCloud, welche speziell für Daten im öffentlichen Sektor genutzt werden kann, da hier striktere Sicherheitsbestimmungen greifen.[3]

Amazon Simple DB[Bearbeiten]

Simple DB stellt eine hoch verfügbare, nicht relationale, aber verteilte Datenbanklösung dar[4]. Die Hochverfügbarkeit wird durch das Konsistenzmodell der eventuellen Integrität sichergestellt. Obwohl dieses Modell nicht die gleiche Integrität wie herkömmliche Datenbankmanagementsysteme besitzt, bringt es zwei Hauptvorteile mit sich:

CAP-Theorem
  • Verfügbarkeit - beim Ausfall diverser Komponenten funktioniere alle anderen Services weiterhin korrekt.
  • Partitionstoleranz - Systemkomponenten sind in einem Computernetzwerk miteinander verbunden. Sollten Komponenten sich untereinander nicht kontaktieren können, wird das System trotzdem weiter funktionieren.


Diese beiden Vorteile stellen zwei von drei Funktionen des CAP-Theorems dar. So besagt dieses, dass es einem verteilten Computersystem unmöglich ist, Konsistenz (K), Partitionstoleranz (P) und Verfügbarkeit (A) gleichzeitig zu bieten.[5]

Des Weiteren definiert Amazon selbst sieben zentrale Vorteile ihrer Datenbanklösung:[4]

  • Geringer Aufwand - Amazon Simple DB versucht dem Nutzer möglichst viele administrative Aufgaben abzunehmen, sodass dieser sich auf die Entwicklung effizienter Anwendungen konzentrieren kann.
  • Hoch verfügbar - Simple DB erstellt automatisch mehrere geografisch verteilte Kopien, um dass System ausfallsicher zu machen.
  • Flexibilität - wie alle Amazon Produkte ist Simple DB extrem Skalierbar und bietet zusätzlich zahlreiche Optionen zur Anpassung an das individuelle Geschäft.
  • Einfache Verwendung - aufgrund einer einfach gestalteten API bietet Amazon einfache Datenbankabrufe, welche intuitiver und leichter sind, als die einer herkömmlichen relationalen Datenbank.
  • Integration mit anderen Services - Amazon Simple DB kann mit allen anderen Amazon Web Service Produkten kombiniert werden. Dies bietet vielfältige Einsatzmöglichkeiten.
  • Sicherheit - durch die Integration des HTTPS Protokolls ist eine sichere Kommunikation mit dem Server möglich. Des Weiteren können spezifische Nutzungsrechte für einzelne Benutzer oder Benutzergruppen festgelegt werden.
  • Erschwinglich - Amazon bietet wettbewerbsfähige Preise und ist in vielen Fällen günstiger als die Konkurrenz.

Amazon Simple Queue Service[Bearbeiten]

Amazon Simple Queue Service (Amazon SQS) bietet eine zuverlässige, hochskalierbare, gehostete Warteschlange zum Speichern von Mitteilungen, während diese zwischen Computern weitergeleitet werden.[6] SQS bietet so das einfache Verteilen von Daten in dezentralen Netzwerken an. Die einzelnen Nachrichten dürfen[6]

  • bis zu 64KB groß sein und
  • bleiben maximal 14 Tage bestehen, während
  • die Nachrichten gleichzeitig geschrieben und gelesen werden können.

Amazon Elastic Compute Cloud (EC2)[Bearbeiten]

Amazon EC2 ist die Kernkomponente der Amazon Web Services. Hier wird die Rechenleistung sowie die Laufzeitumgebung für Applikationen geboten. Amazon EC2 ist auf extrem hohe Skalierbarkeit ausgelegt, sodass mit wenigen Mausklicks neue Server Instanzen hinzugefügt werden können. Eine Server Instanz stellt in der Regel eine virtuelle Partition auf einem Server in einer bestimmten Region dar.[7] So ist es mit Amazon EC2 auch möglich, seinen Service parallel auf Servern in unterschiedlichen Regionen laufen zu lassen. Amazon EC2 verfügt über zahlreiche leistungsstarke Funktionen zum Errichten von skalierbaren, fehlerresistenten Anwendungen der Enterprise-Klasse. Dazu zählen:

  • Amazon Elastic Block Store – Amazon Elastic Block Store (EBS) bietet beständigen Speicher für Amazon EC2-Instanzen. Amazon EBS-Datenträger ermöglichen die Speicherung außerhalb der Instanz, die unabhängig vom Status einer Instanz besteht.[7] Amazon EBS-Datenträger sind hochverfügbar, äußerst zuverlässig und können als Boot-Partition einer Amazon EC2-Instanz genutzt oder als Standard-Blockgerät an eine laufende Amazon EC2-Instanz angehängt werden. Bei Verwendung als Boot-Partition können Amazon EC2-Instanzen angehalten und anschließend neu gestartet werden. Kunden, die eine noch bessere Beständigkeit wünschen, können die Funktion von Amazon EBS nutzen, mit der konsistent zeitpunktgesteuerte Snapshots der Datenträger erstellt und dann in Amazon S3 gespeichert werden. Die Snapshots werden automatisch in mehreren Availability Zones repliziert. Diese Snapshots können als Startpunkt für neue Amazon EBS-Datenträger verwendet werden und Daten langfristig schützen. Die Snapshots können außerdem einfach an Kollegen oder andere AWS-Entwickler weitergegeben werden.
  • Mehrere Standorte – wie bereits bei S3 der Fall, ermöglicht auch Amazon EC2 das Ablegen von Instanzen an mehreren Standorten.[7] Amazon EC2-Standorte bestehen aus Regionen und Availability Zones. Availability Zones sind eigenständige Standorte, die so entwickelt wurden, dass sie von Fehlern in anderen Availability Zones isoliert sind. Sie bieten eine kostengünstige Netzwerkverbindung mit geringer Verzögerungszeit zu anderen Availability Zones in derselben Region. Indem Instanzen in separaten Availability Zones gestartet werden, können Anwendungen vor den Fehlern eines einzelnen Standortes geschützt werden. Regionen bestehen aus mindestens einer Availability Zone, sind geografisch verteilt und befinden sich in unterschiedlichen geografischen Zonen oder Ländern.[7] Die Zusage der Amazon EC2-Dienstgütevereinbarung sieht eine Verfügbarkeit von 99,95 % für jede Amazon EC2-Region vor. Amazon EC2 ist gegenwärtig in acht Regionen verfügbar: USA Ost (Nord-Virginia), USA West (Oregon), USA West (Nordkalifornien), EU (Irland), Asien-Pazifik (Singapur), Asien-Pazifik (Tokio), Südamerika (Sao Paulo) und AWS GovCloud.
  • Elastic IP Addresses – Elastic IP Addresses sind statische IP-Adressen, die für dynamisches Cloud-Computing entwickelt wurden. Eine Elastic IP Address ist mit einem Benutzerkonto und nicht mit einer bestimmten Instanz verbunden. Amazon EC2 ermöglicht das Umfahren von Problemen mit einer Instanz oder Software, indem die "Elastic IP Address" schnell an eine Ersatz-Instanz umgeleitet wird. Darüber hinaus besteht die Möglichkeit, den Reverse DNS Eintrag einer Elastic IP Adresse zu konfigurieren.[7]
  • Amazon Virtual Private Cloud – Amazon VPC stellt eine sichere und nahtlose Brücke zwischen der vorhandenen IT-Infrastruktur eines Unternehmens und der AWS-Cloud dar. Amazon VPC ermöglicht Großunternehmen die Verbindung einer vorhandenen Infrastruktur mit isolierten AWS-Rechenressourcen über ein Virtual Private Network (VPN). Außerdem können vorhandenen Verwaltungsfunktionen wie Sicherheitsdienste, Firewalls und Erkennungssysteme von Eindringlingen erweitern, um auch die AWS-Ressourcen einzubeziehen.[7]
  • Amazon CloudWatch – der Webservice Amazon CloudWatch bietet die Überwachung von AWS-Cloud-Ressourcen und beginnt bei Amazon EC2. [7]
  • Auto Scaling – Auto Scaling ermöglicht die automatische Skalierung der Amazon EC2-Kapazität nach oben oder nach unten entsprechend den von Ihnen festgelegten Bedingungen. Wenn Auto Scaling angewendet wird, kann dafür gesorgt werden, dass die Anzahl der verwendeten Amazon EC2 Instanzen bei Anforderungsspitzen nahtlos nach oben skaliert wird, um die Leistung beizubehalten. Während eines Anforderungstiefs wird automatisch nach unten skaliert, um die Kosten gering zu halten. Auto Scaling eignet sich besonders für Anwendungen, bei denen es stündlich, täglich oder wöchentlich zu Unterschieden in der Verwendung kommt. Auto Scaling wird durch Amazon CloudWatch aktiviert und über die Gebühren für Amazon CloudWatch abgedeckt. Es fallen keine zusätzlichen Gebühren an. [7]
  • Elastic Load Balancing – Elastic Load Balancing verteilt automatisch den eingehenden Anwendungsverkehr über mehrere Amazon EC2-Instanzen. Somit kann eine noch höhere Fehlertoleranz erreicht werden: Die Lastverteilungs-Kapazität wird nahtlos an den Anwendungsverkehr angepasst. Elastic Load Balancing erkennt innerhalb eines Pools Instanzen mit schlechtem Zustand und leitet den Datenverkehr automatisch auf Instanzen mit gutem Zustand um, bis die Instanzen mit dem schlechten Zustand wiederhergestellt wurden. Elastic Load Balancing kann innerhalb einer Availability Zone oder auf mehreren Zonen aktiviert sein, um so eine noch konsistentere Anwendungsleistung zu erhalten. Amazon CloudWatch kann genutzt werden, um bestimmte Betriebskennzahlen von Elastic Load Balancing zu erfassen, wie z. B. die Anfrageanzahl und die Anfrageverzögerung. Neben den Gebühren für Elastic Load Balancing fallen keine weiteren Kosten an. [7]
  • High Performance Computing (HPC) Clusters – Kunden mit komplexen Computer-Arbeitslasten wie eng gekoppelten Parallelprozessen oder mit Anwendungen, die empfindlich auf Netzwerkleistung sind, können dieselbe hohe Rechen- und Netzwerkleistung erzielen, die durch maßgeschneiderte Infrastruktur bereitgestellt wird und dabei die Vorteile der Elastizität, Flexibilität und Kosteneinsparungen von Amazon EC2 nutzen. Cluster Compute und Cluster GPU Instances wurden speziell konzipiert, um eine hochleistungsfähige Netzwerkkapazität bereitzustellen, und können programmatisch in Clustern gestartet werden. So wird die geringe Verzögerungszeit des Netzwerks erreicht, die für eng gekoppelte Kommunikation zwischen Netzwerkknoten erforderlich ist. Cluster Compute und Cluster GPU Instances stellen auch signifikant erhöhten Netzwerkdurchsatz bereit und sind daher gut für Kundenanwendungen geeignet, die netzwerkintensive Operationen durchführen müssen.[7]
  • VM Import – VM Import ermöglicht Ihnen, auf einfache Weise Images virtueller Maschinen von einer gegenwärtigen Umgebung in Amazon EC2 Instanzen zu importieren. VM Import ermöglicht, existierenden Investitionen für virtuelle Maschinen zur Erfüllung der Erfordernisse für IT-Sicherheit, Konfigurationsverwaltung und Compliance zu nutzen, indem diese virtuellen Maschinen als verwendungsbereite Instanzen nahtlos in Amazon EC2 eingebracht wird. Dieses Angebot ist ohne zusätzliche Kosten in den standardmäßigen Nutzungsgebühren für Amazon EC2 und Amazon S3 inbegriffen.[7]

Amazon Elastic Beanstalk[Bearbeiten]

Amazon Elastic Beanstalk stellt sowohl Verwaltung als auch die Distribution von verschiedenen Apps zur Verfügung. So kann Elastic Beanstalk als steuernde Komponente vieler anderen Offerings verstanden werden. Im Java Umfeld stellt Elastic Beanstalk folgende Funktionen zur Verfügung:[8]

  • direkte Verbindung zu Eclipse
  • automatische Distribution von WAR-Dateien (Java Web Application Archives)
  • Bereitstellen einer eigenen URL für die entwickelte Applikation

So ist es auch Amazon Elastic Beanstalk, welches im Bedarfsfall alle Komponenten so orchestriert, dass neue Server zur Lastverteilung gestartet werden.

Lösungen[Bearbeiten]

Im Folgenden werden ausgewählte Lösungen dargestellt, die Anwendungsbereiche darstellen, in denen AWS eingesetzt werden können. Die Darstellung basiert auf der Beschreibung auf der offiziellen AWS Homepage. Die Auswahl der folgenden fünf Lösungen geht auf die subjektive Bewertung der Wichtigkeit und Neuartigkeit der Lösungen zurück. Weitere Lösungen sind auf der AWS Homepage gelistet.

Gaming[Bearbeiten]

AWS bieten die Möglichkeit, Spiele, insbesondere mobile, soziale und browserbasierte, in der Cloud auszuführen. Ein gewichtiger Vorteil zeigt sich dabei in der Skalierbarkeit. Zudem werden Auslastungsschwankungen ausgeglichen und so Kostensenkungen ermöglicht. Neue Spiele können durch die AWS schneller und flexibler bereitgestellt werden. Auf den sich rapide verändernden Kundenbedarf kann somit in Minutenschnelle reagiert werden. Acht der beliebtesten zehn Facebook-Spiele werden in AWS ausgeführt, darunter die bekannten Spiele FarmVille und Restaurant City.

Weitere Informationen sind auf der AWS Homepage dargestellt.

SAP[Bearbeiten]

Es gibt die Möglichkeit, SAP-Lösungen auf AWS zu betreiben. Die SAP-zertifizierten Amazon EC2 Instanzen können in Produktivumgebungen eingesetzt werden und ermöglichen die schnellere Markteinführung. Zusätzlich können Unternehmen ihre vorhandenen Software-Lizenzen ohne zusätzliche Lizenzgebühren nutzen. Die Verwaltung der Infrastruktur wird ebenfalls vereinfacht. Für Unternehmen hebt sich die Amazon Cloud in diesem Zusammenhang dahin gehend von anderen Cloudanbietern ab, dass die AWS Ressourcen durch SAP und AWS getestet wurden. Die SAP hat die Leistung der AWS überprüft und mit Standards zertifiziert.

Weitere Informationen sind auf der AWS Homepage dargestellt.

Bildung[Bearbeiten]

Bildungseinrichtungen können AWS nutzen, um beispielsweise neue IT-Projekte in einer Cloud-Infrastruktur zu erstellen. Zudem können Kurse gehostet oder Forschungsprojekte mithilfe der AWS realisiert werden. Das Programm "AWS in Education" richtet sich an Schulungsleiter, Forscher und Studenten. Diese Personengruppen können kostenlose Nutzungskontingente nutzen und somit in eingeschränktem Maße auf die Ressourcen der Amazon Cloud zugreifen.

Weitere Informationen sind auf der AWS Homepage dargestellt.

Notfallwiederherstellung[Bearbeiten]

Die AWS können genutzt werden im Falle des Ausfalls eines IT-Systems die schnelle Wiederherstellung zu ermöglichen. Dies ist für Unternehmen jeder Größenordnung möglich. Die Kostenersparnis bildet sich in diesem Fall in der Einsparung eines zweiten physischen Rechenzentrums ab. Die AWS bieten mehrere Services, mit denen sich Daten und auch die IT-Infrastruktur schnell wiederherstellen lassen.

Weitere Informationen sind auf der AWS Homepage dargestellt.

High Performance Computing[Bearbeiten]

Das High Performance Computing wird verwendet, um komplexe Probleme mithilfe der Amazon Cloud Infrastruktur zu lösen. Besonders wichtig dafür sind eine große Bandbreite, eine geringe Latenzzeit sowie eine enorme Rechenkapazität. Die Anschaffung und Wartung von lokalen Systemen ist somit nicht notwendig. Durch mehrere EC2 Instanzen, die in Clustern zusammengeschaltet sind, können die Ressourcen bedarfsgerecht ausgelastet werden. Die Berechnungen erfolgen somit schneller und günstiger.

Weitere Informationen sind auf der AWS Homepage dargestellt.

Case Studies[Bearbeiten]

Im Folgenden werden zwei Case Studies aufgezeigt, die den Nutzen der Amazon Web Services für Unternehmen darstellen. Die Darstellungen sind angelehnt an die Case Studies, die auf der offiziellen AWS Homepage zu finden sind. Die Auswahl folgender Unternehmen basiert auf deren unterschiedlichen Einsatzszenarien.

Xignite[Bearbeiten]

Das Unternehmen Xignite bietet Finanzmarktdaten on-demand für Kunden an [9]. Dieses Geschäftsmodell birgt in sich Auslastungsschwankungen, die das Unternehmen durch AWS abfangen möchte. Das Unternehmen bietet ca. 50 Application Programming Interfaces (= API) an, die von Kunden verwendet werden können [10]. Zu den über 900 Kunden des Unternehmens gehören unter anderem ING, Forbes.com und Citi [10].

Xignite verwendet die AWS Amazon Elastic Cloud Compute und den Amazon Simple Storage Service um die Finanzmarktdaten ihren Kunden zur Verfügung zu stellen. Das folgende Zitat stammt von Leo Chan, dem CTO von Xignite: „We estimate that the overall cost savings including hardware, infrastructure and network bandwidth, and personnel, is estimated to be in the hundreds of thousands of dollars“ [11]. Desweiteren wird von den CTO ausgesagt, “AWS is a leader in providing redundant computing infrastructure with multiple availability zones and a high level of economies of scale in computing and network bandwidth costs" [11].

Neben der Kostenersparnis wird dargestellt, dass Xignite nun schnell die Services skalieren und expandieren kann [11]. Zudem wird der Ressourceneinsatz im Unternehmen verbessert. Chan formuliert die Vorteile der AWS wie folgt: “Capacity is added during peak times and reduced off-peak and there is no need for standby capacity for redundancy. It is highly cost-prohibitive to achieve this with fixed capacity and traditional computing models” [11].

Die Kostenstruktur der AWS wird dabei an die Kunden umgelegt. Obwohl typischerweise jährliche und monatliche Beträge gezahlt werden, wird versucht Zahlungen von Kunden für Überkapazitäten zu vermeiden [12].

Für weitere Informationen kann die offizielle Beschreibung der AWS Homepage herangezogen werden.

Indianapolis 500[Bearbeiten]

Das Unternehmen Indianapolis Motor Speedway stellt eine Streamingplattform für Motorsportevents für über 3 Millionen Zuschauer. Die dadurch entstehenden Unterschiede in den Auslastungen sollen durch AWS abgefangen werden.

Normalerweise werden ca. 50 Server eingesetzt, allerdings setzt das Unternehmen zu Rennzeiten Amazon EC2 ein, um den Webtraffic verwalten zu können. Im Frühling 2008 lagen die Einsparungen für das IT Budget bei über 50% [13]. Dies wird von Adrian Payne, Manager der Online-Dienstleistungen des Indianapolis Motor Speedways, bestätigt [14]. Desweiteren setzt das Unternehmen S3 ein, um über 100.000 (historische) hochauflösende Bilder abzuspeichern [15][16].

Payne schlussfolgert: “Amazon Web Services has allowed us to grow our business to meet an explosive demand for our live events. We have been able to bring new applications to market in weeks instead of months." [16].

Für weitere Informationen kann die offizielle Beschreibung der AWS Homepage herangezogen werden.

Kostenvergleich[Bearbeiten]

Amazon Cloud Services bieten neben der Skalierbarkeit auch oftmals finanzielle Vorteile. Vergleicht man die Kosten einer Amazon Cloud Lösung mit denen eines lokalen Rechenzentrums, so können unter Umständen Kostenvorteile entstehen.

Im Folgenden wird ein Beispiel erläutert, dass sich auf Han[17] bezieht. Dabei wird ein Vergleich der Rechenleistung durchgeführt. Es werden keine Kosten für Backup, Ausfälle, Versicherung und Trainings verglichen. Diese Kostenblöcke dürften jedoch bei einer Cloud Lösung geringer ausfallen, da beispielsweise kaum Trainings für Systemadministratoren notwendig sind, keine Versicherungen für die lokalen Server anfallen und kein kostenintensives zweites lokales Backupsystem notwendig ist.

In dem folgenden Beispiel wird eine „AWS Small“ Instanz mit einer Laufzeit von fünf Jahren den Kosten der Haltung eines physischen Rechenzentrums gegenübergestellt. Die entstehenden Kosten sind in der folgenden Tabelle dargestellt:

Kostenart Amazon Instanz (in $) Lokales Rechenzentrum (in $)
Serverkosten 2.400 2.500 - 3.000
Raumkosten 0 1.250 - 1.750
Elektrizität 0 2.000 - 2.500
Administration 0 - 1.000 3.500 - 7.000
Support 1.750 - 2.000 1.750 - 2.000
Summe 4.150 - 5.400 11.000 - 16.250

Kostenvergleich zwischen der Amazon Cloud und einem lokalen Rechenzentrum[17]

Die Beschreibung von [17] wird verwendet und angepasst. Die exakt ermittelten Kosten wurden mit minimalen und maximalen Werten ersetzt, sodass die Ungenauigkeit aufgrund von Preisschwankungen in Betracht gezogen wird.

Für die Amazon Instanz wird einer EC2 – Small Instanz für $40 pro Monat herangezogen. Obwohl die Administrationskosten möglicherweise wegfallen, wird in diesem Kostenvergleich ein Wert von maximal $1000 für die fünf Jahre angegeben. Dieser Wert ist in Relation zu den Administrationskosten des lokalen Rechenzentrums entstanden. Da von Amazon direkt kein Support angeboten wird, werden die Werte des lokalen Rechenzentrums verwendet.

Die Serverkosten entsprechen bei dem lokalen Rechenzentrum $2500-$3000. Han[17] wählte für sein Beispiel einen Dell PowerEdge Server mit Intel Xeon E56302.53 Ghz. Im Oktober 2010 kostete dieser Server $2658[17]. Die Raumkosten werden von [17] auf $300 pro Jahr und pro Server geschätzt. Die Elektrizitätskosten wurden aufgrund des Preises eine Kilowattstunde von $0,10, einem Verbrauch von 0,5 Kilowatt pro Stunde und einer durchgängigen Laufzeit errechnet, sodass sich diese Kosten sich im gesamten Zeitraum auf $2190 summieren: Das Jahresgehalt eines Administrators wird auf $70.000 inklusive Zulagen geschätzt. Wendet ein Administrator 1-2 % seiner Arbeitszeit für diesen Server auf (entspricht 4,8 - 9,6 Minuten pro Tag bei einer 40-Stunden-Woche), kann das Gehalt des Administrators für fünf Jahre ($350.000) mit 1 % bzw. mit 2 % multipliziert werden, um so sie Administrationskosten zu bestimmen. Um einen Support für fünf Jahre zu erhalten, werden 5/3 der Kosten eines Wartungsvertrags für drei Jahre angesetzt (5/3 x $1125 = 1875$).

Erstellen einer AWS-Instanz[Bearbeiten]

Dialog zum Erstellen einer EC2-Instanz

In dieser Sektion soll kurz das Erstellen einer AWS und die Einfachheit dieses Vorgangs demonstriert werden. Zunächst muss ein Account bei Amazon bestehen, welche mit einer Kreditkartennummer ausgestattet ist, sodass alle in Anspruch genommenen Dienste in Rechnung gestellt werden können.

Ist man registriert, kann man die AWS Management Console aufrufen. Einmal gestartet hat man im Reiter "EC2" einen Überblick über alle gestartete Instanzen. Klickt man nun auf „Launch Instance“, so erscheint ein Dialog, welche die Möglichkeit "Quick Launch Wizard" und "Classic Wizard" bietet. Der Unterschied ist naheliegend. Während man im "Classic Wizard" umfassende Konfigurationsmöglichkeiten besitzt, ist der "Quick Launch Wizard" auf wesentliche Einstellungen beschränkt.

Bei beiden Einrichtungsassistenten muss im zweiten Schritt ein Image ausgewählt werden, mit welchem die EC2-Instanz gestartet werden soll. Neben den vorkonfigurierten Amazon-Images existieren mittlerweile eine große Anzahl sogenannter Community Images, welche beispielsweise komplett vorkonfigurierte Instanzen von Apache2-Servern bereitstellen. Sogar dieses Wiki basiert auf solch einem Image und wird auf einer Amazon EC2 Instanz gehostet.

In den folgenden Schritten können im Classic Wizard noch die Schnelligkeit (bzw. die Speicherkapazität) der Maschine gewählt und der geografische Standpunkt der Instanz festgelegt werden. Letztendlich kann noch ein sogenannter "Security-Key" eingerichtet werden, welche zusätzliche Sicherheit bei der Verbindung zur Amazon-Instanz garantiert.

Insgesamt dauert der Prozess, eine solche Instanz zu starten nicht länger als 2 Minuten, nach welchen es möglich ist, auf die Instanz via SSH zuzugreifen.

Selbstentwickelte Beispielapplikation[Bearbeiten]

Die bereits vorgestellten Produkte des Amazon Web Services Portfolios bieten für Entwickler ein zweckdienliches Framework zur schnellen und effizienten Entwicklung einer hochverfügbaren und skalierbaren Webanwendung. Um das hierfür notwendige Zusammenspiel der einzelnen Produkte zu demonstrieren, wurde im Rahmen des Cloud Computing Workhops eine simpler Youtube Downloader umgesetzt: Wie in untenstehender Abbildung zu sehen wird dem Anwender dadurch eine einfache Möglichkeit gegeben, nach der Angabe einer Youtube-URL das entsprechende Video als MPEG-Datei abzuspeichern. Da der serverseitige Beschaffung und Codierung des Videos einen gewissen Rechenaufwand mit sich zieht, eignet sich das Beispiel optimal dazu, um die Load Balancing und Skalierungsfunktionen der Amazon Cloud zu zeigen.

Screenshots des Youtube Downloaders: Zunächst muss eine Youtube-URL angegeben werden (1), anschließend wird der Fortschritt der Berechnungen in Form eines Fortschrittsbalken dargestellt (2) und abschließend das Video zum Download angeboten (3).

Die untenstehende Abbildung stellt schematisch die Architektur der Amazon Elastic Beanstalk Anwendung dar: Anforderungen des Clients werden zu aller nächst vom Amazon Load Balancing System entgegengenommen und je nach aktueller Lastverteilung an die einzelnen EC2 Instanzen weitergeleitet. Von diesen wird in einem ersten Schritt lediglich eine HTML-Seite mit einem Formular zur Angabe der Youtube-URL ausgegeben. In einem zweiten Schritt wird dann die angeforderte URL entgegengenommen und der Warteschlange hinzugefügt. Am Client wird in diesem Fall eine Fortschrittsanzeige angezeigt, wobei mittels AJAX in regelmäßigen Abständen der aktuelle Stand der Umwandlung abgefragt wird. Mittels der von Amazon zur Verfügung gestellten Warteschlange kann der Prozess der Videobreitstellung auf beliebig viele EC2 Instanzen verteilt werden und so eine dynamische Lastverteilung realisiert werden. Eine Amazon SimpleDB dient hierbei zur Kommunikation zwischen den einzelnen Prozessen. Ist das Video schließlich bereit zum Download und auf S3 abgespeichert, kann der Downloadlink an den Client ausgeliefert werden.

Schematische Darstellung der Architektur der Beispielanwendung

In den folgenden Abschnitten soll kurz auf die einzelnen Produkte und die Umsetzung eingegangen werden.

Codebeispiele geben dabei nur die wesentlichsten Aspekte der Anwendung wieder. Sie wurden gekürzt und von Fehlerbehandlungsroutinen bereinigt.

Amazon Elastic Beanstalk[Bearbeiten]

Der Amazon Elastic Beanstalk bietet wie bereits oben beschrieben eine automatische Distribution von Java Web Applications in Form von WAR-Archiven. Alle nötigen Komponenten wie EC2-Instanzen, Load Balancing, Datenbankanbindungen und ähnliches werden dabei automatisch angelegt und verwaltet. Durch die Installation eines Eclipse Plug-ins kann die Anwendung dabei direkt aus der Entwicklungsumgebung verwaltet, gestartet und sogar debugged werden.

Um die Entwicklung weiter zu vereinfachen, stellt Amazon zudem eine Reihe von Java-Programmbibliotheken in Form eines Amazon Web Services Software Developer Kits (AWS SDK) zur Verfügung. In diesem ist unter anderem auch das bekannte Spring Framework enthalten. Dabei handelt es sich um quellenoffenes Framwork welches das Ziel verfolgt die Entwicklung mit Java/Java EE zu vereinfachen und beispielsweise eine Reihe von Funktionalitäten zur Entkopplung von Modell, Präsentation und Steuerung anbietet (Spring MVC).

Dies ermöglicht beispielsweise die Konfiguration eines URL-Mappings direkt in der zugehörigen Java-Methode. Zudem kann so die Präsentation vollständig losgelöst von der restlichen Programmlogik in Java Server Pages (JSP) ausgelagert werden:

	// WebController.java
	@Controller
	public class WebController {
		@RequestMapping(value = "/home.do", method = { RequestMethod.GET,
				RequestMethod.POST })
		public String doHome(ModelMap model, HttpSession session) {

			// Get the user object
			User u = User.requestUser(session.getId());

			model.addAttribute("debug", "<p> Your session ID is: " + u.getSessionID() + "</p>");

			return "home";
		}
	}

Daneben wurde für die Entwicklung auf Code eines freien Youtube Downloaders (ytd2)[18] zugegriffen und dieser mittels der Programmbibliothek Resty[19] umstrukturiert.

Amazon Simple Queue Service[Bearbeiten]

Ein Kernbestandteil der Anwendung ist die Verwendung des Amazon Simple Queue Services zur Verteilung der Videocodierung auf mehrere Server. Dies ermöglicht eine problemlose Skalierung des Webservices und erleichtert zudem die Überwachen: Amazon stellt beispielsweise spezielle Werkzeuge bereit, die stets die aktuelle Länge der Warteschlange überwachen und darauf basierend je nach Konfiguration z. B. zusätzliche EC2 Instanzen konfigurieren und starten.

Meldungen können dabei in Form von Zeichenketten der Warteschlange hinzugefügt werden. Beachtenswert ist hier die Fehlertoleranz des Queue Services: Da Nachrichten explizit aus der Warteschlange entfernt werden müssen, verweilen sie typischerweise dort bis zur erfolgreichen Abarbeitung der Anforderung. Sollte beispielsweise ein Worker-Thread abstürzen oder unerwartet länger brauchen, wird die Nachricht automatisch einem weiteren Thread angeboten und dort verarbeitet. Dies führt zwar ggf. dazu, dass Elemente mehrfach zugestellt werden, garantiert im Gegensatz dazu jedoch auch die erfolgreiche Ausführung.

Der folgende Codeausschnitt zeigt zum einen wie eine neue Nachricht, d. h. eine Video-Anfrage, der Warteschlange hinzugefügt wird. Zum anderen ist der Quelltext wiedergegeben, der dafür sorgt, dass die Warteschlange in regelmäßigen Abständen von einem Worker-Thread auf neue Nachrichten hin überprüft und abgearbeitet wird. Beim erstmaligen Starten der Anwendung, d. h. bei der Initialisierung des Server Contexts, werden auf jeder EC2 Instanz mehrere dieser Threads gestartet.

@Controller
public class WebController {
	@RequestMapping("/processing.do")
	public String doProcessing(ModelMap model, HttpSession session,
			@RequestParam("vUrl") String vUrl) {
		Video v = new Video();
		// ...
		
		// submit request
		Configuration config = Configuration.getInstance();
		AWSCredentials creds = new BasicAWSCredentials(
				config.getProperty("accessKey"),
				config.getProperty("secretKey"));
		AmazonSQS sqs = new AmazonSQSClient(creds);

		String queueUrl = sqs.createQueue(
				new CreateQueueRequest(config.getProperty("queue")))
				.getQueueUrl();
		// transmits the video ID (local)
		SendMessageRequest req = new SendMessageRequest(queueUrl, v.getId());

		sqs.sendMessage(req);
	}
}

public class Worker extends Thread {
	@Override
	public void run() {
		// ...

		ReceiveMessageRequest receiveMessages = new ReceiveMessageRequest(queueUrl);
		receiveMessages.withMaxNumberOfMessages(1);
		receiveMessages.setVisibilityTimeout(240);

		while (true) {
			List<Message> messages = sqs.receiveMessage(receiveMessages).getMessages();

			if (messages.size() > 0) {
				Message m = messages.get(0);

				processMessage(m);

				DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest(queueUrl, m.getReceiptHandle());
				sqs.deleteMessage(deleteMessageRequest);
			}

			Thread.sleep(1000);
		}
	}
}


Amazon Simple DB[Bearbeiten]

Da der Amazon Simple Queue Service nur die einseitige Übermittlung kleiner Nachrichten erlaubt, wird die Amazon Simple DB von der Anwendung verwendet, um Session- und Video-Informationen zu Verwalten. Auch hier ist die Verwendung äußerst simple, da Java Objekte mittels SimpleJPA einer Java Persistence API (JPA) für Amazon SimpleDB direkt in die Datenbank gespeichert werden können und auf ebenso einfache Art und Weise wieder abgefragt werden können. Die Skalierung der verteilten Datenbank und die Verwaltung gleichzeitiger Schreib- und Lesezugriff werden dabei vollständig von Amazon übernommen.

public class Video {
	public void saveVideo() {
		Map<String, String> properties = new HashMap<String, String>();
		String key = Configuration.getInstance().getProperty("accessKey");
		properties.put("lobBucketName", key + "-youtube-lob");

		EntityManagerFactoryImpl factory = new EntityManagerFactoryImpl("Youtube", properties);

		EntityManager em = null;

		em = factory.createEntityManager();
		em.persist(this);			
		em.close();
	}
	
	public static Video requestVideo(String id) {		
		// Request Video from database ..
		Video v = null;		
		Map<String, String> properties = new HashMap<String, String>();
		String key = Configuration.getInstance().getProperty("accessKey");
		properties.put("lobBucketName", key + "-youtube-lob");

		EntityManagerFactoryImpl factory = new EntityManagerFactoryImpl("Youtube", properties);

		EntityManager em = null;
		
		em = factory.createEntityManager();
		Query query = em.createQuery("select video from de.teibrich.youtube.util.entity.Video v where v.id=:id");
		query.setParameter("id", id);
		v = (Video) query.getSingleResult();
		em.close();		
		
		return v;
	}
}

Amazon Simple Storage Service (S3)[Bearbeiten]

Zur Speicherung der zum Download bereiten Videos wird die Speicherlösung Amazon Simple Storage Service (S3) verwendet. Durch die von Amazon zur Verfügung gestellten Programmbibliotheken ist es auch hier denkbar, einfach beliebige Datenmengen in der Cloud abzuspeichern und anschließend zum Download bereitzustellen. Die Speicherung erfolgt dabei in sogenannten Buckets gespeichert und können mittels spezieller Berechtigungsobjekte im Detail vor unberechtigten Datenzugriffen geschützt werden. Besonders geeignet für die durch die Anwendung generierten Daten ist der Reduced Redundancy Storage (RRS) von S3. Dabei handelt es sich um eine Speichermöglichkeit mit geringerer Redundanz und damit geringeren Kosten.

public class StorageObject {
	private String bucketName;
	private File data;
	private String storagePath;
	// ...
}

public class S3StorageManager {
	private static AmazonS3 s3client;
	static {
		Configuration config = Configuration.getInstance();
		AWSCredentials creds = new BasicAWSCredentials(
				config.getProperty("accessKey"), 
				config.getProperty("secretKey"));
		s3client = new AmazonS3Client(creds);
	}
	
	public void store(StorageObject obj) {
		// Make sure the bucket exists before we try to use it
		checkForAndCreateBucket(obj.getBucketName());

		PutObjectRequest request = new PutObjectRequest(obj.getBucketName(), obj.getStoragePath(), obj.getData());
		request.setStorageClass(StorageClass.ReducedRedundancy);
		s3client.putObject(request);
	}
}

Amazon Elastic Compute Cloud (EC2) and Amazon Elastic Load Balancing[Bearbeiten]

Unabhängig von den einzelnen Speicher- und Datenbankkomponenten wird die Anwendung letztendlich stets auf einer EC2 Instanz ausgeführt. Ungeachtet dieser zentralen Rolle kommen die EC2-Instanzen im Rahmen der Entwicklung und Konfiguration kaum bis nicht zum Tragen. Dies entspricht auch der Grundidee des Elastic Beanstalks und der Amazon Cloud als solches: Der Entwickler spezifiziert nicht wo und wie etwas ausgeführt werden soll, sondern lediglich wie die einzelnen abstrakten Komponenten wie Datenbank und Speicher zusammenarbeiten müssen, um einen Request des Clients zu erfüllen. Alles andere passiert vollständig automatisch im Hintergrund.

Wird ein Amazon Cloud Projekt aus der Entwicklungsumgebung Eclipse ausgeführt, wird der Quellcode als WAR-Archiv in die Amazon Cloud hochgeladen und eine neue Anwendungsumgebung angelegt und gestartet. Dieser wird nun zum einen eine Subdomain zugewiesen, zum anderen alle notwendigen Ressourcen zugewiesen: Je nach Konfiguration werden dazu automatisch EC2-Instanzen erstellt und dort die Anwendung gestartet. Nach wenigen Minuten ist so die Anwendung im Internet verfügbar. Ab diesem Zeitpunkt überwacht Amazon in regelmäßigen, einstellbaren Minuten- oder Sekundenabständen die Verfügbarkeit und Auslastung der Anwendung bzw. der entsprechenden EC2-Instanzen. Nichtverfügbare Instanzen werden dadurch automatisch neu gestartet und bei hoher Auslastung werden innerhalb von wenigen Minuten zusätzliche EC2-Instanzen erstellt und als Ressourcen zur Anwendung hinzugefügt. Um Kosten zu sparen, werden zudem überflüssige Ressourcen in Zeiten geringer Auslastung wieder automatisch entfernt. Die Anwendung skaliert also vollautomatisch.

Einzelnachweise[Bearbeiten]

  1. http://aws.typepad.com/aws/2009/02/ Amazon Web Services Blog – Amazon.com. Abgerufen am 30. Mai 2012.
  2. http://aws.amazon.com/de/products/ Amazon Web Produkte – Kurzbeschreibung. Amazon.com. Abgerufen am 30. Mai 2012.
  3. 3,0 3,1 http://aws.amazon.com/de/s3/ Amazon S3 – Kurzbeschreibung. Amazon.com. Abgerufen am 30. Mai 2012.
  4. 4,0 4,1 http://aws.amazon.com/de/simpledb/ Amazon Simple DB – Kurzbeschreibung. Amazon.com. Abgerufen am 26. Mai 2012.
  5. http://www.julianbrowne.com/article/viewer/brewers-cap-theorem CAP Theorem Overview – Introduction to CAP. julianbrowne.com. Abgerufen am 30. Mai 2012.
  6. 6,0 6,1 http://aws.amazon.com/de/sqs/ Amazon Simple Queue Service – Kurzbeschreibung. Amazon.com. Abgerufen am 30. Mai 2012.
  7. 7,00 7,01 7,02 7,03 7,04 7,05 7,06 7,07 7,08 7,09 7,10 http://aws.amazon.com/de/ec2/ Amazon EC2 – Kurzbeschreibung. Amazon.com. Abgerufen am 30. Mai 2012.
  8. http://aws.amazon.com/de/elasticbeanstalk/ Amazon BeanStalk – Kurzbeschreibung. Amazon.com. Abgerufen am 30. Mai 2012.
  9. http://www.xignite.com/ Xignite (Hrsg.) (2012) – Xignite - On-Demand Financial Market Data. Abgerufen am 22. Mai 2012.
  10. 10,0 10,1 http://www.xignite.com/About/Default.aspx Xignite (Hrsg.) (2012) – About Xignite. Abgerufen am 22. Mai 2012.
  11. 11,0 11,1 11,2 11,3 http://cto.ulitzer.com/node/926945 CTO Ulitzer (Hrsg.) (2009) – Xignite Expands Using Amazon EC2 and Amazon S3. Abgerufen am 22. Mai 2012.
  12. http://searchcloudcomputing.techtarget.com/tutorial/How-one-growing-firm-uses-Amazons-EC2 SearchCloudComputing (Hrsg.) (2010) – How one growing firm uses Amazon's EC2. Abgerufen am 22. Mai 2012.
  13. http://www.allthingsdistributed.com/2008/10/using_the_cloud_to_build_highl.html Vogels, W. (2008) – Using the Cloud to build highly-efficient systems. Abgerufen am 22. Mai 2012.
  14. http://opensource.sys-con.com/node/705788/print o.V. (2008) – Amazon Web Services senkt die Preise für Amazon S3. Abgerufen am 22. Mai 2012.
  15. https://www.deloitte.com/assets/Dcom-Global/Local%20Assets/Documents/TMT/cloud_-_market_overview_and_perspective.pdf Deloitte (Hrsg.) (2009) – Cloud Computing Forcasting Change, S. 18. Abgerufen am 22. Mai 2012.
  16. 16,0 16,1 http://aws.amazon.com/de/solutions/case-studies/indianapolis-500 Amazon (Hrsg.) (2012) – AWS Case Study: Indianapolis 500. Abgerufen am 22. Mai 2012.
  17. 17,0 17,1 17,2 17,3 17,4 17,5 Information Technology and Libraries Han, Y. (2011) – Cloud Computing: Case Studies and Total Costs of Ownership, S. 198-206.
  18. http://sourceforge.net/projects/ytd2/ o.V. (2012) – java YouTube video Downloader (ytd2). Abgerufen am 29. Mai 2012
  19. http://beders.github.com/Resty/Resty/Overview.html o.V. (2012) – Resty - A simple HTTP REST client for Java. Abgerufen am 29. Mai 2012