Amazon Web Services ist einer der führenden Cloud Computing Dienstleister, der seit 2006 über Webservice-Schnittstellen IT-Infrastruktur über das Internet zur Verfügung stellt.
Typen von Clouds
Um die Dienstleistungen von Amazon besser einordnen zu können, soll kurz auf die drei Typen von Clouds eingegangen werden:
Infrastruktur
- Unterste Schicht im Cloud Computing und auch als IaaS (Infrastructure-as-a-Service) bekannt.
- Bereitstellen von IT-Infrastruktur, die man aus dem eigenen Rechenzentrum kennt: virtuelle Server, Storage, Lastverteilung via Loadbalancer, usw.
- Betrieb und Wartung der Hardware übernimmt der Anbieter. Serverkonfiguration bis auf Betriebssystemebene liegt in eigener Hand. Man erhält damit hohe Flexibilität, aber auch höchsten Aufwand im Vergleich zu den anderen Typen.
- Anbieter: Amazon Web Services, Rackspace, GoGrid, Linode, ElasticHosts, SliceHost, FlexiScale
Plattform
- PaaS (Platform-as-a-Service)
- Bei diesem Cloud Typ liegt der Fokus auf den Betrieb einer eigenen Software in einer vorgegebenen Software-Plattform. Der Anbieter kümmert sich sowohl um den Betrieb der Hardware und Serversoftware, als auch um die Skalierung der Anwendung sprich um die Verteilung auf mehrere Serversysteme. Der Anwender kann sich somit vollständig auf die Entwicklung der Software konzentrieren und muss diese für den Betrieb nur in die Cloud hochladen.
- Anbieter: Google App Engine, Windows Azure, Force.com von Salesforce.com
Anwendung
- Oberste Schicht im Cloud Computing und bekannt als SaaS (Software-as-a-Service), früher auch als Software-on-Demand bezeichnet.
- SaaS stellt Software über das Internet bereit, die jederzeit und von jedem Ort über einen Browser unabhängig vom verwendeten Betriebssystem genutzt werden kann. Die Wartung, Betrieb und Weiterentwicklung der Hard- und Software, sowie die Sicherung der in der Software generierten Daten übernimmt vollständig der Anbieter.
- Beispiele: Google Apps, Salesforce.com, uvm.
Produkte von Amazon Web Services
Simple Storage Service (kurz S3)
- Bereitstellung von Storage über eine REST und SOAP Schnittstelle.
- Mögliche Operationen: Schreiben, Lesen und Löschen von Datenobjekten von 1 Byte bis zu 5GB. Die Anzahl der Objekte ist "unbeschränkt".
- Einer der ersten Produkte von Amazon Web Services.
- Wird auch als interner Storage für andere Amazon Web Services Produkte verwendet, wie z.B. als Ablage von Serverimage-Dateien (AMIs, siehe EC2) oder Snapshots von Blockstorage-Volumes (siehe EBS).
- Wählbare Standorte des Storages: 2 x USA (N. Virginia & N. California), 1 x EU (Irland)
- Preise: ca. $0.150 per GB
CloudFront
- Globale (weltweite) Bereitstellung von Inhalten (Daten) und dadurch beste Voraussetzungen für den Datenzugriff mit geringen Latenzzeiten und hohen Bandbreiten.
- Hierzu werden beliebige Daten, die ursprünglich auf S3 liegen, automatisch auf CloudFront-Server rund um den Globus verteilt. Aktuell sind 15 Server im Einsatz: 8x USA, 4x Europa, 3x Asien. Die Daten sind unabhängig vom Standort über eine eindeutige URL erreichbar.
- Durch geschicktes Routing erfolgt der Datenzugriff trotz gleicher URL je nach eigenen Standort zum naheliegensten CloudFront-Server.
- Aktuelle Einschränkung: Kein Zugriff per HTTPS, bisher nur HTTP.
- Preise: ca. $0.150 - $0.201 per GB
Elastic Compute Cloud (EC2)
- Bereitstellung von virtuellen Serverinstanzen, die Virtualisierung basiert auf Xen.
- Es stehen 8 vorkonfigurierte Servergrößen zur Auswahl. Von 32-bit Systemen mit minimal 1.7GB RAM und einer Recheneinheit bis hin zu 64-bit Systemen mit bis zu 68.4GB RAM und 26 Recheneinheiten. Eine Recheneinheit entspricht dabei etwa einem 1.0 - 1.2Ghz 2007 Xeon Prozessor.
- Wählbare Standorte der Server: 2 x USA (N. Virginia & N. California), 1 x EU (Irland).
- Der zur Verfügung gestellte, lokale Festplattenspeicher ist nur zur Laufzeit des Servers persistent und ist nach einem Stoppen oder Crash des Servers verloren. Persistenter Speicher steht über das zusätzliche Amazon Produkt EBS zur Verfügung.
- Die Server sind standardmäßig über einen DNS-Namen (CNAME) und über eine dynamisch vergebene, geNATete IP-Adresse erreichbar.
- Bei Bedarf kann einer Server-Instanz eine feste IP-Adresse, eine so genannte "Elastic IP Address" kostenlos zugewiesen werden. Es fallen dafür nur Kosten an, wenn der Server nicht im Betrieb ist.
- Preise: Von $0.085 bis $2.40 pro Stunde. Die Abrechnung erfolgt pro angebrochene Stunde. Kosten pro reservierte IP-Adresse, wenn der Server nicht betrieben wird: $0.01 pro Stunde.
Elastic Block Store (EBS)
- Persistener und blockbasierter Storage für EC2-Instanzen, vergleichbar mit einem SAN im klassischen Rechenzentrum.
- Es können Volumes (vergleichbar mit SAN LUNs) von der Größe von 1GB bis 1TB angelegt werden.
- Von EBS Volumes lassen sich beliebig viele Snapshots erstellen lassen, die auf S3 abgelegt werden.
- Preise: ca. $0.10 - $0.11 pro belegten GB in einem Monat
CloudWatch
- Monitoring der Server-Instanzen: CPU Auslastung, Storage Lese- und Schreibzugriffe, Netzwerktraffic.
- Dient u.a. als Grundlage für die Lastverteilung mit den zusätzlichen Produkten Amazon Elastic Load Balancing und Autoscaling.
- Preise: $0.015 pro Stunde pro überwachter Server
Elastic Load Balancing
- Virtuelle Loadbalancer zum Verteilen von Anfragen auf mehrere EC2-Instanzen.
- Erkennung des Zustands der Zielserver. Ausgefallene Server werden automatisch aus den Loadbalancer entfernt, wieder verfügbare erneut hinzugefügt.
- Verteilung der Last zu EC2-Instanzen in unterschiedliche Verfügbarkeitszone.
- Erhöhte Verfügbarkeit durch Starten von mehreren Loadbalancern an unterschiedlichen Standorten.
- Preise: $0.025 pro Balancer und $0.008 pro GB verarbeitete Anfragen.
Autoscaling
- Skalierung eines Servercluster durch automatisches Hinzufügen und Entfernen von Serverknoten.
- Die Auslastung der Server wird mittels CloudWatch ermittelt. Beim Über- bzw. Unterschreiten von frei konfigurierbaren Schwellwerten (z.B. CPU-Last bei 80%) werden automatisch neue Serverknoten gestartet und zum Loadbalancer hinzugefügt bzw. bestehende Serverknoten heruntergefahren und vom Loadbalancer entfernt.
- Es kann eine minimale und maximale Anzahl an Servern konfiguriert werden.
- Preise: Keine zusätzlichen Kosten, im Preis von CloudWatch enthalten.
Skalierung
Interessantes Dokument von Sun über Kosten und Skalierung bei horizontalen und vertikalen Server-Systemen: PDF
Schritt 1a: Horizontale Skalierung ohne Clustering
Bei der horizontalen Skalierung werden Funktionen auf zusätzliche Server verteilt. Im ersten Schritt erst einmal ohne Clustering, also pro Funktion nur ein Server:
Schritt 1b: Vertikale Skalierung
Von einer vertikalen Skalierung spricht man, wenn Systeme durch leistungsfähigere ausgetauscht werden. Eine Leistungssteigerung erhält man üblicherweise durch den Einsatz von mehr CPU-Kernen (SMP ), mehr Arbeitsspeicher und einer schnelleren IO (Festplatte, Netzwerk). Bei Amazon Web Services lässt sich eine vertikale Skalierung leicht realisieren: Stoppen der bestehenden EC2-Instanz und Erstellen einer neuen, leistungsfähigeren Instanz mit mehr CPU und/oder mehr Arbeitsspeicher.
Schritt 2: Horizontale Skalierung mit Clustering
Im letzten Schritt werden auch die einzelnen Funktionen (Web-Frontend, Backend, Datenbank) auf mehrere Server verteilt/geclustert. Mit Amazon Elastic Loadbalancing wird dabei die Last gleichmäßig auf eine Mehrzahl von Frontend-Server verteilt. Die Auslastung der Front- und Backend-Systeme wird mittels Amazon CloudWatch überwacht (Monitoring). Mit Hilfe definierter Schwellwerte zu bestimmten Messwerten (z.B. CPU-Auslastung) startet bzw. stoppt Amazon Autoscaling neue bzw. bestehende Web-Frontend-Server (EC2-Instanzen).
Ein zusätzlicher, eigener Management-Server kann zusätzlich über die Auslastung der Backend-Systeme und ggf. weiteren Kritierien (z.B. Anzahl der Elemente in einer Bearbeitungs-Queue) weitere Backend-System dazu- oder abschalten.
Für das Clustering der Datenbank kommt eine Master-Slave-Replikation zum Einsatz. Alle Daten auf dem Master werden auf eine Mehrzahl von Slave-Systemen repliziert. Über einen zentralen Datenbank-Proxy werden alle Schreibzugriffe auf die Master-Datenbank und alle Lesezugriff gleichmäßig auf die Slave-Systeme verteilt.
Alle Daten (System- und Anwendungsdaten) werden persistent auf Amazon Elastic Block Storage abgelegt und mittels Snapshots auf Amazon S3 gesichert.