Feb
7
Asynchrone PHP Prozesse mit Gearman
Bei großen Berechnung- und Verarbeitungsaufgaben in PHP kommt es häufig vor, dass Laufzeiten überschritten werden oder enorm lange Ladezeiten auf Seiten des Besuchers entstehen. Um die Ladezeiten bei größeren Datenverarbeitungen, zum Beispiel der Erzeugung von Thumbnails nach dem Hochladen eines Bildes, zu verringern, kann der Prozess an in eine "Message-Queue" verlagert werden. Der Prozess wird dann über eine Queue von Gearman abgearbeitet und der Besucher kann ohne Wartezeiten auf dem Internetauftritt surfen. Nach kurzer Zeit erscheint dann zum Beispiel sein generiertes Foto in unterschiedlichen Auflösungen in der Galerie, denn der Gearman-Prozess hat die Daten im Hintergrund verarbeitet und dann dem PHP-Skript mitgeteilt, dass die Arbeiten abgeschlossen sind. Danach werden die Daten zum Beispiel in einer Datenbank eingetragen und für das Frontend des Internetauftritts freigegeben.
Die Installation des Gearman-Dienstes unter Ubuntu 11.04/12.04 und 12.10 ist relativ einfach. Linux Grundwissen setze ich bei der Installation voraus.
sudo apt-get install python-software-properties -y
sudo add-apt-repository ppa:gearman-developers/ppa
sudo apt-get update
sudo apt-get install gearman-job-server libgearman-dev gearman-tools php-pear php5-dev libevent-dev uuid-dev
pecl install gearman
Beim Auftreten der Fehlermeldung
error: libgearman version 1.0.1 or later required
muss das Paket "gearmand" manuell aus den PECL-Sourcen installiert werden.
Schritte für die Installation von "gearmand" unter Ubuntu:
Ubuntu 10.04 LTS
sudo apt-get install libboost-program-options1.40-dev libboost-thread1.40-dev
Ubuntu 11.04
sudo apt-get install libboost-thread1.42-dev libcloog-ppl0 libboost-program-options-dev
Ubuntu 11.10 oder 12.04
sudo apt-get install libboost-thread1.46-dev libcloog-ppl0 libboost-program-options-dev
Kompilieren von "libgearman" bzw. "gearmand".
Bei Launchpad (launchpad.net) das aktuellste gearmand Paket herunterladen.
sudo apt-get install uuid-dev libevent-dev -y
wget https://launchpad.net/gearmand/1.2/1.1.5/+download/gearmand-1.1.5.tar.gz
tar xfv gearmand-1.1.5.tar.gz
cd gearmand-1.1.5
./configure
make && make install
sudo ldconfig
Tritt beim Kompilieren der Fehler "fatal error: curl/curl.h: No such file or directory" auf, dann muss das Paket "libcurl4-gnutls-dev" installiert werden.
sudo apt-get install libcurl4-gnutls-dev
Nach der Installation von libcurl4-gnutls-dev, muss "make" erneut ausgeführt werden. Wurde "make" ohne Fehler beendet, dann kann "make install" ausgeführt werden.
Neu kompilierten Gearmand-Server nutzen
Datei "/etc/init.d/gearman-job-server" zum Beispiel mit vim bearbeiten.
sudo vim /etc/init.d/gearman-job-server
In der Datei "gearman-job-server" die Zeile "prefix=/usr" durch folgenden Eintrag ersetzen.
prefix=/usr/local
Nun können wir das Installieren von gearman über die PECL-Paketquellen erneut versuchen.
sudo pecl install gearman
Wurde die Installation erfolgreich abgeschlossen, muss die Gearman-Extension noch PHP bekannt gemacht werden.
echo "extension=gearman.so" > /etc/php5/conf.d/gearman.ini
Gearman-Server starten
/etc/init.d/gearman-job-server start