Videoportal
Aus Winfwiki
Inhaltsverzeichnis |
1 Einleitung
„Videoportale sind Webseiten, die einerseits das Hochladen von Videos ermöglichen, andererseits Videostreams auf einem eingebundenen Player kostenfrei zur Verfügung stellen. Das heißt, dass die Inhalte in der Regel von den verschiedenen Nutzern eingestellt werden und nicht nur vom Betreiber der Webseite.“[1]
Aktuelle Übersichten von Videoportalen finden sich z.B. bei „Videoportale in Deutschland“ oder im Blog-Eintrag von Martin Weigert (zweinull.cc).
Die weiteren Abschnitte zeigen die beispielhafte Architektur eines Videoportals unter Berücksichtigung der zum Betrieb notwendigen Hard- und Software.
2 Grundlagen
Für den Nutzer präsentieren sich Videoportale sehr ähnlich, dies gilt auch für die zugrunde liegende Technologie. Gemeinsam ist z.B. die Verwendung des Flash-Video-Formates, welches auf Client-Seite nur den Flash-Player voraussetzt.
Zunächst werden die den meisten Videoportalen gemeinsamen Funktionen genannt, es folgt eine nähere Ausführung des Prozesses vom Datei-Upload bis hin zum betrachtungsfähigen Video.
2.1 Kernfunktionen
Viele Videoportale weisen eine gemeinsame Schnittmenge von Grundfunktionen auf. Diese sind u.a.:
- Betrachten von Videos
- Publizieren von Videos
- Bewertung und Kommentierung von Videos
- Thematische Übersicht anhand verschiedener Merkmale (Kategorien, Tags, redaktionelle Kriterien)
- Darstellung sortierter Videolisten (z.B. nach Datum des Hochladens, Bewertung, Anzahl Kommentare, Anzahl der Seitenaufrufe)
- Suchmöglichkeit bezogen auf Videotitel, Beschreibung, Tags, Informationen aus Benutzerprofilen
- Communityfunktionen zur Kommunikation zwischen Benutzern
- Erstellung von persönlichen Profilseiten
2.2 Uploadprozess
Die Benutzer können Videos in verschiedenen gängigen Formaten hochladen oder ein Video mittels ansgeschlossener Webcam übertragen.
Die Tabelle gibt Auskunft über den Anteil der Formate, die beim Hochladen verwendet werden.
| Format | durchschnittl. Anteil |
|---|---|
| wmv | 38,46% |
| flv | 19,71% |
| avi | 13,85% |
| mpg | 8,93% |
| 3gp | 8,77% |
| mp4 | 3,83% |
| mov | 3,16% |
| mpeg | 1,71% |
| m4v | 0,78% |
| asf | 0,45% |
| vob | 0,22% |
| dat | 0,13% |
| m2v | 0,01% |
Nach dem Upload trägt der Benutzer Daten zum Video ein, etwa Titel, Beschreibung, Tags, ausserdem erfolgt eine Auswahl von bis zu drei Kategorien. Diese sowie Verkehrsdaten wie Zeit und Datum des Hochladens, ursprünglicher Dateiname, ein Hash-Wert der Datei usw. werden in der Datenbank eingetragen. Die Speicherung der hochgeladenen Dateien erfolgt zunächst auf dem jeweiligen Web-Server.
Per Skript werden die neuen Videos von den Web-Servern abgeholt und zur weiteren Verarbeitung auf den Verteil-Server. Nachdem dies erfolgreich abgeschlossen ist, wird das Original vom Web-Server entfernt.
Während dieses Schrittes werden Prüfungen durchgeführt, die im Fehlerfall zum Abbruch führen. Falls in der Datenbank kein Eintrag zu der Datei gefunden wird, etwa bei einem Abbruch des Uploads durch den Anwender, wird auch die Video-Datei gelöscht. Eine Besonderheit ist die Prüfung der Datei anhand eines MD5-Hashwertes. Falls ein dem System bekanntes und somit identisches Video neu hochgeladen wurde, wird der Status des neuen Videos anhand des bestehenden gesetzt und es erfolgt kein erneutes Encoding, was neben der CPU-Zeit des Encoders Speicherplatz auf den Storage-Servern spart.
Falls ein Video als „neu“ klassifiziert wurde, muss der Encoding-Prozess angestossen werden. Der Encoding-Prozess besteht aus mehreren PHP-Skripten, die in Kombination die Encoder-Werkzeuge steuern, die Last auf den Encoding-Servern überwachen, Logfiles schreiben und Datenbankeinträge aktualisieren. Zur Identifizierung zu bearbeitender Video-Dateien werden leere Textdateien angelegt, die aus dem ursprünglichen Namen bestehen, als zusätzliche Dateiendung jedoch den Status (z.B. „.done“, „.error“, „.unsupported“) beinhalten.
Das Encoding läuft mehrstufig ab:
- Analyse des Videos (Dimensionen, Bitrate). Flash-Video-Dateien werden nicht ein weiteres Mal encodiert. Nach einer Prüfung werden nur die Meta-Informationen neu erstellt, während der Codec erhalten bleibt, um Qualitätsverluste durch erneutes Bearbeiten zu vermeiden.
- Kodierung mit ffmpeg
- Falls ein Fehler auftritt, erfolgt ein Versuch der Transcodierung mit mencoder: Die Video-Datei wird dabei in ein Zwischenformat überführt (.avi). Anschliessend erfolgt das Encoding zu .flv. Falls hierbei Fehler auftreten, werden diese in Logfiles dokumentiert.
- Im Erfolgsfall entsteht eine .flv-Datei sowie eine neue Status-Datei (s.o.). Darüber hinaus werden zehn Bilddateien aus dem Videomaterial generiert, die als Vorschau-Bilder zur Darstellung auf der Web-Site dienen. Ferner nimmt eine XML-Datei Meta-Daten wie z.B. die Länge des Videos auf.
Durch permanente Analyse und Optimierung des Prozesses liegt die Erfolgsquote des Encodings zwischen 99,5 % und 99,9 % (Stand Januar 2008).
Nach Abschluss des Encodings werden die .flv-Dateien auf die sog. „Seed-Server“, die Vorschau-Bilder auf die Download-Server verteilt, anschliessend der Abschluss dieses Prozesses als Änderung des Status in der Datenbank vermerkt. Daneben werden die aus der vom Encoder erzeugten XML-Datei gewonnenen Meta-Daten ebenfalls in der Datenbank gesichert. Die Original-Video-Dateien verbleiben auf dem internen Storage-Server. Die Protokollierung erfolgt anhand jeweiliger Logfiles.
Damit steht das Video zur Betrachtung durch die Besucher der Web-Site bereit.
3 Architektur
3.1 Hardware
3.1.1 Struktur der Hardware
Während sich das Videoportal für den Benutzer als einheitliche Web-Site präsentiert, agieren im Hintergrund eine Vielzahl von Diensten, die sich grob in folgende Komponenten unterteilen lassen:
- Web-Server
- Video- und Bilder-Download-Server
- Datenbanken
- Suchmaschine / Such-Datenbank
- Encoding-Server
- interne Server / Storage / Verteilung / Backup / Monitoring
Neben der Benutzerebene existiert für die Administration eine weitere Ebene, die nur nach entsprechender Authentifikation zugänglich ist für Mitarbeiter oder Benutzer mit besonderen Rechten, welche auf freiwilliger Basis die Community unterstützen.
3.1.2 Webserver
Zum Stand 01/2008 besteht die Serverfarm aus acht Web-Servern, intern bezeichnet als web1 – web8. Diese befinden sich in einem Rechenzentrum bei einem Provider in Köln. Zur Lastverteilung und Herstellung von Redundanz sind den Webservern zwei Loadbalancer vorgeschaltet. Für den Benutzer ist dieser Vorgang transparent, d.h. nach außen hin ist nicht sichtbar, von welchem Web-Server die Inhalte ausgeliefert werden. Der HTTP-Traffic passiert dabei ein- sowie ausgehend den Loadbalancer. Die Loadbalancer sind „sticky“ konfiguriert, so dass der User pro Session von jeweils ein- und demselben Web-Server bedient wird.
3.1.3 Video- und Bilder-Download-Server
Zur Auslieferung von Bildern, d.h. Video-Vorschau-Bilder, sog. „Thumbnails“, Icons, Profilbilder usw. existieren zwei Web-Server, die unter einheitlicher Adresse verfügbar sind.
Die Flash-Video-Dateien werden von sechs Video-Download-Servern zur Verfügung gestellt, die als Proxy konfiguriert sind. Dadurch wird vermieden, dass alle Video-Dateien auf allen Download-Servern vorgehalten werden müssen. Sämtliche Video-Dateien befinden sich auf den redundant ausgelegten Storage-Einheiten, den sog. „Seed-Servern“ mit je 4,0 TByte Speicherplatz (seed-fra1 und seed-fra2). Ein Request einer Video-Datei geht zunächst auf den Loadbalancern ein. Der ausgehende HTTP-Traffic erfolgt direkt von jeweils einem der Download-Server. Falls die angefragte Datei auf dem Download-Server nicht vorhanden ist, wird diese intern von einem der Seed-Server geladen.
Sowohl die Bilder- als auch Video-Download-Server befinden sich in einem Rechenzentrum in Frankfurt/Main, was einen direkten Anschluss an den Internet-Knoten DE-CIX zum Zweck des „Peerings“ ermöglicht. Des Weiteren besteht ein Anschluss zu einem Provider.
3.1.4 Datenbanken
Zur Speicherung sämtlicher Meta-, User- und sonstiger Daten dienen zwei Datenbank-Server, welche als Master-Master-Replikation eingerichtet sind. Die Sicherung erfolgt somit permanent auf beiden Maschinen, was bei Problemen ein nahtloses Umschalten und infolge dessen sehr kurze Ausfallzeit ermöglicht. Weitere Maschinen mit ähnlicher Konfiguration stehen zurüknftig zur Entlastung der primären Datenbank-Server bereit.
3.1.5 Suchmaschine und -datenbank
Mitte Januar 2008 wurde eine Suchmaschine in Betrieb genommen, welche für die Videosuche die bis dato eingesetzte Datenbank ablöst. Die Suchmaschine besteht aus einem als Master konfigurierten Server sowie drei Slaves. Eine von den Web-Servern ausgehende Such-Anfrage geht zunächst auf dem Software-Loadbalancer-Dienst auf dem Master ein, welcher für die Verteilung auf die Slaves sorgt. Die Slaves beantworten die Such-Anfrage, die Ergebnisse werden an den Web-Server übermittelt, auf dem sie zunächst aufbereitet und als Web-Seite an den Benutzer weitergeleitet werden. Die Such-Server befinden sich ebenfalls in einem Rechenzentrum in Köln.
3.1.6 Encoding Server
Die Video-Clips können von den Benutzern in verschiedenen Formaten hochgeladen werden. Für das Encoding in das Flash-Video-Format sorgen fünf Encoding-Server. Diese werden in einem Serverraum in-house betrieben.
3.1.7 Interne Server
Zusätzlich stehen weitere Server für unterschiedliche Aufgaben zur Verfügung:
- Entwicklungsserver: Auf dem Entwicklungsserver befinden sich die Entwicklungsumgebungen der beteiligten Programmierer sowie weitere Tools, die bei der Entwicklung und zur Kommunikation eingesetzt werden, etwa ein Wiki zur Dokumentation, eine spezielle Variante der Server-Software, welche Debugging ermöglicht, ein Projektmanagement-Tool, sowie das Quellcode-Versionsverwaltungssystem Subversion. Die interne Datenbank beinhaltet eine tagesaktuelle Spiegelung der Live-Datenbank sowie weitere zur Entwicklung notwendige Test-Datenbanken. Daneben dient dieser Server zur Aufnahme von Log-Datenbanken.
- Verteilungsserver / Cronjobs: Auf diesen Servern ist eine „hochfrequente Content-Verteilung“ eingerichtet. Diese besteht aus mehreren Skripten, die sich gegenseitig überwachen, Logfiles erstellen oder auch die Generierung von zu verteilenden Dateien starten.
- interner Storage: Zur Aufnahme der Original-Video-Dateien steht eine weitere Storage-Einheit mit einem Speicherplatz von ca. 4,0 TByte zur Verfügung.
- Backup: Das Backup der verschiedenen Server erfolgt an zentraler Stelle im Unternehmen.
- Monitoring: Das Monitoring wird ebenfalls zentral durchgeführt und bietet neben der Bereitstellung von Echtzeit-Statistiken verschiedene Eskalationsstufen wie Benachrichtigung per E-Mail oder SMS.
3.2 Software
3.2.1 Betriebssystem
Als Betriebssystem wird mit Ausnahme der Encoding-Server Linux in der Debian-Distribution eingesetzt. Auf den Encoding-Servern befindet sich aus „traditionellen Gründen“ bzw. wegen der besseren Verfügbarkeit der Codes Microsoft Windows Server 2003.
3.2.2 HTTP-Server
Der Apache HTTP Server, kurz Apache, ist ein Webserver, welcher von der Apache Software Foundation entwickelt wird und unter einer Open Source Lizenz „frei“ zur Verfügung steht. Er zeichnet sich durch eine Vielzahl von Erweiterungen, sogenannten Modulen aus. Der Apache kommt auf mehreren Komponenten zum Einsatz: Web-Server, Download-Server, Seed-Server, Entwicklungs- und Verteilungs-Server, Suchmaschine (Master).
3.2.3 mod_proxy
Auf den Video-Download-Servern wird insbesondere vom mod_proxy-Modul Gebrauch gemacht. Dabei wird die Fähigkeit der Konfiguration als „Reverse Proxy“ eingesetzt: Die Anfrage des Client geht dabei an den Download-Server. Der Proxy „entscheidet, an welche Stelle die Anfrage gesendet wird und gibt die Inhalte zurück als ob er selbst die Quelle wäre“[3].
3.2.4 PHP
PHP (ein rekursives Akronym: „PHP Hypertext Preprocessor“) ist eine „weitverbreitete Open Source Skriptsprache speziell für Webentwicklungen“[4]. Hauptsächlich wird PHP für die Entwicklung dynamischer Web-Seiten eingesetzt, es lässt sich als Modul im Web-Server Apache integrieren.
PHP wird an an vielen Stellen eingesetzt. Zunächst auf den Web-Servern zur Generierung dynamischer Inhalte, aber auch zur Verteilung und Generierung von statischen Inhalten. Der Encoding-Prozess wird auf den Encoding-Servern ebenfalls von PHP-Skripten gesteuert, die auf System-Ebene, d.h. nicht mehr im Zusammenspiel mit einem Web-Server ablaufen.
3.2.5 Zend Platform
Die Zend Platform ist ein kommerzielles Produkt der Zend Technologies Ltd.. Dieses bietet u.a. Echtzeitanalysen der PHP-Anwendungen, Beschleunigung durch Bytecode-Cache, dynamisches Cachen von Teilen oder gesamten Webseiten-Inhalten sowie ein webbasiertes Management-Interface.
Zend Platform ist auf den Web-Servern installiert, hauptsächlich wegen der Geschwindigkeitssteigerung durch den Bytecode-Cache. Dabei werden die PHP-Skripte nicht bei jedem Aufruf neu interpretiert, sondern zunächst in Bytecode umgewandelt, welcher nur bei Änderung der zugrunde liegenden Skripte neu erstellt werden muss. Der Bytecode kann wesentlich schneller durch das PHP-Modul ausgeführt werden als reiner Quellcode.
3.2.6 memcached
Der memcached ist ein „verteiltes Speicher Objekt Caching System“[5] für Hochgeschwindigkeits-Anwendungen. Nach dem Key-Value-Prinzip können beliebige Inhalte in den Cache gelegt und wieder ausgelesen werden. Memcached besteht aus dem Server-Prozess sowie den Client-APIs, letztere sind für die Aufteilung der zu speichernden Objekte auf die memcache-Server zuständig, sofern mehrere memcache-Server eingesetzt werden. Der memcached befindet sich auf allen Web-Servern, ein Teil des verfügbaren RAM wird von memcached benutzt. Als Client wird die PHP Extension eingesetzt. Gespeichert werden Video- und User-Objekte, welche jeweils Meta-Informationen zu den Videos bzw. User-Informationen enthalten. So können etwa die Video-Informationen vollständig aus dem Speicher gelesen werden und bedürfen keiner Datenbank-Abfrage.
3.2.7 MySQL
MySQL ist ein relationales Datenbankmanagementsystem, was unter einer Open Source Lizenz zur Verfügung steht und insbesondere im Weg-Umfeld sehr häufig benutzt wird. "Flexible Anbindungsmöglichkeiten, Geschwindigkeit und Sicherheit machen MySQL Server äußerst geeignet für den Zugriff auf Datenbanken im Internet."[6].
MySQL wird zur Speicherung sämtlicher anfallender Daten eingesetzt. Dies sind z.B. die Video-Daten, Benutzer-Daten, Community-relevante Daten wie Nachrichten zwischen Benutzern, aber auch zur Generierung von Listen zwecks Geschwindigkeitssteigerung.
3.2.8 Encoding-Tools
3.2.8.1 FFmpeg
FFmpeg ist eine "Komplettlösung zum Aufnehmen, Konvertieren und Streamen von Audio und Video"[7]. FFmpeg besteht aus verschiedenen Programmen wie dem Konvertierungs-Tool, Streaming-Server, Media Player sowie der libavcodec Bibliothek, welche die in FFmpeg vorhandenen Audio-/Video-Encoder sowie Decoder vereinigt. FFmpeg wird als primäres Encoding-Tool eingesetzt.
3.2.8.2 MEncoder
MEncoder ist ein Tool zur Encodierung von Video-Formaten, die vom MPlayer-Projekt unterstützt werden. Dabei können verschiedene Codecs auch mit mehreren Durchläufen eingesetzt werden.
Beim Encoding-Prozess dient MEncoder als zweite Instanz, falls es beim Encoding-Versuch mit FFmpeg zu Fehlern kommt. Der MEncoder wird für "Transcoding" eingesetzt, wobei zunächst ein Zwischenformat und in einem zweiten Schritt die gewünschte Flash-Video-Datei erzeugt wird.
3.2.9 Suchmaschine Solr
Da eine qualitativ hochwertige Suche bei einem Videoportal eine grosse Rolle spielt (etwa 30% aller Requests sind Suchanfragen), wurde im Herbst 2007 eine neue Such-Technologie evaluiert und integriert. Zuvor bestand die Suche aus einer Datenbank (MySQL Full-Text Index), was aufgrund der steigenden Anzahl Videos zu Problemen bei Geschwindigkeit, Flexibilität und Redundanz führte.
Als Suchmaschine wird Solr, ein „Open Source Enterprise Search Server“[8] eingesetzt. Solr basiert auf der Technologie der Apache Lucene Java Bibliothek und bietet ein Komplettpaket bestehend aus Indizierung, „Suche, Caching, Replikation und Web Administration Interface“[9]. Solr benötigt einen Java Servlet Container wie Tomcat oder Jetty, wobei Jetty im Solr-Paket enthalten ist. Solr indiziert XML-Daten, das Suchergebnis wird als XML oder JSON ausgegeben.
Zu Beginn steht eine Komplett-Indizierung der Video-Daten. Die erfassten Daten bestehen aus Titel, Beschreibung, Tags, User, Datum und Zeit des Uploads usw.. Bei der Komplett-Indizierung werden diese Daten mittels eines PHP-Skriptes aus der Datenbank geholt und für jedes Video in ein für spezielles XML-Format überführt. Diese XML-Daten werden dem Indizierer übergeben, woraus eine Index-Datei generiert wird. Die Indizierung findet ausschliesslich auf dem Master-Server statt. Sobald die Indizierung abgeschlossen ist, wird die Index-Datei auf die drei Slave-Server verteilt.
Solr bietet ebenfalls die Möglichkeit, im laufenden Betrieb dem Index weitere Daten hinzuzufügen. Dies geschieht etwa nach dem Upload eines neuen Videos. Sobald ein neues Video auf dem Web-Server hochgeladen wurde, wird ein Request auf den Master abgesetzt, welcher die Informationen, dass ein neues Video existiert, entgegennimmt und in einer Queue speichert. Diese Queue wird regelmässig abgearbeitet, dabei holt der Master die notwendigen Meta-Informationen aus der Datenbank, wandelt sie in XML um und übergibt diese Daten dem Solr-Server, welcher daraufhin die Index-Datei aktualisiert.
Eine Such-Anfrage wird zunächst von den Web-Servern entgegen genommen. Die Such-API wandelt diese Anfrage in eine von Solr verwendete Syntax um und sendet diese weiter an den Software-Loadbalancer Balance, welcher sich auf dem Master-Server befindet. Dieser verteilt den Request auf einen der Slave-Server. Dort wird die Anfrage von Solr verarbeitet, das Ergebnis geht im JSON-Format direkt an den jeweiligen Web-Server zurück. Anschließend erfolgt die Aufbereitung der Daten als Web-Seite.
4 Quellen
- ↑ „Videoportale in Deutschland im Spannungsfeld zwischen Fernsehen und Internet“, Grundlagenstudie ZEM, Accenture, SevenOne Media, 2007 (Artikel)
- ↑ Encoding Report Statistiken vom 15. - 19.01.2008, eigene Auswertung
- ↑ http://httpd.apache.org/docs/2.0/mod/mod_proxy.html, Forward and Reverse Proxies, Stand 18.Januar 2008
- ↑ http://www.php.net/manual/de/preface.php, Vorwort, Stand 18. Januar 2008
- ↑ http://www.danga.com/memcached/, What is memcached?, Stand 18. Januar 2008
- ↑ http://dev.mysql.com/doc/refman/5.1/de/what-is.html, Was ist MySQL?, Stand 18. Januar 2008
- ↑ http://ffmpeg.mplayerhq.hu/, Project Description, Stand 17. Januar 2008
- ↑ http://lucene.apache.org/solr/, What is Solr?, Stand 17. Januar 2008
- ↑ Vgl. ebd.

