21.11.2015 Jobrunner anstelle von Cronjob

Aus Android Wiki

Die sogenannte JobQueue von MediaWiki ist ein wichtiger Bestandteil von MediaWiki, um die Performance zu verbessern. Mit Hilfe der JobQueue können Performance-intensive Aufgaben, bzw. Aufgaben, die eine längere Zeit in Anspruch nehmen, asynchron (also unabhängig von Aufrufen des Frontends) ausgeführt werden. In der Standardkonfiguration wird ein Job pro Seitenaufruf ausgeführt. Bei DroidWiki wurde diese Einstellung auf 0 reduziert (sodass kein Job pro Seitenaufruf ausgeführt wird), um die Performance zu verbessern. Stattdessen wurden die Jobs automatisiert alle 5 Minuten durch ein Cronjob auf dem Server ausgeführt. Das Ausführen von Jobs unabhängig von Seitenaufrufen zu machen, macht durchaus Sinn und wird so auch bei anderen MediaWiki-Projekten durchgeführt (wie bspw. der Wikipedia). Ein Nachteil: Bei Aktionen auf der Webseite, die einen Job in die JobQueue einstellten, war ein Ergebnis bisher erst nach (im Worst Case) 5 Minuten sichtbar. Das wird bspw. beim Hochladen von Dateien ein Problem, da diese erst nach 5 Minuten im Suchindex erscheinen (welcher per Job aktualisiert wird) und somit erst dann im VisualEditor zur Verfügung stehen. Andere Negativeffekte können zudem zusätzlich auftreten.

Um diese negativen Auswirkungen bestmöglich zu eliminieren, musste eine bessere Lösung als ein Cronjob her. Die Lösung: der MediaWiki JobRunner service. Dieser kleine, PHP-basierte, Service, erlaubt es, Jobs innerhalb weniger Sekunden nach deren Einstellung auszuführen (bzw. je nach der aktuellen Menge der Jobs in der JobQueue nach einer gewissen, individuellen Wartezeit). Durch die kontinuierliche Ausführung von Jobs kann nun im Mittel eine schnellere Ausführung von Jobs gewährleistet werden. Die Abhängigkeit an ein bestimmtes Zeitraster entfällt ebenfalls, da die Ausführung nun nur noch von der Menge an Jobs in der Warteschlange abhängt, nicht mehr von einer bestimmten Zeit. Zusätzlich zu der Installation des Jobrunner service als Upstart service auf dem DroidWiki Server, musste die JobQueue auf Redis umkonfiguriert werden (der Jobrunner ist auf eine Redis-JobQueue angewiesen), was mit dem Change 1140 durchgeführt wurde.

Nach einer kurzen Testphase blieb als einzige Aufgabe lediglich, den Cronjob von seinen Diensten zu entbinden und bis auf Weiteres zu deaktivieren. Ab nun sollten alle Aufgaben, die auf einen Job angewiesen sind, schneller als vorher erledigt werden :)


← zurück zur Übersicht