text: 1 Konzeption und Entwicklung einer an YouTube orientierten Lösung für Video-Streaming auf Basis von Cloud Computing-Diensten Sufian Abu-Rab Diplomarbeit Studiengang Informatik Fakultät für Informatik Hochschule Mannheim 6 April 2011 Betreuer: M.Sc. Christian Baun Zweitkorrektor: Prof. Dr. Georg Winterstein
  2 Inhaltsverzeichnis Eidesstattliche Erklärung Danksagung Kurzbeschreibung Abstract i iii iv v 1 Einleitung Allgemeines Aufbau der Arbeit Grundlagen Cloud Computing Definition Cloud Computing Cloud-Architekturen Kategorien von Cloud-Diensten Softwaredienste Infrastrukturdienste YouTube Geschichte von YouTube Funktionalität von YouTube Erfolg von YouTube Technik von YouTube Einschränkungen von YouTube Entwicklung der Infrastruktur für das Video-Streaming Anforderungsanalyse Evaluation der entwickelten Lösung in EC Ergebnis Kostenanalyse
  3 4.5 Bewertung Entwicklung der Webanwendung für Video-Streaming auf Basis von Cloud- Diensten Grundvoraussetzungen Rahmenbedingungen Betriebssystem des Webservers Konfiguration des Webservers Symfony-PHP-Framework Anforderungsanalyse der Anwendungslogik Video-Upload Video-Anzeige Realisierung der Grundvoraussetzungen und Rahmenbedingungen Realisierung und Implementierung der Anforderungen Hochladen eines Videos Video-Anzeige Ergebnis Vergleich mit der existierenden Lösungen YouTube Erweiterungsmöglichkeiten Zusammenfassung Herausforderungen bei der Entwicklung Ausblick Abbildungsverzeichnis 57 Literaturverzeichnis 58
  4 Eidesstattliche Erklärung Hiermit versichere ich, dass ich diese Diplomarbeit selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe, alle Ausführungen, die anderen Schriften wörtlich oder sinngemäß entnommen wurden, kenntlich gemacht sind und die Arbeit in gleicher oder ähnlicher Fassung noch nicht Bestandteil einer Studienoder Prüfungsleistung war. Sufian Abu-Rab Mannheim, den iii
  5 Danksagung Ich möchte mich an dieser Stelle bei M.Sc. Christian Baun für seine Unterstützung und Betreuung im Rahmen dieser Diplomarbeit bedanken. Des Weiteren danke ich Prof. Dipl.-Inform. Günther Bengel für seine Unterstützung während des gesamten Studiums. Ein besonderer Dank gilt meinen Eltern Achmed Abu-Rab und Afifeh Abu-Rab, die mich immer unterstützt haben. iv
  6 Kurzbeschreibung Diese Diplomarbeit beschäftigt sich mit der Konzeption und Realisierung einer Cloudbasierten Streaming-Video-Lösung. Als kommerzielles Vorbild dient Googles Dienst YouTube. Die Infrastruktur ist über die öffentlich verfügbaren Cloud-Dienste von Amazon (Amazon Web Services) realisiert. Zusätzlich wird auf Basis dieser Cloud-Infrastruktur eine Webanwendung für Video-Streaming implementiert. Das Thema der Arbeit besteht zunächst darin, mit Hilfe des Infrastrukturdienstes Elastic Compute Cloud (EC2) auf einem entferntliegenden physischen Cluster virtuelle Betriebssysteminstanzen auszuführen und diese zu einem virtuellen Cluster zusammenzufügen. Die virtuellen Maschinen dienen als Application-Server für die Video-Streaming- Webanwendung. Ein Server zum Lastausgleich (englisch: Loadbalancer) sorgt dafür, dass die Videoanfragen an freie Webserver weitergeleitet und ausgefallene Server erkannt werden. Bei Bedarf werden neue Instanzen gestartet bzw. überflüssige stoppt. Die Datenbank ist redundant und skalierbar ausgelegt, sodass diese ebenfalls bei Bedarf ihre Speicher- und Rechenkapazität skalieren kann. Des Weiteren werden selbständig zu bestimmbaren Zeitpunkten Sicherheitskopien angelegt. Die Videodaten werden über ein Content Distribution Network (CDN) an die Nutzer verteilt. Schließlich geht es um die Anforderungen und Implementierung einer Streaming-Video- Webanwendung. Hierbei wird auf Basis der Programmiersprache PHP und dem PHP- Framework Symfony das Hochladen von Videos und eine Video-Anzeige implementiert. Die für diese Diplomarbeit entwickelte und implementierte Software fokussiert die Installation und Konfiguration eines virtuellen Streaming-Clusters und bietet Vorteile gegenüber den bereits existierenden und untersuchten Lösungen YouTube [52], Metacafe [36] und Megavideo [35], wie z.b. eigene Datenschutz und -sicherheitsbestimmungen, sowie Informationen aus Benutzereingaben zu statistischen Zwecken. v
  7 Abstract This thesis deals with the design and implementation of a cloud-based streaming video solution. YouTube, a service of Google, is used as a commercial example. The infrastructure is realized within Amazons public cloud services (Amazon Web Services). Additionally a streaming video web-application is implemented, which is also based on this public cloud infrastructure. The theme of this work is to use the public cloud infrastructure service Amazon EC2 to first run virtual operating system instances at distant physical clusters and to bring them together, forming a virtual cluster. The virtual machines are equipped with a Linux operating system and serve as a web or application server for streaming web application. A load balancing server is used to ensure that video requests are forwarded to free webservers and that failing servers are detected. If necessary, new instances will be started and unnecessary stopped.the database is designed redundant and scalable, so that it can scale its storage or computing capacity dynamically by need. Furthermore, backups will be created, which can be set to selectable timepoints. The video data is distributed via a Content Distribution Network (CDN) to users. Finally, it is about the requirements and implementation of a streaming-video webapplication. Here a videos display, based on the programming language PHP and PHP- Framework Symfony, is implemented. The, for this thesis implemented, software is focused on the installation and configuration of a virtual streaming cluster and offers advantages concerning existing solutions (Youtube, Metacafe and Megavideo), e.g. own privacy and security regulations, as well as valuable information from user inputs.
  8 Kapitel 1 Einleitung 1.1 Allgemeines In den letzten Jahren ist die Nachfrage und ebenso das Angebot von Anwendungen für Video-Streaming kontinuierlich gestiegen. Inzwischen hat YouTube [56], laut seinen eigenen Angaben, zwei Milliarden Videozugriffe pro Tag. Das bedeutet, es werden täglich mehrere Terabyte an Daten versendet. Transaktionen in diesem Größenverhältnis sind auf einem einzelnen Rechner nicht in akzeptabler Zeit möglich. Für die Verteilung der Daten verwendet YouTube mehrere physisch existierende Rechenzentren, die global über mehrere Kontinente verstreut sind. Beim Betrieb einer vergleichbaren Infrastruktur mit physischen Rechnern, überwiegen die Fixkosten für Anschaffung und Wartung den Nutzen eines solchen Streaming- Clusters 1. Eine in Vergleich dazu kostengünstige Möglichkeit ist die Nutzung des öffentlich verfügbaren Infrastrukturdienstes Amazon Elastic Compute Cloud (EC2). In einigen Anwendungsszenarien ist es sinnvoll, Videodaten nur bestimmten, von den Benutzern selbst festgelegten, Personenkreisen zugänglich zu machen. Youtube bietet an, dass ein eingestelltes Video vom Nutzer als privat markiert und somit für andere Nutzer nicht erreichbar ist. Jedoch werden laut AGB von Videoportal-Betreibern, wie z.b. Youtube [52], Clipfish [14] und MyVideo [38], den Anbietern unentgeltliche und weitreichende Nutzungs- und Vervielfältigungsrechte, sowie das Recht der Übertragung dieser Rechte an Dritte, eingeräumt [17]. Das bedeutet, dass auch wenn ein Video als privat markiert wurde, ist es dennoch möglich, dass dieses Video ohne Einverständnis des Urhebers z. B. im Fernsehen oder in einer Werbung der Portalbetreiber erscheint. 1 Unter einem Cluster versteht man in der Informationstechnik (IT) ein Zusammenschluss mehrerer Rechner zu einer logischen Einheit 2
  9 Ein weiterer Nachteil von YouTube ist, dass die Videos auf der Festplatte des Nutzers temporär gespeichert (gecached) werden. Diese Streaming-Technik ist unter dem Namen Pseudo-Streaming bekannt. Ein Vorteil von Pseudo-Streaming ist, dass zuvor geladene Videos auch ohne Verbindung zum Internet angesehen werden können. Ein Nachteil ist aber, dass dadurch eine einfachere Möglichkeit zum Datendiebstahl gegeben ist. Es existieren zahlreiche Programme und Browser-Erweiterungen, die den temporären Speicher des Clients auslesen, um zwischengespeicherte Videos permanent auf der Festplatte zu speichern. Diese Diplomarbeit beschäftigt sich auch mit der Konzeption und Entwicklung einer Cloud-basierten Lösung für Video-Streaming, bei der eine kosteneffiziente Infrastruktur und eine sichere Webanwendung im Vordergrund steht. Ein Vorteil der realisierten Lösung ist, dass auf Zwischengespeichern auf Seiten der Clients verzichtet wird. 1.2 Aufbau der Arbeit In Kapitel 2 wird das Cloud Computing definiert. Es werden verschiedene Cloud- Architekturen und Kategorien von Cloud-Diensten beschrieben. Der Schwerpunkt liegt auf den Infrastrukturdiensten as a Service (IaaS). Im Kapitel 3 wird der existierende Streaming-Video-Dienst YouTube und dessen Infrastruktur evaluiert, um mit Hilfe dieser Erkenntnisse die Anforderungen für die zu entwickelnde Video-Streaming-Lösung zu entwickeln. In Kapitel 4 enthält eine Evaluation der Infrastrukturdienste in den öffentlich verfügbaren Clouds, wobei zunächst der Infrastrukturdienst von Amazon untersucht wird, um daran anschließend die Anforderungen und Rahmenbedingungen für eine Video-Streaming- Infrastruktur zu erläutern. Schwerpunkt ist die Lastverteilung, um bei der Speicherung, dem Transport und der Verarbeitung von Videos die vorgegebenen Kapazitätsgrenzen einzuhalten. In Kapitel 5 wird die Cloud-basierte Video-Streaming-Lösung entwickelt und implementiert. Zunächst werden Anforderungen und Designüberlegungen beschrieben und anschließend die Implementierung erläutert. Die Vor- und Nachteile verschiedener Lösungsansätze werden diskutiert, sowie Erweiterungsmöglichkeiten vorgestellt. Kapitel 6 enthält die Zusammenfassung dieser Diplomarbeit. In diesem letzten Kapitel werden die unterschiedlichen Probleme und Lösungsansätze gegenübergestellt und bewertet. Abschließend folgt ein Ausblick. 3
  10 Kapitel 2 Grundlagen Inhalt dieses Kapitels ist die Definition des Begriffs Cloud Computing. Öffentlich verfügbare und private Cloud-Architekturen werden analysiert. Anschließend folgt ein Schwerpunkt zu den Infrastrukturdiensten und Softwarediensten. 2.1 Cloud Computing Der Begriff Cloud Computing erfährt aktuell in der Informationstechnik (IT) eine steigende Popularität. Laut Bundesministerium für Wirtschaft und Technologie (BMWI) [13] wird das Marktvolumen im Bereich Cloud Computing in den nächsten drei Jahren von 500 Millionen Euro um das vierfache auf über 2 Milliarden Euro ansteigen. Abbildung 2.1 zeigt das prognostiziertes Marktvolumen für Cloud Computing in Deutschland in den Jahren 2010 bis Laut [16] werden Unternehmen in Deutschland im Jahr 2010 ca. 386,5 Millionen Euro für Cloud-Dienste ausgeben haben. Bis 2012 wird mit einer jährlichen Wachstumsraten von fast 50 Prozent gerechnet. Laut Techconsult, einem Marktforschungs- und Marketingconsultingunternehmen in Zentraleuropa, werden die Ausgaben für Cloud Computing und Outsourcing-Dienste von derzeit rund 25 Prozent auf 45 Prozent in 2011 in Deutschland wachsen [15]. 4
  11 Abbildung 2.1: Marktvolumen für Cloud Computing 2.2 Definition Cloud Computing Obwohl es momentan für den Begriff Cloud Computing noch keine einheitliche Definition gibt, deckt laut [12] folgende Definition die Hauptmerkmale des Cloud Computings ab: Unter Ausnutzung virtualisierter Rechen- und Speicherressourcen und moderner Web-Technologien stellt Cloud Computing skalierbare, netzwerk-zentrierte, abstrahierte IT-Infrastrukturen, Plattformen und Anwendungen als on-demand Dienste zur Verfügung. Die Abrechnung dieser Dienste erfolgt nutzungsabhängig. Eines der Haupteinsparfaktoren des Cloud Computings ist die Senkung des notwendigen Startkapitals, da durch Virtualisierung von IT-Infrastrukturen diese auf Abruf zur Verfügung stehen und nicht erst physisch beschafft werden müssen. Dadurch profitieren besonders kleine und mittlere Unternehmen, da diese nun die Möglichkeit haben, solche Technologien wirtschaftlich zu beziehen und einzusetzen [12]. Durch eine Kostenabrechnung je nach Verbrauch (Pay-as-you-go) ist es sowohl dem Dienstanbieter als auch den Dienstnutzern möglich, ihre Kosten zu minimieren. Ein weiterer Einsparfaktor für Dienstanbieter ist die Reduzierung des Verwaltungsaufwands, da alle Ressourcen über eine zentrale Stelle konsolidiert und verwaltet werden. Somit werden die Wartungs- und Administrationskosten gegenüber dem klassischen Betrieb einer IT-Infrastruktur reduziert. 5
  12 Zudem kann eine virtuelle IT-Infrastruktur im laufenden Betrieb mit weniger Aufwand erweitert, als das mit einer physischen Infrastruktur möglich wäre. Dadurch kann eine fast 100 prozentige Verfügbarkeit erreicht werden, was geringere Ausfallzeiten für den Dienstnutzer bedeutet und das Risiko, durch Ressourcenengpässe Kunden zu verlieren, reduziert. 2.3 Cloud-Architekturen Es werden drei Arten von Cloud-Architekturen unterschieden. Es können Dienste in einer öffentlich Verfügbaren Cloud (Public Cloud) oder einer privaten Cloud (Private Cloud) angeboten und erbracht werden. Die dritte Art ist die hybride Cloud (Hybrid Cloud), welche eine Mischform der öffentlichen und privaten Clouds darstellt. Aus organisatorischer Sicht gehören bei öffentlich verfügbaren Angeboten Dienstanbieter und -nutzer unterschiedlichen Organisationen an. Ein Beispiel die Dienste der Amazon Web Services (AWS). Die Rechen- und Speicherressourcen werden hierbei extern von einem Dienstanbieter bereitgestellt. Für den Dienstnutzer besteht keine Notwendigkeit die Ressourcen selbst zu betreiben. Um auf die Ressourcen zugreifen zu können, muss der Dienstnutzer auf eine sichere Verbindung, wie SSH oder VPN, zurückgreifen. Der Kunde muss auch prüfen, ob die Nutzung von Ressourcen eines externen Dienstleisters im konkreten Anwendungsfall mit den Datenschutzbestimmungen des Dienstabieters vereinbar ist. Des Weiteren besteht für den Dienstnutzer ein Risiko bezüglich der Verfügbarkeit der Daten, der sogenannte Vendor-Lock-In. In diesem Fall ist eine Portierung der Daten und Dienste zu einem anderen Dienstanbieter nicht mehr ohne unverhältnismäßig hohe Kosten möglich. Es besteht auch das Risiko, z.b. bei einer Insolvenz des Dienstanbieters, nicht mehr auf die eigenen Daten zugreifen zu können. Bei privaten Clouds gehören Dienstanbieter und -nutzer ein und der selben Organisation an, was bedeutet, dass die Cloud-Infrastruktur auf den eigenen Ressourcen (In-House) betrieben wird. Hierbei werden die Cloud-Dienste von der eigenen Organisation erbracht und bleiben für gewöhnlich der breiten Öffentlichkeit verwehrt. Ein Vorteil privater Clouds ist der Sicherheitsaspekt, da kein Risiko hinsichtlich Datenschutz und Vendor-Lock-In besteht. Der Grad der Datensicherheit hängt von den physischen Ressourcen des Anbieters und deren Organisation ab. Die Transaktions- und Datenhaltungskosten fallen weg, jedoch kommen u. a. Kosten für Wartung, Strom und Stellfläche hinzu. Obwohl in einer privaten Cloud dadurch höhere Fixkosten anfallen, kann ein Unternehmen durch die Konsolidierung der Ressourcen und durch die dynamische Erweiterbarkeit der IT- Infrastruktur profitieren. 6
  13 Das dritte Cloud-Architekturkonzept ist eine Mischung aus öffentlicher und privater Cloud. In diesem Fall spricht man von einer hybriden Cloud. Hierbei werden sowohl öffentliche als auch private Dienste in Anspruch genommen. Ein mögliches Szenario ist, dass die private Cloud zur Ablage sensibler Daten innerhalb des eigenen Netzwerks verwendet wird. Public Clouds können zur Abdeckung von Lastspitzen (Peaks) oder Verteilung von Sicherheitskopien wichtiger Daten eingesetzt werden. Die Vorausgesetzung ist aber, dass die API des privaten Infrastrukturdienstes (z.b. Opennebula [39]) mit der Schnittstelle der öffentlich verfügbaren Cloud (z.b. Amazon Web Services EC2-API) kompatibel ist. Die Kosten können je nach dem, welche öffentlichen und privaten Dienste genutzt werden variieren. Um die Sicherheit zu gewährleisten, ist es Notwendig die Ressourcen der öffentlichen Cloud über ein Virtual Private Network (VPN) mit den Ressourcen der eigenen privaten Cloud zu verbinden. Risiken bezüglich Datenschutz und Vendor-Lock-Ins bestehen bei einer Hybrid Cloud nicht. Der Grad der Datensicherheit ist vom konkreten Aufbau der hybriden Cloud und der einzelnen Dienste abhängig. 2.4 Kategorien von Cloud-Diensten Zu den Kategorien, in die Cloud-Dienste unterschieden werden können, gehört Infrastrukturdienste - Infrastructure as a Service (IaaS), Plattformdienste - Plattform as a Service (PaaS), Softwaredienste - Software as a Service (SaaS) und das sogenannte Crowdsourcing - Human as a Service (HaaS). Wie in Abbildung 2.2 zu sehen ist, sind diese Kategorien in der obigen Reihenfolge anhand der Abstraktion von der Hardware in Schichten angeordnet. Die Dienste der einzelnen Schichten sind voneinander unabhängig, können aber auch in beliebiger Kombination genutzt werden. Diese Schichten folgen dem Paradigma Everything-as-a-Service (XaaS). In den folgenden Abschnitten werden die Infrastrukturdienste und Softwaredienste beschrieben Softwaredienste Softwaredienste sind Webanwendungen, die von Dienstanbietern betrieben und den Kunden zur Verfügung gestellt werden. Hierbei müssen sich die Kunden nicht um die Installationen, Administration, Software-Updates, etc. kümmern. Die Nutzung der Software ist entweder kostenlos oder wird nach Verbrauch abgerechnet. Die Kunden benötigen lediglich einen Webbrowser. Der Dienstanbieter ist für die Datenhaltung und die Verfügbarkeit der Dienste verantwortlich. Für die Kunden besteht das Risiko des Vendor-Lock-Ins und auch Risiken bezüglich des Datenschutzes. Beispiele für öffentlich verfügbare Softwaredienste sind z.b. Google Docs [23] und Salesforce.com [41]. 7
  14 Abbildung 2.2: Schichtenmodell der Kategorien von Cloud-Diensten Infrastrukturdienste Infrastrukturdienste bieten dem Kunden eine abstrahierte Schicht auf die Hardware. Zum Angebot solcher Dienste gehören virtuelle Rechner, Massenspeicher, Netzwerke etc. Der Kunde kann über eine Benutzerschnittstelle auf die Ressourcen der Infrastruktur zugreifen. Der Kunde kann selbst entscheiden, welche Betriebssysteme er verwendet. Der Kunde startet über eine Bentzerschnittstelle oder geeignete Werkzeuge Instanzen virtueller Maschinen, die in entfernt liegenden Rechenzentren des Anbieters laufen. Es existieren verschiendene Instanztypen, die vom Dienstanbieter vorgegeben sind. Diese unterscheiden sich unter anderem in der Größe des Arbeitsspeichers, der Anzahl der Prozessoren und Prozessorkerne, sowie in der Größe der Festplatte. Ein Kunde behält hat die vollständige Kontrolle über seine Instanzen und ist somit auch für die Sicherheit der Maschinen selbst verantwortlich. Es existiert eine Firewall, deren Regelwerk jeder Kunde selbständig an seine Bedürfnisse anpassen kann. Ein Beispiel für einen öffentlich verfügbaren Infrastrukturdienst ist die Elastic Compute Cloud (EC2) von Amazon. Beispiele für Lösungen zum Betrieb privater Infrastrukturdienste sind z.b. Opennebula [39] und Eucalyptus [20]. Im folgenden Abschnitt wird EC2 vorgestellt. 8
  15 Amazon Elastic Compute Cloud (EC2) Ein Dienst der Amazon Web Services ist der Infrastrukturdienst EC2. EC2 ermöglicht dem Kunden den Betrieb virtueller Rechner, die ihren physischen Standort in einer der fünf Regionen haben. Diese sind wiederum in sogenannte Verfügbarkeitszonen (Availability Zones) unterteilt. Jede Verfügbarkeitszone stellt einen in sich abgeschlossenen Cluster dar. Es existieren fünf Regionen, davon zwei in den USA, eine in Irland und jeweils eine Region in Indonesien (Singapur) und Japan (Tokio). Die Preise für Ressourcen können je nach Region variieren. Jede Region enthält ein bis vier Verfügbarkeitszonen. Ein Kunde kann über die Benutzerschnittstelle oder geeignete Werkzeuge auf die Ressourcen in EC2 zugreifen. Abbildung 2.2 zeigt die Webanwendung Management Console von Amazon. Abbildung 2.3: Amazon Management Console Jede Instanz in EC2 besitzt einen internen Speicher, dessen Größe je nach Instanztyp variiert. Zustandsänderungen in diesem Speicher sind nicht dauerhaft, da alle Änderungen bei der Terminierung der Instanz verloren gehen. Für die persistente Datenspeicherung ist es möglich, mit dem Dienst Amazon Elastic Block Store (EBS) [4] virtuelle Datenträger zur Speicherung auf Blockebene, eigenen Instanz in EC2 zuzuweisen. Diese sogenannten EBS-Volumen werden wie externe Festplatten verwendet. Es ist zwar möglich, an eine Instanz mehrere Speichervolumen anzuhängen, jedoch ist es nicht 9
  16 möglich, ein Volumen gleichzeitig mehreren Instanzen zuzuweisen. Die mögliche Speicherkapazität eines EBS-Volumens liegt zwischen 1 GB und 1 TB. Zusätzlich ist es möglich, nach Bedarf sogenannte Snapshots zu erstellen. Snapshots sind Momentaufnamen von Speichervolumen und dienen u. a. als Backup, als auch als Aufhängepunkt für neue Speichervolumen. Amazon Simple Storage Service (S3) [9] ist ein weiterer Speicherdienst der AWS. Er ermöglicht die Speicherung großer Mengen schwach strukturierter objektbasierter Daten in einem flachen Speicherraum. Mit S3 ist es möglich, hochverfügbare und nahezu unbegrentzte Speicherressourcen als Dienst zu nutzen. Der Amazon Elastic Load Balancer (ELB) [7] ist ein weiterer Dienst der AWS. Dieser Dienst ermöglicht den Einsatz elastischer Lastverteiler. Zudem hilft der ELB, Instanzen in EC2 zu überwachen. Fällt eine Instanz aus, bemerkt der ELB dieses und leitet den eingehenden Datentransfer zu anderen noch funktionsfähigen Instanzen weiter. Sobald eine ausgefallene EC2-Instanz wieder verfügbar ist, diese wieder vom ELB bedient. Der Dienst Amazon CloudFront ermöglicht die schnelle Übermittlung von Inhalten, vor allem von Daten in S3. Ein solcher Dienst wird auch Content Distribution Network (CDN) genannt [3]. Mit CloudFront können statische Inhalte und Datenströme über ein globales Netzwerk aus sogenannten Edge-Standorten bereitgestellt werden. Downloadoder Streaming-Anfragen werden automatisch an den nächsten Edge-Standort durchgereicht, sodass die Bereitstellung der Inhalte mit einer der hohen Leistung erfolgen kann. Amazon SimpleDB [5] ist ein Dienst für ein einfach verteiltes Datenbankmanagementsystem von Amazon. Der Dienst ist nicht für komplexe Datenbankschemata oder transaktionale Eigenschaften gedacht. Vielmehr dient ee als schneller Einstieg in eine einfach strukturierte, aber zuverlässige Datenhaltung. Für komplexe (relationale) Datenbankschemata wird auf die Möglichkeit verwiesen eine solche Datenbank entweder auf ein EBS-Speichervolumen zu installieren oder auf den Dienst Amazon Relational Database Service (RDS) [8] zurückzugreifen. RDS [8] ist ein Dienst der AWS zum Einrichten, Betreiben und Skalieren relationaler Datenbanken. Das automatische Anlegen von Sicherheitskopien der Datenbanken geschieht in RDS transparent. Die Aufbewahrungsdauer der Sicherheitskopien können die Kunden selbst bestimmen. RDS bietet vollen Zugriff auf den Funktionsumfang einer MySQL-Datenbank [37]. Das bedeutet, dass der Dienstnutzer seine bestehenden MySQL-Datenbanken, nahtlos in RDS integrieren kann. Ein weiterer Vorteil ist die Skalierbarkeit der Instanzen, die die relationalen MySQL-Datenbanken enthalten. Der Amazon Simple Queue Service (SQS) [10] ist ein Dienst zur Realisierung von Nachrichtenwarteschlangen, um Daten zwischen Instanzen in EC2 austauschen zu können. 10
  17 Mit SQS können Daten zwischen den verteilten Komponenten einer Anwendung verschoben werden. Dadurch lassen sich z.b. kritische Komponenten auf mehreren EC2- Instanzen parallel betreiben, wodurch sich Engpässe auch schon zur Laufzeit besser behoben werden können. Bei allen vorgestellten Diensten der AWS fallen keine Vorabkosten an. Die Kunden zahlen nur für die Ressourcen, die sie tatsächlich nutzen. 11
  18 Kapitel 3 YouTube Dieses Kapitel enthält eine Untersuchung von Googles Dienst YouTube [52]. Zunächst wird auf die Entstehungsgeschichte sowie die angebotenen Leistungen analysiert. Anschließend wird der aktuelle Stand des Dienstes und die von YouTube verwendete Technik beschrieben. Anschließend werden die Vor- und Nachteile von YouTube diskutiert. 3.1 Geschichte von YouTube YouTube ist ein Internetportal, das im Februar 2005 von den drei ehemaligen Paypal- Mitarbeitern Chad Hurley, Steve Chen und Jawed Karim gegründet wurde. Auf der Website können Nutzern Videos ansehen und hochladen. Am 9. Oktober 2006 gab Google die Übernahme von YouTube für ca. 1,31 Milliarden Euro in Aktien bekannt [50]. 3.2 Funktionalität von YouTube YouTube ist ein Internetportal, über das die Benutzer Video ansehen und hochladen können. Zudem bietet YouTube kostenlos Film- und Fernsehausschnitte, Musikvideos sowie selbstgedrehte Filme an. Die Videos können als sogenannte Video-Feeds in Blogs gepostet oder in Webseiten über eine Programmierschnittstelle eingebunden werden. Von Benutzern als anstößig gemeldete Videos werden von den Mitarbeitern von You- Tube zunächst überprüft und anschließend eventuell entfernt. Laut [50] werden solche Videos spätestens nach Eingang einer Abmahnung bezüglich des betreffenden Videos gelöscht. Abbildung 3.1 zeigt die Startseite von YouTube. 12
  19 Abbildung 3.1: Startseite von YouTube.com 3.3 Erfolg von YouTube Der Erfolg von YouTube lässt sich anhand der ständig wachsenden Anzahl an Benutzern, die Videos hochladen, bewerten und kommentieren, ablesen. YouTube hat sich seit seiner Gründung im Jahr 2005 zum führenden Videoportal im Internet etabliert. So wurden laut [26] im Jahr 2006, nur 1,5 Jahre nach der Gründung bereits ca neue Videos täglich hochgeladen und 100 Millionen Clips jeden Tag angesehen. Im Oktober 2009 wurden laut [54] bereits über eine Milliarde Videoabrufe pro Tag verzeichnet. Im Mai 2010 wurden laut [55] bereits 2 Milliarden Videos pro Tag angesehen. Im November 2010 wurden pro Minute über 35 Stunden Videomaterial auf die Plattform geladen [26]. Laut einer Studie des Marktforschungsinstituts Hitwise [28] von März 2008 werden You- Tube 73 Prozent aller Besuche von US-Videoportalen zugeordnet [26]. Laut [29] geht man derzeit 1 von einem Marktanteil von etwa 43 Prozent aus, wodurch YouTube zum populärsten Dienst dieser Art zählt. 1 Juni
  20 Laut den Berechnungen von Ellacoya Networks [19] ist YouTube für 10 Prozent des gesamten Internet-Datenverkehrs und 20 Prozent des HTTP-Aufkommens [57] verantwortlich. 3.4 Technik von YouTube Die Video-Dateien werden im Dateiformat Flash-Video (*.FLV) an die Benutzer verteilt. Die Benutzer können die Videos online als Stream im Webbrowser mit Hilfe des Flash- Browser-Plugins von Adobe anschauen. YouTube unterstützt für das Hochladen von Videos alle gängigen Formate, wie z.b. MP4, H.264, MPEG, AVI, WMV, Quicktime und FLV selbst. Die maximale Video-Dateigröße beträgt 2 Gigabyte und die maximale Widergabezeit pro Video beträgt 15 Minuten. Vor der Weiterverbreitung von YouTube werden die hochgeladenen Video-Dateien in das Flash-Video-Dateiformat konvertiert. Als Webserver verwendet YouTube für Bilder, Videos und andere statische Inhalte eine modifizierte Version von Lighttpd mit verbesserter Lastverteilung [27]. Für die dynamischen Inhalte, wie z.b. Kommentare und Bewertungen, verwendet YouTube einen Apache-Webserver. Zusätzlich werden inzwischen laut [50] die hochgeladenen Videos auch in das Dateiformat H.264 konvertiert, um diese auch auf dem Apple iphone wiedergeben zu können [4]. Die Oberfläche von YouTube ist in der Programmiersprache Python implementiert. Als Datenbanksystem wird YouTube MySQL [27] verwendet. YouTube verlagert die Videos, die häufig abgerufen werden, in ein CDN [27]. 3.5 Einschränkungen von YouTube Rechte, die YouTube eingeräumt wird Laut den AGB von YouTube [51] räumt man mit dem Hochladen eines Videos... YouTube eine weltweite, nicht-exklusive und gebührenfreie Lizenz ein (mit dem Recht der Unterlizenzierung) bezüglich der Nutzung, der Reproduktion, dem Vertrieb, der Herstellung derivativer Werke, der Ausstellung und der Aufführung der Nutzerübermittlung im Zusammenhang mit dem Zur-Verfügung-Stellen der Dienste und anderweitig im Zusammenhang mit dem Zur-Verfügung-Stellen der Webseite und YouTubes Geschäften, einschließlich, aber ohne Beschränkung auf Werbung 14
  21 für und den Weitervertrieb der ganzen oder von Teilen der Webseite (und auf ihr basierender derivativer Werke) in gleich welchem Medienformat und gleich über welche Verbreitungswege.... Das heißt, dass YouTube das Recht hat, hochgeladene Videos der Benutzer selbst zu verwenden (z.b. im öffentlichen Fernsehn), zu vervielfältigen und diese Rechte an Dritte weiterzugeben. Diese Rechte werden YouTube unbefristet und unwiderruflich auch für alle Nutzerkommentare eingeräumt. Videos mit fragwürdigem Inhalt Laut den Nutzungsbedingungen von YouTube ist es nicht erlaubt, Videos mit rassistischem und/oder ethnisch diskriminierendem Inhalt hochzuladen. Dennoch tauchen immer wieder solche Videos bei YouTube auf. Obwohl diese von Zuschauern als unangebracht deklariert wurden, werden sie nicht gelöscht, sondern lediglich nur noch für registrierte Nutzer zugänglich gemacht. Ein weiterer Kritikpunkt ist die nicht ausreichende Altersverifizierung. Hierbei stößt YouTube vor allem bei Jugendschützern und den deutschen Medien auf Kritik [32]. Urheberrechtsverletzungen Beim Hochladen neuer Videos kommt es vielfach zu Urheberrechtsverletzungen. Laut [50] gehen einige Experten davon aus, dass dies bis zu 90 Prozent des hochgeladenen Materials betrifft. Nach der geltenden amerikanischen Rechtsprechung muss YouTube solche Inhalte erst nach einer Abmahnung durch die Rechteinhaber löschen (Opt-Out- Verfahren). Laut [50] verbot das Landgericht Hamburg in einem Urteil vom 3. September 2010 die Verbreitung urheberrechtswidriger Inhalte über YouTube [33]. Parallel dazu konnte sich laut [50] YouTube vor einem spanischen Gericht in Madrid bei einer ähnlichen Klage gegen den Fernsehsender Telecinco durchsetzen. Google feierte dies indes als Sieg für das Internet [25]. Authentizität der Inhalte Ähnlich wie bei anderen Internet-Diensten mit Social-Networking-Charakter, z.b. studivz.net [45] oder facebook.com [21], wird YouTube zunehmend als Plattform für Guerilla-Marketing genutzt. Daher ist die Authentizität von Inhalten häufig nur schwer zu beurteilen. In einigen Fällen wurden Videos gezielt von Medienagenturen produziert, jedoch mit dem Anschein verbreitet, von Privatpersonen hergestellt und veröffentlicht 15
  22 worden zu sein. Ein Beispiel dafür ist laut [50] die Verbreitung eines politischen Videos, das sich kritisch mit dem ehemaligen US-amerikanischen Präsidentschaftskandidaten Al Gore und seinem Engagement für eine Reduzierung des Ausstoßes von Treibhausgasen auseinander setzte. 16
  23 Kapitel 4 Entwicklung der Infrastruktur für das Video-Streaming In diesem Kapitel erfolgt eine Analyse der Anforderungen an eine Video-Streaming- Infrastruktur. Anschließend werden diese Anforderungen mit den Infrastrukturdiensten in der öffentlich verfügbaren Cloud der Amazon Web Services umgesetzt. 4.1 Anforderungsanalyse Architektur- und Designüberlegung Die Architektur ist nach dem Prinzip der Drei-Schichten-Architektur zu strukturien. Abbildung 4.1 zeigt den Aufbau einer typischen Drei-Schichten-Architektur. Ein Vorteil dieses Architekturtypes ist die Entkoppelung der Logik von der Datenhaltung, wodurch eine bessere Skalierbarkeit der Anwendung möglich ist. Abbildung 4.1: Aufbau einer typischen Drei-Schichten-Architektur Die Anwendungsschicht stellt die grafische Benutzeroberfläche und die Repräsentation der Daten, in diesem Falle das Abspielen der Videos, dar. Zudem ist die Anwendungsschicht für die Benutzereingaben verantwortlich und dient als Schnittstelle zur 17
  24 Domänen- und Datenhaltungsschicht. In Kapitel 5 erfolgt eine Analyse der Anwendungsschicht. Die Domänenschicht ist die Schnittstelle für den Zugriff auf die Datenhaltungsschicht. Die Realisierung der Domänenschicht erfolgt mit EC2. Mit diesem Dienst wird der nötige Webserver realisiert. Die Daten der Webanwendung selbst liegen in einem persistenten EBS-Speichervolumen. Die Datenhaltungsschicht basiert auf den beiden Diensten S3 und CloudFront. Das heißt, dass der Streaming-Server und die Datenbank in der Datenhaltungsschicht zusammengefasst sind. Während S3 ist für die Speicherung der Videos verantwortlich ist, ermöglicht CloudFront den Download und das Streaming der Videos in kurzer Zeit. Zudem nutzt die Datenhaltungsschicht RDS. Dieser Datenbankdienst dient nicht der Speicherung der Videos, sondern von deren Metadaten. Diese werden als Datensätze in einer MySQL-Datenbank abgelegt. Abbildung 4.2 zeigt den Aufbau der Infrastruktur und den Einsatz der AWS in der Drei-Schichten-Architektur. Abbildung 4.2: Nutzung der AWS im Rahmen einer Drei-Schichten-Architektur Anforderung 1: Skalierbarer Webserver Zunächst ist eine grundlegende Architektur zu erstellen. Der integrale Bestandteil dieser Architektur ist der Webserver. Die Ressourcenausstattung des virtuellen Servers ist so zu wählen, dass die Video-Streaming-Funktionalität erbracht werden kann. Da es sich bei Streaming, um eine Anwendung, die auch von einem einzelnen Rechner übernommen werden kann, muss sich der Aufbau am Prinzip eines High-Throughput- Clusters orientieren. Das bedeutet, dass vor allem der Arbeitsspeicher, die Durchsatzrate des verwendeten Netzwerks zwischen den Ressourcen und eine leichtgewichtige Webserver-Software wichtige Kriterien für die Datenübertragung darstellen. 18
  25 Anforderung 2: Sicherheit Ein Anforderungspunkt ist der Sicherheitsaspekt. Alle gängigen Sicherheitsmaßnahmen, wie z.b. das Einrichten von Firewalls und die Möglichkeit des Zugriffs auf Instanzen ausschließlich über sichere SSH-Verbindungen. Anforderung 3: Skalierbare Datenbank Des Weiteren ist ein dedizierter Datenbank-Server nötig. Dieser speichert die Metadaten der Videos, wie z.b. Dateiname, Erstellungsdatum, Anzahl der Aufrufe, Bewertungspunkte, etc. Ebenso wie der Webserver ist der Datenbank-Server so einzurichten, dass dieser bei Bedarf seine Speicher- und Rechenkapazität skalieren kann. Zusätzlich soll der Datenbank-Server redundant ausgelegt sein, um eine hohe Verfügbarkeit zu gewährleisten. Die automatische Generierung von Sicherheitskopien ist eine weitere geforderte Fähigkeit des Datenbank-Servers. Anforderung 4: Praktisch unbegrenzter und hochverfügbarer Datenspeicher Der Ablageort für die Dateien soll Engpässe oder Datenverlust prinzipiell ausschließen. Datenobjekte von S3 sind auf mehreren physischen Speicherpunkten an verschiedenen Standorten einer Region von S3 redundant abzulegen. Anforderung 5: Streaming und Verteilung Eine Wiedergabe der Videos soll, anders als beim gewöhnlichen Download von Dateien, schon während der Übertragung möglich sein. Um Audio-, Video- und sonstige Daten über das Internet von einem Server zu einem Client mit Adobe Flash zu übertragen, ist statt des Netzwerkprotokolls HTTP ein Streaming-Protokoll, wie z. B. das proprietäre Real Time Messaging Protocol (RTMP) von Adobe oder das Real Time Streaming Protocol (RTSP), zu verwenden. Der Server kodiert die Videodateien überträgt die Datenpakete. Gängige Lösungen zur Kodierung von Videos sind beispielsweise der Adobe Media Encoder und der Adobe Live Media Encoder für das Einbinden von Live- Streams [1]. Die kodierten Videos werden über das Flash-Plugin im Browser des Benutzers angezeigt. Es ist wichtig, dass die eingesetzte Client-Software eines der gängigen Streaming-Protokolle, z.b. das RTMP-Protokoll, unterstützt. Ein entscheidendes Kriterium beim Video-Streaming ist die Netzwerkbandbreite zwischen Anbieter und Benutzer. Ebenso ist die Entfernung zu den Rechenzentren zu berücksichtigen, da die Übertragungszeit (Latenzzeit) mit wachsender Entfernung zunimmt. 19
  26 Anforderung 6: Redundante Lastverteilung Ein weiterer Anforderungspunkt ist das Einrichten eines Servers zur Lastverteilung (Loadbalancer), der den eingehenden Datenverkehr weiter verteilt und die ständige Verfügbarkeit der Server kontrolliert. Fallen Server-Instanzen aus, müssen diese identifiziert und der eingehende Datentransfer auf die noch verfügbaren Server umgeleitet werden. Ausgefallene Server sollen nach Möglichkeit schnellstmöglich zu reaktiviert werden können. Zudem muss der Lastverteiler selbst überwacht werden, da dieser für die Weiterleitung des gesamten eingehenden Datenverkehrs verantwortlich ist. Beim Ausfall dieser Komponente sind alle dahinter liegenden Server nicht mehr erreichbar. Dadurch stellt der Lastverteiler einen Single Point of Failure (SPOF) für das gesamte System dar. Zur Überwachung der Lastverteiler soll das etablierte Heatbeat-Verfahren in einer Aktiv/Passiv-Konfiguration eingesetzt werden. 4.2 Evaluation der entwickelten Lösung in EC2 Im folgenden Abschnitt wird anhand von Amazons öffentlich verfügbaren Infrastruktur EC2 eine Video-Streaming-Infrastruktur aufgebaut. Zunächst wird für jede Anforderung der jeweils passende Dienst evaluiert. Anschließend werden die Komponenten verknüpft. Anschließend findet eine Kalkulation der laufenden Kosten statt. In die Auswertung fließen ebenso Faktoren, wie Bandbreite, Datenschutz und Datensicherheit, sowie der administative Aufwand. Vorbereitung Im ersten Schritt muss sich der Dienstnutzer bei den Amazon Web Services registrieren. Voraussetzung für die Nutzung der Dienste ist der Besitz einer gültigen Kreditkarte. Jeder gewünschte Dienst muss einzeln freigeschaltet werden. Elastische Lastverteile und elastische IP-Adressen sind genau so ein Teil von EC2 wie die Schlüsselpaare, Sicherheitsgruppen und Snapshots. Als nächsten Schritt muss ein Benutzer sich für eine der fünf Regionen in EC2 entscheiden. Die Regionen unterscheiden sich unter anderem in den anfallenden Kosten. Die preisgünstigste Region ist die Region US-East in Virginia. Während Virginia die günstigere Alternative wäre, liegen andere Regionen wie z.b. EU-West in Irland geographisch näher an Deutschland, was zu kürzeren Latenzzeiten führt. Die Preise für Instanzen pro Stunde variieren je nach Region um bis zu 10 Prozent. 20
  27 Skalierbarer Webserver Für die Erfüllung von Anforderung 1 aus Kapitel 4 wird EC2 verwendet. In EC2 kann der Dienstnutzer virtuelle Rechner Instanzen starten. Die Instanzen laufen in den Rechenzentren des Anbieters. Der Dienstanbieter stellt vorgefertigte Images, sogenannte Amazon Machine Images (AMI), bereit. Diese AMIs unterscheiden sich in Bezug auf das Betriebssystem und die installierte Software. Amazon bietet AMIs für verschiedene Unix-Derivate und Windows-Betriebsysteme. Ein einfacher Weg für den Dienstnutzer, eine virtuelle Maschinen Instanzen zu starten, ist über die Amazon Management Console. Abbildung 4.3 zeigt den EC2-Menüpunkt der Amazon Management Console und die Möglichkeit, die Region auszuwählen. Abbildung 4.3: Startpunkt für neue Instanzen Es existieren unterschiedliche Instanztypen, die der Anbieter Amazon vorgibt. Diese unterscheiden sich unter anderem in der Größe des Arbeitsspeichers, der Anzahl der Prozessoren und in der Festplattenkapazität. In Abbildung 4.4 sind die Instanztypen für 64-Bit-Instanzen in EC2 zu sehen. Sicherheit Aus Sicherheitsgründen sind neue Instanzen standardmäßig nicht über das Internet erreichbar. Um den Zugriff via SSH das vorherige Anpassen einer existierenden oder Anlegen einer neuen Sicherheitsgruppe nötig. Abbildung 4.5 zeigt die freigegebenen Portnummern einer Sicherheitsgruppe. 21
  28 Abbildung 4.4: Instanztypen in EC2 Mit Hilfe eines Schlüsselpaares können die Benutzer sich ohne Passwort bei ihren Instanzen anmelden. Amazon bietet einen Generator für die Erstellung neuer Schlüsselpaare an. Bei Anlegen einer Instanz kann ein neues Schlüsselpaar erstellt oder ein existierendes ausgewählt werden. Abbildung 4.6 zeigt die Auswahlmöglichkeit der Schlüsselpaare. Anschließend wählt der Dienstnutzer beim Anlegen einer neuen Instanz die entsprechende Sicherheitsgruppe aus. Sobald die Instanz läuft, ist es möglich, sich via SSH bei dieser anzumelden und beliebige Software-Pakete zu installieren und Kommandos auszuführen. Nach den nötigen Änderungen ist aus der laufenden Instanz ein neues AMI zu erstellen. Dieses AMI dient als Vorlage für weitere Instanzen, die zu Skalierungszwecken gestartet werden können. Skalierbare Datenbank Der Dienst Amazon Relational Database Services (RDS) bietet den Funktionsumfang einer MySQL-Datenbank. Das bedeutet, dass der Dienstnutzer eine bestehende MySQL- Datenbank, nahtlos in RDS integrieren kann. Abbildung 4.7 zeigt das Fenster in der Amazon Management Console. Die für die Video-Infrastruktur nötige RDS-Datenbank muss in der gleichen Region in EC2 liegen, wie die zuvor erstellte Instanz. Ein Vorteil von RDS ist die flexible Skalierung der Ressourcen für die Instanz mit der relationalen Datenbank. Hierfür stellt RDS dem Dienstnutzer eine API zur Verfügung. Der folgende Befehl dient zur sofortigen Skalierung der Speicherkapazität der Datenbankinstanz mydbinstance auf 1024 Gigabyte. 22
  29 Abbildung 4.5: Freigegebene Portnummern einer Sicherheitsgruppe Abbildung 4.6: Auswahlmöglichkeit der zuvor erstellten Schlüsselpaare rds-modify-db-instance mydbinstance -s 1024 RDS bietet zusätzlich mit der Option Multi-AZ die Möglichkeit, der aktiven Datenbankinstanz eine weitere passive Datenbankinstanz hinzuzufügen. Diese wird permanent mit der aktiven Datenbankinstanz synchronisiert. Der Name Multi-AZ steht für die Verwendung unterschiedlicher Verfügbarkeitszonen für beide Datenbankinstanzen. Diese passive Datenbankinstanz führt bei Ausfall der aktiven Datenbankinstanz deren Arbeit fort, wodurch die Anforderung einer redundanten Datenbank erfüllt ist. Der Nachteil der Multi-AZ-Instanz sind doppelt so hohe laufende Kosten für den Dienstnutzer. Abbildung 4.8 zeigt die allgemeinen Einstellungsmöglichkeiten für die Datenbankinstanz in der Amazon Management Console. Ein wichtiger Faktor bei der Erstellung der Datenbankinstanz ist die geographische Nähe zu den Anwendungsservern. Falls die Datenbankinstanz in einer anderen Region als 23
  30 Abbildung 4.7: RDS-Fenster in der Amazon Management Console die zuerst gestartete Instanz aufgesetzt wird, fallen höhere Kosten an, da laut [8] eine überregionale Datenübertragung auf beiden Seiten, einmal als eingehenden und einmal als ausgehender Datentransfer, berechnet wird. Zusätzlich erledigt RDS verschiedene Datenbank-Verwaltungsaufgaben für den Dienstnutzer, wie transparent das automatische Einspielen von Patches der Datenbank-Software, sowie das automatische Anlegen von Sicherheitskopien der Datenbank. Die Aufbewahrungsdauer dieser Sicherheitskopien kann der Kunde selbst bestimmen. Abbildung 4.9 zeigt die Einstellungsmöglichkeiten für das automatische Anlegen von Sicherheitskopien. Es ist darauf zu achten, dass die RDS-Sicherheitsgruppe der RDS-Instanz an die Sicherheitsgruppe der zuvor gestarteten Instanz angepasst ist. Es werden nur die für den Datenbankzugriff nötigen Ports freigegeben. Hierdurch wird laut [24] die Sicherheit der Datenbank erhöht, da ein Einbrecher zuerst in die EC2-Instanz eindringen muss, um anschließend in die Datenbank eindringen zu können. Abbildung 4.10 zeigt die Einstellungen der Sicherheitsgruppe der RDS-Instanz. Unbegrenzte und hochverfügbare Datenhaltung Die Anforderung aus Kapitel kann mit Amazons Speicherdienst Simple Storage Service (S3) erfüllt werden. Hierfür ist es zunächst nötig ein sogenanntes Bucket anzulegen. Neben dem Namen des Buckets, sind dessen Zugriffsrechte festzulegen. Abbildung 4.11 zeigt das S3-Fenster in der Amazon Management Console. 24
  31 Abbildung 4.8: Einstellungsmöglichkeiten für die Datenbankinstanz Zusätzlich sorgt S3 für redundante Datenhaltung, in dem die Objekte in den S3- Standorten redundant gespeichert sind. Amazon garantiert eine Verfügbarkeit von 99, Prozent oder alternativ 99,99 Prozent bei geringeren laufenden Kosten für den Dienstnutzer pro Jahr [9]. Streaming Die Streaming-Funktionalität lässt sich mit dem Content Distribution Network (CDN) des Dienstes Amazon CloudFront realisieren. CloudFront ist ein Dienst zur schnellen Übermittlung von Daten und arbeitet eng mit S3 zusammen, das die Daten persistent speichert. Die Edge-Standorte befinden sich global verteilt in den USA, Europa und in Asien. In Europa befinden sich die vier Edge-Standorte Amsterdam, Dublin, Frankfurt und London. Das heißt, dass die meisten Nutzer aus Deutschland durch die Edge-Standorte Frankfurt oder Amsterdam bedient werden. CloudFront reagiert auch automatisch auf ansteigende oder eine abnehmende Nachfrage. Das heißt, um eine Nachfrage zu bedienen, kann CloudFront automatisch weitere Webserver-Instanzen starten. CloudFront unterstützt drei Netzwerkprotokolle. Diese sind HTTP- und HTTPS-Protokoll zum Herunterladen von Dateien und das Real Time Messaging Protocol (RTMP) zum 25
  32 Abbildung 4.9: Einstellungsmöglichkeiten für das automatische Anlegen von Sicherheitskopien in RDS Streamen von Videos. Zusätzlich verwendet CloudFront den Flash Media Server von Adobe [2]. CloudFront bietet eine Web-basierte Schnittstelle, mit der für Buckets eine Downloadoder Streaming-Unterstützungen festgelegt werden kann. Dabei wird vom Dienstnutzer der Ort der Originalversion der Objekte angegeben. Beide Verteilungsarten, Download und Streaming, unterstützen standardmäßig Datenübertragungsgeschwindigkeiten von maximal Megabit pro Sekunde und maximale Anfragen pro Sekunde. Zu den unterstützten Dateiformaten für Streaming gehören u.a. die FLV und MP4, sowie die VP6 und H.264. Um CloudFront für die im Rahmen dieser Arbeit realisierte Infrastruktur zu nutzen, muss zunächst in der Amazon Management Console die Schaltfläche Create Distribution betätigt werden. Anschließend öffnet sich eine Dialogfenster, in dem die Auslieferungsart (Streaming oder Download) festgelegt wird. Zusätzlich wird ein Bucket in S3 angegeben. Die Inhalte dieses Buckets, werden beim ersten Aufruf zu dem Edge-Standort, der dem Nutzer geographisch am nächsten ist, kopiert. Wird diese Datei erneut aufgerufen, wird sie direkt vom Edge-Standort aus an den anfordernden Benutzer gesendet. Informationen zum Datenverkehr erhält ein Kunde des Dienstes man durch die Zugriffsprotokollierung. Bei den Zugriffsprotokollen handelt es sich um Aktivitätsaufzeichnungen mit detaillierten Informationen aller Anfragen zu einzelnen Inhalten. Für das 26
  33 Abbildung 4.10: Einstellungen der Sicherheitsgruppe der RDS-Instanz Abbildung 4.11: S3-Fenster in der Amazon Management Console Schreiben, Speichern und Abrufen der Zugriffsprotokolle entstehen Kosten wegen der Verwendung von S3. Abbildung 4.12 zeigt das Dialogfenster zum Erstellen einer Streaming-Unterstützung für ein Bucket. Nach dem Erstellen einer Streaming-Unterstützung für ein Bucket, wird ein eindeutiger CloudFront Domänenname zurückgegeben. Mit diesem Domänennamen kann auf die Objekte im Netzwerk verwiesen werden. Zusätzlich besteht die Möglichkeit, die Streaming-Unterstützung eines Buckets für das dynamische Bit-Raten-Streaming zu konfigurieren. Dadurch werden verschiedene Kopien eines Videos gespeichert und jede Kopie für eine unterschiedliche Qualitätsstufe verschlüsselt. Die Qualität des Videos wird somit automatisch an die Geschwindigkeit der Internetverbindung des Benutzers angepasst [3]. Redundanter Server zur Lastverteilung Die Andforderung aus Kapitel erfüllt der Dienst ELB. Dieser verteilt den eingehenden Verkehr und garantiert, dass ständig Server-Instanzen verfügbar sind. Fallen einzelne Server-Instanzen aus, werden diese identifiziert und der eingehende Daten- 27
  34 Abbildung 4.12: Dialogfenster zum Erstellen einer Streaming-Unterstützung für ein Bucket transfer wird auf die noch verfügbaren Instanzen umgeleitet. Abbildung 4.13 zeigt die Integration des Dienstes zur Lastverteilung in die bisherige Streaming-Architektur. 4.3 Ergebnis Die mit Amazons öffentlichen Cloud-Diensten erstellte Infrastruktur besteht zunächst aus mindestens einem Webserver, der in EC2 läuft. Der Webserver ist über EBS mit einem persistenten Speichervolumen gekoppelt, der als Speicherort für die Anwendung dient. Für die MySQL-Datenbank steht über den Datenbankdienst RDS ein skalierbarer Datenbank-Server zur Verfügung. Die Videos sind im Speicherdienst S3 redundant gespeichert. Die Streaming-Funktionalität wird durch den Dienst CloudFront realisiert. Der Dienst ELB stellt den Lastverteiler bereit. Diese Komponenten bilden zusammen die Grundinfrastruktur für die Realisierung der in Kapitel 5 vorgestellten Streaming- Webanwendung. Aufgrund der zeitlichen Vorgaben konnte nur eine Skalierfähigkeit der Speicherressourcen eines einzelnen Datenbank-Servers realisiert werden. Für eine Skalierung der Server selbst ist die lokale Installation der RDS-Werkzeuge nötig. Um ausgefallene Webserver neu zu starten, muss der ELB mit dem Skalierungs-Dienst Autoscale verbunden werden. Dieses erfordert aber die Installation der Autoscale-, CloudWatch- 28
  35 Abbildung 4.13: Integration des Dienstes ELB in die Streaming-Architektur und Loadbalancer-Werkzeuge. Dieser Anforderungspunkt konnte in der vorgegebenen Zeit nicht realisiert werden. Ebenso konnte der Lastverteiler als Single Point of Failure (SPOF) für das gesamte System nicht ausgeschlossen werden. 4.4 Kostenanalyse Die monatlichen Kosten für die Laufzeit einer Instanz in EC2 betragen mindestens $7,44. Die monatlichen Kosten für eine RDS-Instanz betragen mindestens $34,22. Im Falle einer redundant ausgelegten RDS-Mulit-AZ-Instanz betragen die monatlichen Kosten für die Laufzeit $68,44. Die monatlichen Kosten, um über ELB die Verfügbarkeit der Instanzen zu überwachen, betragen pro Instanz $18,6. Um eine automatische Skalierung mit Hilfe von CloudWatch zu gewährleisten, ist eine detailierte Überwachung der Auslastung jeder Instanz in EC2 bzw. RDS nötig. Hierfür berechnet Amazon monatlich pro Instanz $11,16. Zusätzlich fallen für den eingehenden Datentransfer ca. $0,11 pro Gigabyte an. Der ausgehende Datentransfer wird mit $0,15 pro Gigabyte berechnet. Für die Datenhaltung fallen für S3 monatlich mindestens $0,093 pro Gigabyte an. Ebenso berechnet Amazon für den Datenbankspeicher in RDS monatlich $0,10 pro Gigabyte. Zusätzlich sind mit Kosten in Höhe von $0,0175 pro GET-Anfragen, sowie $0,01 für PUT-Anfragen zu rechnen. Für das EBS-Speichervolumen, als auch für eine RDS-Instanz fallen $0,10 pro 1 Million Eingabe/Ausgabe-Operationen an. Somit ergeben sich minimale Kosten für den Betrieb der Infrastruktur von $71,42. 29
  36 Zusätzlich kommen die Kosten für den eingehenden und ausgehenden Datentransfer hinzu. Bei einem eingehenden Datentransfer von 100 Gigabyte, fallen monatliche Kosten von $11 an. Bei einem ausgehenden Datentransfer von 1000 Gigabyte, entstehen Kosten von $150. Die Speicherung von 100 Gigabyte Daten in S3 wird mit monatlich $9,3 berechnet. Das bedeutet, dass jeden Monat mit eine Kostenzuwachs von $9,3 zum Vormonat zu rechen ist. 100 Gigabyte eingehende Daten würden bei einer maximalen Dateigröße von ca. 100 Megabyte 1000 Videodateien, also 1000 Datenbankeinträge ergeben. Bei einer Größe von 1 Megabyte pro Datensatz ergibt das einen Datenbankzuwachs von 1 Gigabyte pro Monat. Dadurch ergibt sich ein monatlicher Kostenzuwachs von $0,10. Die Kosten für die PUT- und GET-Anfragen, sowie für Ein-/Ausgabe-Operationen spielen im Verhältnis zu den Gesamtkosten keine Rolle. Alle Preise sind exklusive Mehrwertsteuer. Somit ergeben sich im ersten Monat minimale Kosten von ca. $284,22 zuzüglich Mehrwertsteuer. Abbildung 4.14 zeigt eine Darstellung der Kosten für die Infrastruktur. Abbildung 4.14: Kosten für die Infrastruktur 4.5 Bewertung Für den im Vergleich zu traditionellen Webhosting-Angeboten hohen Preis, erhält der Kunde eine flexible Infrastruktur mit einer hohen Verfügbarkeit. Risiken bezüglich der Datensicherheit kann mit einer Verschlüsselung der Daten begegnet werden. Bezüglich des Risikos des unzureichenden Datenschutzes und der Gefahr eines Vendor-Lock- In bietet Amazon über den Dienst AWS Import/Export die Möglichkeit großvolumige Datensätze zu transferieren [6]. 30
  37 Kapitel 5 Entwicklung der Webanwendung für Video-Streaming auf Basis von Cloud-Diensten Dieses Kapitel enthält die Grundvoraussetzungen und Rahmenbedingungen einer Webanwendung für Video-Streaming. Die Anforderungen werden definiert und anschließend implementiert. Anschließend findet ein Vergleich mit YouTube statt und Erweiterungsmöglichkeiten werden diskutiert. 5.1 Grundvoraussetzungen Grundvoraussetzung für eine Streaming-Plattform ist eine Infrastruktur, bestehend aus einem Webserver, sowie ein Datenbank-Server. Das Datenbank-Schema besteht aus mindestens einer Datenbanktabelle. Diese Tabelle enthält die Datei-Informationen der hochgeladenen Videos und heißt media. Die Realisierung der Wiedergabeliste kann auf zwei Arten erfolgen. Zum einen können die Videos auf Video-Datensätze der selben Tabelle referenzieren. Zum anderen kann für die Wiedergabeliste eine eigene Tabelle erstellt werden. Abbildung 5.1 zeigt die einfachere Variante der beiden Ansätze mit nur einer einzigen Tabelle. 31
  38 Abbildung 5.1: Datenbankschema der Video-Datenbank 5.2 Rahmenbedingungen Der folgende Abschnitt enthält die Rahmenbedingungen für das verwendete Betriebssystem und den Webserver. Zusätzlich wird die Konfiguration des Webservers festgelegt. Anschließend wird eine weitere Rahmenbedingung für den Einsatz des PHP- Frameworks Symfony festgelegt Betriebssystem des Webservers Ein flexibles Linux-Betriebssystem mit langer Herstellerunterstützung soll eingesetzt werden. Das Betriebssytem muss die 64-Bit-Architektur unterstützen, da die Streaming- Webanwendung große Datenmengen in den Arbeitsspeicher laden wird Konfiguration des Webservers Eine Software zum Betrieb eines Webserver ist nötig. Es existieren zwei populäre Alternativen. Diese sind Apache2-Webserver [11] und der von YouTube eingesetzte, leichtgewichtige lighttpd-webserver [34]. Der Webserver wird so konfiguriert, dass die Dateigröße für den Upload von Videos auf maximal 120 Megabyte begrenzt und für eine Uploadgeschwindigkeit von 5 Kilobyte pro Sekunde ausgelegt ist. Diese Geschwindigkeit ist bei einer GPRS-Verbindung der Regelfall. Somit ist die maximale Zeit zum Hochladen auf 6,66 Stunden (120 MB / (0,005 MB/S)) begrentzt. Die Webanwendung wird in der Skriptsprache PHP implementiert. Darum muss auf den verwendeten Webservern das PHP-Modul zu installiert sein. 32
  39 5.2.3 Symfony-PHP-Framework Eine weitere Rahmenbedingung ist, dass die Webanwendung mit Hilfe des PHP- Frameworks Symfony entwickelt wird. Symfony ermöglicht es, Webanwendungen auf Basis eines strikten Model-View-Controller-Prinzips (MVC-Prinzip) aufzubauen. Zudem kümmert sich Symfony um die Ordnerstruktur der Webanwendung. Ein weiterer Vorteil von Symfony besteht in der Vereinfachung bestimmter Vorgänge, wie das Erzeugen von Standard-Eingabemasken. 5.3 Anforderungsanalyse der Anwendungslogik Die Webanwendung wird so realisiert, dass ein Nutzer über eine grafische Weboberfläche Video-Dateien hochladen und anschauen kann. Abbildung 5.2 zeigt die Hauptanwendungsfälle der Nutzer und Administratoren als große und alle weiteren als kleine Kreise. Abbildung 5.2: Hauptanwendungsfälle der Benutzer und Administratoren Video-Upload Die grafische Oberfläche für das Hochladen von Videos besteht aus dem HTML- Eingabefeld. Zusätzlich zu dem Eingabefeld existiert eine Information bezüglich der unterstützten Formate, maximalen Dateigröße, sowie ein Datenschutzhinweis (Disclaimer). 33
  40 Die Metadaten des hochgeladenen Videos, wie z.b. der originale Dateiname und der neu generierte Dateiname, werden in einer MySQL-Datenbank abgelegt. Das Video selbst ist in einem Bucket in S3 gespeichert. Unterstützung der gängigen Videoformate Ein weiterer Anforderungspunkt ist, dass die Webanwendung das Hochladen der gängigen Videoformate unterstützt. Es sind zusätzlich zu den serverseitigen Eingabeprüfungen auf der Seite des Clients Eingabeprüfungen nötig. Integration einer Schnittstelle zu S3 Eine Schnittstelle zu S3 ist in der Webanwendung nötig. Zu deren Hauptanforderungen gehört das Hochladen von Dateien. Hierbei ist zu berücksichtigen, dass die hochgeladenen Dateien einen eindeutigen neuen Dateinamen erhalten. Dieser eindeutige Name besteht aus mindestens 32 zufällig generierten alphanumerischen Zeichen. Anschließend wird der generierte Dateiname in eine MySQL-Datenbank abgelegt. Auch der ursprüngliche Dateiname wird gespeichert und ist in der Video-Anzeige als Titel verwendet. Implementierung der Wiedergabeliste Jeder Eintrag in der MySQL-Datenbank enthält Informationen zu einem Video. Über eine doppelt-verkettete Liste ist jeder Eintrag mit mindestens einem weiteren Video- Eintrag verbunden. Hierbei spielen der Zeitpunkt des Hochladens und die Bewertung der Benutzer eine wesentliche Rolle für die Reihenfolge der Videos. Dadurch wird die Wiedergabeliste realisiert. Das zuletzt hochgeladene Video wird solange auf der Startseite angezeigt, bis es durch ein neu hochgeladenes Video ersetzt wird. Implementierung eines Fortschrittsbalkens Beim Hochladen von Videos soll während des Hochladens ein Fortschrittsbalken angezeigt werden. Das Hochladen ist mit JavaScript und Ajax-Aufrufen realisiert. 34
  41 5.3.2 Video-Anzeige Die Video-Anzeige wird über den Flash-Player realisiert. Der Benutzer hat die Möglichkeit, schon während die der Übertragung des Videos, mit der Widergabe des Videos zu beginnen. Automatische Wiedergabe Eine weitere Anforderung ist, bei Aufruf eines Videos dieses automatisch abzuspielen. Bei der Beendigung des Videos ist automatisch auf das nächste Video zu wechseln. Das nächste Video ist das zuletzt hochgeladene Video. Dadurch wird eine Art Fernsehprogramm durch die hochgeladenen Videos der Benutzer erzeugt. Zusätzlich hat der Benutzer über Bedienfelder die Möglichkeit, durch die Wiedergabeliste zu navigieren (zappen). 5.4 Realisierung der Grundvoraussetzungen und Rahmenbedingungen Basis für eine Streaming-Lösung ist die in Kapitel 4 realisierte Cloud-basierende Infrastruktur. Zunächst wird ein Webserver gestartet und dessen Konfiguration beschrieben. Anschließend wird ein neues Symfony-Projekt angelegt. Dazu gehört das Anlegen und die Implementierung der Anwendungen, Module, Formulare, sowie das Einbinden von Erweiterungen (Plugins) und das Erweitern vorhandener Bibliotheken. EC2-AMI Passend zu der Rahmenbedingung aus Kapitel existiert in EC2 von Ubuntu-Linux das AMI ID ami-3d1f2b49. Hierbei wird Ubuntu Version (Lucid Lynx) eingesetzt. Diese steht bis 2015 unter dem Long Term Support (LTS) [48]. Das AMI (siehe Abbildung 5.3) ist nur innerhalb der Region EU-West verfügbar. Es basiert auf der 64-Bit- Architektur und wird über ein EBS-Speichervolumen bereitgestellt. Bei Start einer Instanz in EC2 sind die Eigenschaften der neuen Instanz zu wählen. Dazu gehört der Instanztyp, das Aktivieren einer Netzwerküberwachung und das Festlegen der Sicherheitsgruppe, sowie des Schlüsselpaares. 35
  42 Abbildung 5.3: Offizielle AMIs in EC2 von Ubuntu Installation und Konfiguration des Webservers Obwohl laut [27] sich der lighttpd-webserver besonders gut für Video-Streaming die eignet, wird die Rahmenbedingung aus Kapitel mit Hilfe des Webservers Apache2 umgesetzt, da dieser eine bessere Integration in das Betriebssystem, höhere Flexibilität und gewachsenere Stabilität aufweist. Um das Hochladen von Dateien bis 120 Megabyte pro Datei zu unterstützen, sind Anpassungen in der Datei php.ini nötig. Folgend Werte sind relevant. file_uploads = on upload_max_filesize = 120M post_max_size = 125M memory_limit = 128M max_execution_time = max_input_time = max_file_uploads = 1 Die Variable upload_max_filesize bestimmt die maximale Größe aller Dateien, die hochgeladen werden können. Die Variable post_max_size legt die maximale Größe von Daten fest, die über POST mit dem Format 'multipart/form-data' an den Webserver geschickt werden. Das heißt, ein Skript auf dem Webserver kann maximal <POST_MAX_SIZE> Daten entgegennehmen. Hierbei ist zu beachten, dass <POST_MAX_SIZE> größer als <UPLOAD_MAX_FILESIZE> sein 36
  43 muss, da zum Wert von upload_max_filesize zusätzlich noch die Größe der HTML- Formularfelder und Header-Informationen hinzugerechnet werden müssen. Die Variable memory_limit bestimmt die maximale Größe, die ein Skript pro Anfrage im Arbeitsspeicher allozieren darf. Hierbei besteht die Gefahr, dass da ein zu hoher Wert dazu führt, dass der gesamte Arbeitsspeicher des Webservers von den Prozessen von Apache2 aufgebraucht wird, was zu einem Ausfall des Webservers führt. Die Variable max_execution_time legen die maximale Lebensdauer eines Skripts fest. Ähnlich ist die Konstante max_input_time, welche die maximale Zeitspanne für ein Skript festlegt, um Daten zu empfangen. Aufgrund der Rahmenbedingung aus Kapitel sind diese zwei Konstanten auf 6,66 Stunden festzulegen. Umgerechnet auf Sekunden ergibt das für einen Upload eine maximale Ausführungszeit von Sekunden. Die Variable max_file_uploads legt die maximale Anzahl an Dateien fest, die auf einmal hochgeladen werden dürfen. Diese Zahl wird auf 1 festgelegt, da es sich bei Video- Dateien, anders als bei Dokumenten oder Fotos, meistens um größere Dateien handelt und somit der Webserver schneller an seine Grenzen stößt. Symfony-PHP-Framework Die Installation [46] des PHP-Frameworks Symfony setzt die Rahmenbedingung um. Zusätzlich ist ein PHP-Beschleuniger nötig. Hierfür ist laut [47] der PHP-Beschleuniger APC geeignet. Zunächst müssen mit dem Kommando aptgetbefehl die nötigen Softwarepakete installiert werden. apt-get install php-pear php5-dev libpcre++-dev Anschließend ist über den Paketverwaltungsmanager PECL das APC-Paket zu installieren. pecl install APC Schließlich sind folgende Werte in der Datei php.ini nötig. extension = apc.so apc.rfc1867 = on 37
  44 5.5 Realisierung und Implementierung der Anforderungen Dieser Abschnitt beinhaltet die Realisierung der Anforderungen aus Kapitel Hochladen eines Videos Für das Hochladen eines Videos ist ein Formular nötig. Hierzu wird das mediaform- Formular, welches auf Basis der Media-Datebanktabelle aus dem Datenbankschema generiert wurde, um eine Upload-Logik ergänzt. Das Formular besteht aus den beiden Methoden configure und processvalues. Die Methode configure definiert die Formular-Initialisierung. In dieser Methode werden für die Felder des Formulars die Formularfeldtypklasse und die Validierungsklasse festgelegt. In diesem Fall wurde für das Datenbank-Feld mit dem Namen video der Feldtyp sfwidgetforminputfile festgelegt. Diese Klasse generiert zur Laufzeit den HTML-Quelltext für das Eingabeformular. Abbildung 5.4 zeigt die configure-methode des Formulars. Abbildung 5.4: Initialisierungsmethode configure des mediaform-formulars Für die Validierung eines Eingabefeldes zum Hochladen von Dateien stellt Symfony die Klasse sfvalidatorfile zur Verfügung. Diese Klasse ermöglicht es Konstanten, wie z.b. max_size für die Maximalgröße einer Datei (in Byte), mime_types für die zu unterstützenden Dateiformate und validated_file_class für die Nachverarbeitung einer gesäuberten Datei, festzulegen. In diesem Fall ist die Maximalgröße einer Datei Byte (120 Megabyte) groß, wodurch die Rahmenbedingung aus Kapitel erfüllt ist. Die Anzahl der unterstützten Dateiformate ist vom eingesetzten Media Server abhängig. CloudFront benutzt den Flash Media Server (FMS), um die Video-Dateien zu kodieren 38
  45 und als Streaming-Pakete über ein Netzwerk zu verteilen. Dieser unterstützt jedoch nur die Dateiformate FLV, MP4 und H264. Für eine Unterstützung der Dateiformate 3GP und MOV ist ein Media Server von Apple notwendig. Ebenso ist für das Format WMV von Microsoft ein spezieller Kodierer Voraussetzung. Um dieses Problem zu lösen, ist es notwendig jedes hochgeladene Video vor der Ablage in S3 in ein von CloudFront unterstütztes Dateiformat zu konvertieren. Die Formate WMV, MPG, MPEG können problemlos mittels dem Audio- und Video-Kovertierungsprogramm ffmpeg [22] in das FLV- Format konvertiert werden. Für das Format AVI ist aufgrund nicht mehr unterstützter Konvertierungs-Bibliotheken in Ubuntu die Konvertierung nicht ohne den Verlust der Audiospur möglich. Dadurch kann die Anforderung aus Kapitel nur teilweise umgesetzt werden. ffmpeg -i <temporärername> -b 1024k -s 320x240 -r 25 -ar ac 2 -acodec libmp3lame <generiertername> Mit der Methode processvalues ist es möglich, die beim Hochladen empfangenen Parameter abzufangen und deren standardmäßige Verarbeitung zu überschreiben. Hierbei wird der originale Dateiname des Videos zwischengespeichert, dem Video ein neuer Name zugeordnet und anschließend der originale Name als Titel verwendet. Des weiteren wird das zuletzt hochgeladene Video gesucht und dessen erzeugter Name als nächtes Video für das aktuell hochgeladene Video referenziert. Abbildung 5.5 zeigt die prozessvalues-methode. Für das Anzeigen des Formulars zum Hochladen wird eine eigene Action-Methode mit dem Namen executenew erstellt. Abbildung 5.6 zeigt den Aufbau dieser Methode. Zunächst wird eine Instanz des zuvor erstellten Formulars, sowie eine eindeutige ID für den Fortschrittsbalken erzeugt. Diese werden an das PHP-Skript newsuccess.php (siehe Abbildung 5.7) übergeben. Zusätzlich zum Datei-Upload-Eingabefeld wurde ein Textabschnitt für die Datenschutzbestimmungen und ein weiterer für die unterstützten Video-Formate eingefügt, wodurch die Anforderung aus Kapitel erfüllt ist. Ebenso befindet sich innerhalb des Formulars ein Bereich für die Fehlermeldungen. JavaScript sendet über ein jquery-form-plugin die Formular-Anfrage an den Server [31]. Gleichzeitig wird die Funktion checkprogress in einem Intervall von zwei Sekunden ausgeführt. Der Fortschrittsbalken wird weiter unten im späteren Verlauf dieses Kapitels genauer beschrieben. Ebenso überdeckt ein Layer während des Prozesses die Eingabemaske, so dass ein mehrfaches Absenden des Formulars nicht möglich ist. Abbildung 5.8 zeigt den JavaScript-Teil des Formulars zum Hochladen der Videos. 39
  46 Abbildung 5.5: Vorverarbeitungsmethode prozessvalues des Formulars Abbildung 5.6: Aufbau der Methode executenew Für das Absenden des Formulars werden im JavaScript-Object options die Einstellungen der Submit-Anfrage festgelegt. Hierzu gehören Angaben, wie der Name des HTML- Elements für die Antwort des Webservers, sowie der Name der Action-Methode. Ebenso eine Callback-Funktion definiert, die bei erfolgreicher oder fehlerhaften Übermittlung aufgerufen wird. Diese Callback-Funktion dient dazu, das Intervall des Fortschrittsbalken zu deaktivieren, sowie das Formular wieder freizugeben. 40
  47 Abbildung 5.7: Aufbau des Templates newsuccess zum Hochladen Das Formular sendet die Parameter an die Action-Methode executeupload, welche zunächst die Eingabeprüfung auf Seiten des Servers vornimmt und anschließend die Formulardaten verarbeitet. Abbildung 5.9 zeigt den Aufbau der Methode executeupload. Über die Methode $form>isvalid(), werden zunächst die Formulardaten anhand der in der Validierungsklasse sfvalidatorfile festgelegten Bedingungen geprüft. Anschließend, falls die Formulardaten die erfolgreich validiert wurden, wird über die Methode $form>save() die benutzerdefinierte Klasse, die unter der sfvalidatorfile-konstante validated_file_class angegeben wurde, aufgerufen. Diese ist für die Nachverarbeitung der gesendeten Parameter zuständig. Abbildung 5.10 zeigt die Validierungsklasse sfvalidatedfilecustom. 41
  48 Abbildung 5.8: JavaScript-Teil des Formulars zum Hochladen der Videos Integration einer Schnittstelle zu S3 Die Klasse sfvalidatedfilecustom erbt von der Klasse sfvalidatedfile und bietet dadurch die Möglichkeit, deren Methoden, in diesem Fall die Methode save, zu überschreiben. Normalerweise würde der Aufruf der save-methode die hochgeladene Datei lokal auf dem Server speichern. Da dieses aber nicht erwünscht ist, werden die Daten mit Hilfe der Zend-S3-API [58] in S3 abgelegt, um Speicherengpässen zu vermeiden. Hierzu wird die im temporären Verzeichnis zwischengespeicherte Video-Datei mit $s3->putfile() unter dem neuen Namen im Bucket abgelegt, wodurch die Anforderung aus Kapitel realisiert ist. Abbildung 5.11 zeigt die Fortsetzung der Validierungsklasse sfvalidatedfilecustom. Anschließend wird dem zuletzt hochgeladenen Video eine Referenz zum neuen Video hinzugefügt, wodurch die Anforderung einer doppeltverketteten Liste aus Kapitel ebenfalls erfüllt ist. Implementierung des Fortschrittsbalkens Für den Balken, der den Fortschritt beim Hochladen anzeigt, ist es notwendig, in den Cache eines Prozesses schauen zu können. Der zuvor installierte PHP-Beschleuniger APC bietet mit der Funktion apc_fetch(), die Möglichkeit über einen eindeutigen ID-Namen in den Cache-Status eines Prozesse oder einer Variablen zu schauen und somit die Größe festzustellen. Die Abbildung 5.12 zeigt die Action-Methode executecheckprogress, welche die zuvor erzeugte eindeutige ID verwendet, um den 42
  49 Abbildung 5.9: Aufbau der executeupload-methode Cache-Status des dazugehörigen Skript-Prozesses zu erhalten. Dieser wird anschließend mit $this->rendertext() an eine AJAX-Funktion zurückgegeben. Abbildung 5.12 zeigt die Action-Methode executeprogress mit der Logik des Fortschrittsbalkens. Aus der Größe des Caches kann im Vergleich zur Gesamtgröße der hochzuladenden Datei der aktuelle Status berechnet werden. Abbildung 5.13 zeigt den JavaScript- Quelltext der Logik des Fortschrittsbalkens. Der Aufruf der Action-Methode executecheckprogress wird gleichzeitig mit dem Absenden des Formulars in einem zwei Sekunden-Intervall ausgeführt. Der Rückgabewert enthält die Dateigröße und die Gesamtgröße der Datei. Daraus ergibt sich die Prozentzahl des Fortschritts beim Hochladen, welche über die JavaScript-Funktion reportprogress() im HTML-Element mit der ID progressbar in Form eines Fortschritts- 43
  50 Abbildung 5.10: Aufbau der Validierungs-Klasse sfvalidatedfilecustom Abbildung 5.11: Fortsetzung der Validierungsklasse sfvalidatedfilecustom balkens angezeigt wird. Dadurch ist die Anforderung des Fortschrittsbalkens aus Kapitel erfüllt. 44
  51 Abbildung 5.12: Action-Methode executeprogress mit der Logik des Fortschrittsbalkens Abbildung 5.13: JavaScript-Quelltext der Logik des Fortschrittsbalkens Video-Anzeige Die Video-Anzeige besteht aus der Action-Methode executeindex, die standardmäßig das zuletzt hochgeladene Video lädt. Abbildung zeigt den Aufbau der Methode executeindex.
  52 Abbildung 5.14: Aufbau der Action-Methode executeindex Falls die Methode executeindex einen ID-Parameter empfängt, wird anstatt des Startseiten-Videos der Datensatz mit der jeweiligen ID aus der Datenbank geladen. Aus diesem Datensatz wird, falls vorhanden, der Titel, die IDs des letzten und des nächsten Videos bezogen und an das Template indexsuccess übergeben. Das Template nimmt die Parameter der Methode executeindex entgegen und bindet diese in den HTML-Kontext ein. Hierbei wird der erzeugte Name des Videos in einem Verweis (Link- Tag) integriert. Dieser Verweis wird mit Hilfe der JavaScript-Datei jquery.flowplayer.js zur 46
  53 Laufzeit in ein Video-Objekt umgewandelt, das auf den generierten Namen des zuvor erstellten Verweises zeigt. Abbildung 5.15 enthält den HTML-Quelltext des Templates indexsuccess. Abbildung 5.15: HTML-Quelltext des Templates indexsuccess Automatische Wiedergabe Zur Laufzeit durchsucht das Skript jquery.flowplayer.js alle Verweise der Klasse rtmp und wandelt diese in ein Video-Objekt um, wodurch die Anforderung aus Kapitel umgesetzt ist. Dieser Kodierungsprozess kann über das Attribut clip festgelegt werden. Über Optionen des Attributs können u.a. das Streaming-Protokoll, der Pufferstart, sowie der Autostart festgelegt werden. Ebenso wird über einen Verweis zum Flowplayer und zum CloudFront-Streaming-Dienst der Flash-Player und die Quelle des Videos bestimmt. Abbildung 5.16 zeigt den JavaScript-Quelltext des Templates indexsuccess. Implementierung der automatischen Wiedergabe Die Anforderung aus Kapitel setzt die Option autoplay:true um. Diese sorgt dafür, dass die Videos sofort bei Aufruf abgespielt werden. Zudem können Callback- Funktionen definiert werden. Für die Realisierung einer Wiedergabeliste ist es nötig bei der Beendigung eines Videos automatisch auf das nächste Video zu wechseln. Dieses wird realisiert durch die Callback-Funktion onfinish: function()... Diese Funktion enthält den Befehl window.location.href, der beim Aufruf die übergebene Ziel- URL im Browser lädt. Am Ende der Wiedergabe führt die Callback-Funktion onfinish den Befehl window.location.href = + nextvideo aus. Die Variable nextvideo enthält die ID des letzten Videos. Obwohl der Flowplayer bereits eine Wiedergabeliste anbietet, ist von deren Verwendung abzuraten, da diese die don't break the Back-Button-Regel bricht [49]. Stattdessen ist in der implementierten Lösung die Navigation der Wiedergabeliste im Template indexsuccess integriert. Falls ein vorheriges oder nächstes Video existiert, ist dieses in Form einer Vor- und Zurück-Schaltfläche aufrufbar. 47
  54 Abbildung 5.16: Logik des Flowplayers im Template indexsuccess 5.6 Ergebnis Die in dieser Arbeit erstellte Lösung zum Video-Streaming ermöglicht sowohl das Hochladen, als auch Anzeigen von Videos. Das Hochladen von Videos ist ohne Registrierung möglich. Ein Video darf maximal 120 Megabyte groß sein. Eine Beschränkung der maximalen Laufzeit wurde nicht gesetzt. Der Server überprüft hochzuladende Videos auf ihre Größe und das Dateiformat. Die Eingabeprüfung findet serverseitig statt, wodurch längere Wartezeiten zustande kommen können bis das Resultat der Prüfung zurückgegeben werden kann. Der Grund dafür ist, dass nur vollständig übertragene Dateien geprüft werden können. Währenddessen zeigt ein Fortschrittsbalken den aktuellen Status beim Hochladen an. Abbildung 5.17 zeigt den Versuch ein Video mit dem Dateityp JPEG hochzuladen. Die Fehlermeldung ist rot gekennzeichnet und weist auf einen falschen Dateityp hin. Kompatible Videos werden an den Speicherdienst S3 weitergeleitet. Abbildung 5.18 zeigt den Fortschrittsbalken während des Hochladens eines Videos. Eine Eingabeprüfung auf Seiten des Clients ist nur teilweise realisierbar, da es nicht möglich ist, über JavaScript, die Binärdaten der markierten Datei auszulesen, um dadurch eine Überprüfung des Dateityps vorzunehmen. Das heißt, es ist ebenfalls nicht möglich, über eine AJAX Anfrage ein Formarelement des HTML Typs file zu versenden. Lediglich der Dateiname ist clientseitig überprüfbar. Eine Auswertung des Dateityps 48
  55 Abbildung 5.17: Fehlgeschlagener Versuch eine JPEG-Bilddatei hochzuladen auf dem Client ist von einer vollständigen Dateibenennung des Benutzers abhängig. Das heißt, dass der Dateityp immer dann nicht ermittelt werden kann, wenn die Dateiendung falsch geschrieben oder nicht vorhanden ist. Die Video-Anzeige besteht aus einem Bereich für die Wiedergabe des Videos, sowie einem Bereich für die Vorwärts- und Rückwärtsnavigation der Wiedergabeliste. Ebenso sind die Funktionen für Bewertung, Wiederholung und Suchen in die Webanwendung eingebettet, wobei deren Logik noch zu implementieren ist. Abbildung 5.19 zeigt die Video-Anzeige während der Wiedergabe eines Videos. Auf der Startseite ist das zuletzt hochgeladene Video zu sehen. Am Ende der Wiedergabe eines Videos wird das zuvor hochgeladene Video aufgerufen und sofort abgespielt. 5.7 Vergleich mit der existierenden Lösungen YouTube Über das Internetportal YouTube können die Benutzer Videos ansehen und hochladen. YouTube enthält eine umfangreiche Datenbank mit Filmen und Musikvideos. Der Erfolg lässt sich anhand der wachsenden Zahl der Benutzer, die Videos hochladen, bewerten 49
  56 Abbildung 5.18: Fortschrittsbalken beim Hochladen eines Videos und mit anderen teilen. Ebenso bietet YouTube den Benutzern die Möglichkeit, mit ihren eigenen Videos Geld zu verdienen, indem Werbung während der Wiedergabe geschaltet wird. Zusätzlich ist YouTube mit allen gängigen Endgeräten, wie z.b. Smartphones, kompatibel. YouTube besitzt auch ein ausgefeiltes Caching-System [27]. Ein Nachteil von YouTube ist, dass das Hochladen eines Videos nur mit einer vorherigen Registrierung möglich ist. Im Vergleich zu YouTube enthält die in dieser Arbeit entwickelte Video-Streaming- Lösung weder eine umfangreiche Video-Datenbank, noch eine Benutzerverwaltung. Daher sind das Erstellen einer eigenen Wiedergabeliste und die Möglichkeit mit eigenen Videos Geld zu verdienen nicht möglich. Zudem ist das Abspielen von Videos mit dem Apple iphone nicht möglich, da dieses keine den Flash-Player nicht unterstützt. Das in dieser Arbeit verwendete Caching-Verfahren hat verschiedene positive und negative Auswirkungen. Der Unterschied zu YouTube besteht darin, dass die Daten nicht auf dem Client zwischengespeichert werden, was positiv in Bezug auf die Datensicherheit, jedoch negativ bei der erneuten Wiedergabe eines bereits geladenen Videos ist. YouTube verwendet hierfür das sogenannte Pseudostreaming. Dabei handelt es sich um eine Mischung aus Download und Streaming. Ein Vorteil von Pseudostreaming ist, dass das Abspielen eines schon geladenen Videos auch ohne bestehende Internetverbindung möglich ist. Ein Nachteil ist, dass die Videos einfach kopiert werden können. 50
  57 Abbildung 5.19: Wiedergabe eines Videos Ein Vorteil der in dieser Arbeit entwickelten Streaming-Lösung ist der Verzicht auf eine Benutzerauthentifizierung. Dadurch ist für den Benutzer nicht nur das anonyme Hochladen, sondern auch die direkte Nutzung des Dienstes möglich. Eine Möglichkeit, die Serverkosten zu finanzieren ist durch Werbung. Ein weiterer Vorteil dieser Lösung ist der Einsatz von Cloud-Diensten (Rechen- und Speicherkapazität). Dadurch entfallen die Kosten für Anschaffung, Betrieb, Administration und Wartung für eigene Hardware. Durch den Dienst CloudFront können Videos global mit ähnlichen Übertragungszeiten verteilt werden. Ein weiterer wichtiger Vorteil der hier entwickelten Streaming-Lösung sind die selbst bestimmbaren Nutzungs- und Datenschutzbedingungen. Wie im Zitat auf Seite 14 beschrieben ist, werden beim Hochladen eines Videos YouTube diverse Rechte eingeräumt. Das heißt, dass YouTube das Recht hat, die hochgeladenen Videos der Nutzer zu nutzen, zu vervielfältigen und diese Rechte auch an Dritte weiterzugeben. 51