Archive for the ‘Gearman’ tag
PHP 7: Migration eines Projekts
Noch knapp einen Monat warten, dann erscheint das Christkind PHP7! Was gibt es also schöneres als sich damit zu beschäftigen und erste Erfahrungen zu sammeln?
Im Januar habe ich mir speziell den Arbeitsspeicherverbrauch von PHP 7 angeschaut, die ChangeLogs verinnerlicht, es kompiliert und ein paar Testzeilen ausgeführt. Das lief schon sehr gut, aber um größere Projekte laufen zu lassen mangelte es noch an einigen Extensions. Außerdem wollte ich ein Zend Framework 1 Projekt testen, und ZF1 war zu dem Zeitpunkt noch nicht PHP 7-kompatibel.
Doch das hat sich geändert. ZF1 ist seit Mai 2015 mit Version 1.12.12 PHP 7 kompatibel, und auch die von mir benötigten Extensions wurden umgebaut, sodass es nun PHP 7-kompatible Branches vieler Extensions auf Github gibt.
Die Vorgehendweise: Neueste PHP 7 Version herunterladen, kompilieren, Extensions herunterladen, kompilieren, und dann SPASS HABEN!
Also los! PHP 7 RC5 kompilieren
Gearman Worker verbinden sich nach Upgrade nicht mehr
Heute ein kurzer Tipp bezüglich PECL/gearman: Wenn ihr bei der Nutzung einer aktuellen Version den folgenden Fehler bekommt
send_packet(GEARMAN_COULD_NOT_CONNECT) Failed to send server-options packet -> libgearman/connection.cc:430
dann liegt es daran dass ihr keinen Port beim Aufruf der Methode GearmanClient::addServer() angegeben habt. Bisher war der zweite Parameter optional und als Default wurde 4730 genommen, aber seit einigen Versionen (welcher genau kann ich nicht sagen) scheint er angegeben werden zu müssen. Wir benutzen aktuell PECL/gearman Version 1.1.1 kompiliert mit libgearman 1.1.5
Falls ihr also Gearman nutzt und den zweiten Parameter noch nicht gesetzt habt, fügt ihn am besten jetzt schon hinzu, damit ihr bei einem Upgrade in der Zukunft keine Probleme bekommt.
Hier habe ich die Lösung gefunden (wäre ich selbst wahrscheinlich nie drauf gekommen):
http://stackoverflow.com/questions/14883681/gearman-gives-me-gearman-could-not-connect-it-is-definitely-running
https://answers.launchpad.net/gearmand/+question/221277
Richtige Threads in PHP einfach erstellen mit pthreads
Wir alle haben gelernt dass PHP kein richtiges Multi-Threading kann, und auch Kindprozesse zu forken ist nicht ganz trivial. Extensions wie PCNTL funktionieren nicht unter Windows und sind schwer zu bedienen. Man kann sich eventuell mit exec() behelfen und damit weitere Prozesse starten, verliert dann jedoch die Möglichkeit, die Prozesse zu synchronisieren oder einfach Nachrichten zwischen ihnen auszutauschen.
Und wer möchte eigentlich Threads in PHP und wofür?
Größere Projekte gehen heutzutage häufig den Weg, für Asynchronität und Parallelität Tools wie Gearman zu nutzen. Mit einem Gearman-Job-Server und einer beliebigen Menge an verbundenen Workern, die auch noch in beliebigen Programmiersprachen geschrieben sein können, kann man eine Menge Arbeit parallelisieren, aber ist eine komplette Gearman-Installation wirklich immer nötig? Gerade für kleinere Projekte ist das sicherlich zuviel, und auf Shared Hosting Platformen kann man keine Worker starten.
Probleme mit libmemcached und PECL memcached Inkompatibilität
Da wir uns bei mail.de wunderten warum eines unserer Preload-Scripte nicht so funktioniert wie es sollte, habe ich gestern und heute mehrere Stunden damit zugebracht herauszufinden woran das liegt.
Das Preload-Script ist eine Art Warmup-Script, es lädt gewisse Daten in den Memcached-Server die kurz darauf benötigt werden (könnten). Das Preload-Script läuft mittels Gearman auf eigenen Maschinen, getrennt von den Apache-Webservern.
Da wir neue Features erstmal in einer Umgebung testen die der Live-Umgebung sehr ähnlich ist (wir nennen sie PreLive, andere nennen sie staging), fiel uns da auf dass das Preloading nicht so funktionierte wie gewünscht. Auf unseren Entwicklermaschinen und in der kleinen lokalen Testumgebung ist es nicht aufgefallen da dort beides nicht getrennt ist.
Linkpool Nummer 7
Blogartikel über Mutation Testing, sehr interessant um seine Tests zu testen:
http://blog.astrumfutura.com/index.php?/plugin/tag/mutateme
Webseitengeschwindigkeit ist wichtig:
http://www.stevesouders.com/blog/2010/05/07/wpo-web-performance-optimization/
http://devzone.zend.com/article/12078-Zend-Framework-1.10.4-Released
Einfacher forken unter Linux mit PCNTL:
http://kore-nordmann.de/blog/0098_native_job_queue.html
Git post-receive Hooks mit Gearman umgesetzt:
http://weierophinney.net/matthew/archives/240-Writing-Gearman-Workers-in-PHP.html
http://code.ning.com/2010/05/php-microbenchmarking/