Der lise Blog:
Einsichten, Ansichten, Aussichten

Azure WebJobs zum Erzeugen von Thumbnails

Das Erzeugen von Thumbnails ist eine typische Aufgabe bei der Entwicklung von Webseiten, die dem Benutzer das Hochladen von eigenen Dateien mit anschließender Anzeige eines Vorschaubildes erlauben. So auch in einem unserer Kundenprojekte, bei dem wir auf Azure als Infrastruktur setzen und einen App Service zum Hosten der Webseite nutzen. In einem solchen Szenario bieten sich Azure WebJobs zur Lösung von Aufgaben, wie der Generierung von Thumbnails an. In diesem Blogartikel stellen wir die Vorteile einer solchen Lösung vor.

Einfache Integration mit Azure Storage Queues

Die Generierung eines Thumbnails zu einer Datei soll starten, sobald der Benutzer eine Datei hochlädt. Dank der guten Integration mit dem Azure Storage lässt sich über nur eine Zeile Code konfigurieren, dass der WebJob sofort getriggert wird, wenn sich eine neue Nachricht in einer Queue (hier „thumbnail-generation“) befindet.

 

public void GenerateThumbnail([QueueTrigger("thumbnail-generation")] ThumbnailGenerationQueueMessage message){...}

 

In der Queue Nachricht kann beispielsweise der Speicherort oder eine ID der Datei enthalten sein. Zudem wird diese automatisch durch den WebJob deserialisiert, so dass direkt mit dem entsprechenden Objekt gearbeitet werden kann.

Robust gegenüber Fehlern

Ein großer Vorteil von WebJobs ist das Handling von Exceptions. Tritt ein Fehler auf, wird lediglich die Verarbeitung der aktuellen Nachricht abgebrochen. Anschließend versucht der WebJob diese Nachricht erneut zu verarbeiten bis die maximale Anzahl an Versuchen erreicht ist und die Nachricht wird in die sogenannte -poison Queue verschoben.

 

Die maximale Anzahl an Verarbeitungsversuchen kann ebenfalls konfiguriert werden (als Standardwert ist 5 definiert):

 

JobHostConfiguration configuration = new JobHostConfiguration();
configuration.Queues.MaxDequeueCount= 3;

Dashboard zur Verwaltung und Diagnose

Der aktuelle Status des WebJobs kann bequem auf dem WebJobs Dashboard im Azure Portal analysiert werden.

Im Bereich Logs werden zu jeder Ausführung die Logeinträge und das Ergebnis festgehalten und über die Replay Funktion ein erneutes Ausführen mit gleichen Parametern ermöglicht.

Keine zusätzlichen Kosten

WebJobs laufen im Kontext eines vorhandenen App-Services und benötigen keine separate virtuelle Maschine. Jedoch ist zu beachten, dass bei WebJobs mit hoher Parallelität je nach gewählter Konfiguration des App-Services die Performance beeinträchtigt werden kann und das Wählen einer leistungsstärkeren virtuellen Maschine sinnvoll ist.

Automatische Skalierung

Laden besonders viele Benutzer eine Datei hoch, sollten die Thumbnails möglichst gleichzeitig und nicht sequentiell erzeugt werden, um so allen Benutzern ein möglichst schnelles Feedback in Form des Vorschaubildes anzuzeigen. Azure WebJobs skalieren hier automatisch in den Grenzen des zugehörigen App-Services hoch, so dass mehrere Nachrichten gleichzeitig verarbeitet werden können. Zusätzlich hat man die Möglichkeit, die BatchSize zu konfigurieren:

 

JobHostConfiguration configuration = new JobHostConfiguration();
configuration.Queues.BatchSize = 4;

 

Hier werden maximal vier Messages gleichzeitig verarbeitet. Setzt man BatchSize = 1 werden die Messages sequentiell abgearbeitet – maximal sind 32 möglich.

Einfaches Deployment

Das Deployment eines WebJobs ist sehr einfach. So kann eine Konsolenanwendung aus Visual Studio heraus mit wenigen Klicks in einem geführten Dialog als WebJob veröffentlicht werden.

 

Fazit

Azure Webjobs stellen eine gute Möglichkeit dar, um einfache Hintergrundaufgaben, wie das Erzeugen von Thumbnails umzusetzen. Sie erfordern keine separate virtuelle Maschine, skalieren automatisch, bieten ein robustes Exception Handling und lassen sich bequem erstellen sowie verwalten.

Möchte man hingegen rechenintensivere Aufgaben umsetzen oder werden mehr Konfigurationsmöglichkeiten benötigt (z. B. Anpassung der Umgebung) ist die Verwendung einer Lösung mit eigener VM besser geeignet.

Diesen Artikel weiterempfehlen

 Teilen  Teilen  Teilen  Teilen