Kategorien
WebTech

Einfach mal schnell machen: Mediasite und varnish

Mein Kollege Joachim hat ja schon einen oder zwei erste Einblicke in die Arbeiten am Videoportal der Bergischen Universität gegeben. Ich würde mit euch nun gerne einen Blick unter die Motorhaube werfen und zeigen, dass das, was wir am Vergaser (IIS) nicht einstellen konnten, einfach durch einen ordentlichen Turbo (varnish) wieder wettgemacht haben. 😉 Nun aber genug der Autobilder, starten wir mal…

Der Aufbau des Videoportals der Uni Wuppertal ist nicht so ganz trivial, hier sind eine Menge Server im Spiel, welche miteinander interagieren und sich gegenseitig beeinflussen. Folgend daher nur die schematische Darstellung der für die Auslieferung wichtigen Server. Nur diese sind für uns relevant, schließlich ist ja hier der Flaschenhals zu erwarten.

Das Setup des Videoportals schematisch vereinfacht

Bei jedem Aufruf eines Videos werden die Elemente, die die Webseite des Videoportals ausmachen, von den beiden Webservern ausgeliefert. Die Fragmente der Videos, also das, worauf es ankommt, werden durch die Videoserver und einen Loadbalancer an die User geschickt. Aber eben leider nicht an besonders viele gleichzeitig, relativ schnell kam das System ins Stolpern, das hätte den Anforderungen von Uni@Home in der Form nicht standgehalten.

Da musste also mehr Power rein und das ganze sollte dann auch redundanter werden. Wir haben aus diesem Grund Kontakt mit der Firma varnish AB gesucht, da wir das Hauptprodukt, den varnish cache, schon für unsere TYPO3 Server verwenden und damit sehr zufrieden sind. varnish AB hat uns dann sehr zeitnah und absolut unbürokratisch nach Auftrag einen Techniker zur Seite gestellt. Lucas hat dann unser Setup umgebaut und vor unsere Video- und Webserver des Videoportals eine redundante varnish pro Installation realisiert.

Schematische Darstellung des varnish Video Streaming und VoD Setups

Die Architektur basiert auf einem 1-tier Aufbau mit zwei varnish Servern, die so konfiguriert sind sowohl die Web- als auch MediaSite Server zu erreichen. Das Setup ist in der Lage, die beiden Varnish Instanzen in einer aktiven/aktiven Konfiguration vorzuhalten. In normalen Situationen ist varnish01 für den Webseiteninhalt zuständig und varnish02 wird für das Streaming bzw. die Video on Demand Auslieferung verwendet. In Ausfallsituationen ist jede Instanz in der Lage mit den anderen Inhalten (Web und Video) umzugehen.

Die dahinterliegende Konfigurationsdatei in VCL (Varnish Configuration Language) für die beiden Server ist ziemlich schlank gehalten und konzentriert sich auf das Caching der Videofragmente. Die Webseite des Videoportals wird hierbei kaum zwischengespeichert, hier handelt es sich hauptsächlich um statische HTML und CSS Dateien, welche auch von einem IIS schnell ausgeliefert werden können. 😉 Die Videofragmente jedoch sind gut zu cachen und werden durch die beiden Server für drei Tage zwischengespeichert.

//#dont cache manifests
if (bereq.url ~ ".mpd|.m3u8|manifest") {
	set beresp.uncacheable = true;
} else {
//#cache video fragments for max 3 days
	set beresp.ttl = 3d;
}

Wichtig ist, die manifest Dateien nicht zu cachen, daher werden diese auf uncacheable gesetzt.

Weiterhin verlassen wir uns auf die „Probe“-Funktionalität von varnish. Damit können wir feststellen, ob die entsprechenden Mediasite-Server (Web und Video) denn überhaupt betriebsbereit sind oder ob varnish diese erstmal als „krank“ markiert und nicht mehr darauf zugreift.

probe mediasite_stream {
	.url = "/Deliver/OnDemand/MP4Video/33504616.mp4;
	.timeout = 1s;
	.interval = 5s;
	.window = 5;
	.threshold = 3;
}

Für die Streamingserver lassen wir varnish ein sehr kleines .mp4 Video anfragen ;), die Webserver (siehe unten) werden auf die funktionierende API geprüft.

probe mediasite_web {
	.url = "/API/v1";
	.timeout = 1s;
	.interval = 5s;
	.window = 5;
	.threshold = 3;
}

Interessant ist sicherlich auch noch die Skalierung der Maschinen, wir verwenden hier je Maschine einen RAM Cache in der Größe von ca. 112 GB, insgesamt verfügen die beiden Server jeweils über 128 GB Arbeitsspeicher. Varnish arbeitet hier mit dem brandneuen Memory Govenor in Verbindung mit der Massive Storage Engine.

-s mse,/etc/varnish/mse.conf -p memory_target=112G

Die o.a. Parameter im Startaufruf von varnish in Verbindung mit folgenden Zeilen in der mse.conf

env: {
	id = "myenv";
	memcache_size = "auto";
};

sorgen dafür, dass varnish im Rahmen des memory_targets seinen Bedarf selbstständig an die Begebenheiten anpassen kann.

Alles in allem ein einfaches wie bestechendes Setup, welches wir ohne die tatkräftige Hilfe der Mitarbeiter*innen bei varnish AB sicherlich nicht in der Kürze der Zeit so elegant realisiert bekommen hätten. Also Charlotte, Lucas und Jonatan: You rock! Danke!

2 Antworten auf „Einfach mal schnell machen: Mediasite und varnish“

Thank you, guys!!! It was amazing work with such great and dedicated people like you 🙂

Quoting:
„Do you all go to watch TV or Netflix right now!
Office hours are starting tomorrow again…
Crazy people..“

Hey Lucas, I hope that Google translator did the trick. I failed to write it in English… :/

Nice quote…who said that…ah, oh, wait, yes, was ME! You guys kept on discussing at 23:00 at night. 😉

By the way: Today we got a new max, the whole setup was running very smooth, no bottleneck. We are happy. Great piece of software and great work!

Peak today

Kommentare sind geschlossen.