gearman - distributed job system
DESCRIPTION
Gearman ermöglicht paralleles abarbeiten von Aufgaben auf verteilten Systemen und Prozessen. Es bietet die Möglichkeit, Jobs zu parallelisieren, Last zu verteilen und Funktionen sprachübergreifend aufzurufen. In dieser Session werden neben den Grundlagen auch praxisbezogene Beispiele gezeigt.TRANSCRIPT
© Mayflower GmbH 2010
Gearman
Frank Ruske I IPC I 11. Oktober 2010
Mayflower GmbH I 2
Gearman
Mayflower GmbH I 3
GEARMAN – MANAGER
„Gearman is an anagram for Manager, since it dispatches jobs to be done, but does not do anything useful itself.“
http://www.gearman.org
Mayflower GmbH I 4
Gearman – History
I Initial in Perl geschrieben
· Brad Fitzpatrick (Danga Interactive - Livejournal.com / Sixapart.com)
http://brad.livejournal.com/2106943.html
· Danga Interactive (memcached, MogileFS, DJabberd, gearman)
http://www.danga.com/
Mayflower GmbH I 5
Gearman – Heute
I Implementierung des Frameworks in C
· Brian Aker und Eric Day Brian: Drizzle MySql Fork, Mysql Memcached Storage
Engine, C Client Library memchached server …Eric Day: Drizzle …
I PHP Extension von James Luedke / Craigslist.com
Mayflower GmbH I 6
OpenSource Application Framework
zum Verteilen von Aufgaben
„distributed job system“
Mayflower GmbH I 7
GEARMAN – MANAGER
„Worker <=> Manager <=> Client“
Mayflower GmbH I 8
Gearman – Übersicht
I Gearman Client
· Erstellt Aufgaben und sendet selbige zum Jobserver
I Gearman Server
· Verteilt Aufgaben an Worker;
· Liefert Ergebnisse an Clients
I Gearman Worker
· Registriert sich am Jobserver und arbeitet Jobs ab
Mayflower GmbH I 9
Gearman – Client / Server / Worker
Mayflower GmbH I 10
Installation & Konfiguration
Mayflower GmbH I 11
Gearman – Installation
Mayflower GmbH I 12
Gearman – Starten
I Starten des Gearman als Daemon Servers· /usr/local/sbin/gearmand -d --listen=127.0.0.1 –-port=4730
▪ -d = daemon / Hintergund Prozess
▪ --listen = Nur auf diese IP / Host reagieren
▪ --port = Der Port
I Debugging· /usr/local/sbin/gearmand --listen=127.0.0.1 -vv -p4730
Mayflower GmbH I 13
Gearman – Help – /usr/local/sbin/gearmand -h
Mayflower GmbH I 14
Gearman – Installation PHP Extension
echo extension="gearman.so" >> php.ini
http://php.net/manual/de/install.pecl.phpize.php
Oder “pear install gearman“
Mayflower GmbH I 15
PHP CLIENT
Mayflower GmbH I 16
Gearman – Client PHP
I Gearman Client PHP
· Erstellt Aufgaben und sendet selbige zum Jobserver
· Parameter: Jobname (@param string) , Workload (@param mixed)
Mayflower GmbH I 17
PHP WORKER
Mayflower GmbH I 18
Gearman – Worker PHP
I Gearman Worker PHP
· Registriert sich am Jobserver und arbeitet Jobs ab
Mayflower GmbH I 19
Gearman – Workflow der Beispielanwendung
Mayflower GmbH I 20
DAS PROTOKOLL
Mayflower GmbH I 21
Gearman – Das Binär Protokoll
I Die Client- und Worker-APIs kommunizieren mit dem Daemon über TCP Sockets.
I Die Kommunikation zwischen Workern, Clients und Jobserver erfolgt mittels Binärpaketen.
I Der Header dieses Binärpakets ist wie folgt aufgebaut:
· 4 Byte Code: "\0REQ" für Requests oder "\0RES" für Responses.
· 4 Byte Code: big-endian Integer für den Pakettyp
· 4 Byte Große: big-endian Integer, Datengröße für nach dem Header verschickte Daten
Mayflower GmbH I 22
Gearman – Übersicht der Gearman TCP Packet- Typen
I Übersicht der Gearman TCP Packet- Typen
Mayflower GmbH I 23
Gearman – Protokoll Unterscheidung Binär / Text
I Textbasiertes Protokoll für administrative Zwecke
· Gleicher Port / Unterscheidung Anhand des ersten Chars
\0 => Binär ProtokollAlles andere => Text Protokoll
Mayflower GmbH I 24
Gearman – Das Text Protokoll / Befehle 1
I Textbefehle:
· “workers“ => Liste aller registrierten WorkerInklusive IP und Funktionen, die sie bearbeiten können
· „status“ => Liste aller registrierten Aufgaben Reihenfolge▪Jobs in Warteschlange ▪Laufende Jobs▪Anzahl registrierter Worker die den Job ausführen
können
Mayflower GmbH I 25
Telnet- Zugriff auf Gearman-Jobserver
Mayflower GmbH I 26
Gearman – Das Text Protokoll / Befehle 2
I Weitere Textbefehle:
· “maxqueue“ => Setze maximale Anzahl der Jobs in der Warteschlange für eine Funktion
Beispiel: maxqueue GearmanJob_UpperCase 100
· „shutdown“ => Server beenden Option “Gracefull”:▪Listening Socket schließen, aber Jobs noch ausführen
· „version“ => Zeige Gearman Server Version
Mayflower GmbH I 27
Distributed Processing
Mayflower GmbH I 28
Gearman Workflow
Mayflower GmbH I 29
Gearman Cluster / Load Balancing
Mayflower GmbH I 30
Gearman – Distributed I
I Möglichkeit beliebig viele Jobserver, Worker und Clients parallel bzw. dezentral miteinander kommunizieren und arbeiten zu lassen
I No Single Point of Failure
I Extrem niedriger Protokoll Overhead
· Jobserver kann hunderte von Clients und Worker verwalten
Mayflower GmbH I 31
Gearman – Distributed II
I Einfache dezentrale und erweiterbare Struktur
I Nutzen vorhandener Infrastrukturen (Software und Hardware)
Mayflower GmbH I 32
„Command Line Tool“gearman shell worker und gearman shell client
Mayflower GmbH I 33
Gearman – Command Line Tool
I Wird beim Kompilieren der Gearman Librarys installiert
I Kann als Gearman Client und Worker eingesetzt werden
I Binary z.B. in „/usr/local/bin/gearman“
I Hilfe: „/usr/local/bin/gearman -H“
Mayflower GmbH I 34
Gearman – Command Line Tool - Help
Mayflower GmbH I 35
„SHELL CLIENT“
Gearman Command Line Tool
Mayflower GmbH I 36
Gearman – Command Line Tool – Client
I Client Aufruf (Job mit Workload ausführen)· /usr/local/bin/gearman -f GearmanJob_UpperCase "make me upper"
I Client Aufruf mit Linux PIPE (just 4 fun)· /usr/local/bin/gearman -f GearmanJob_LowerCase < /etc/passwd
Mayflower GmbH I 37
„SHELL WORKER“
Gearman Command Line Tool
Mayflower GmbH I 38
Gearman – Command Line Tool - Worker
I Durch das flag -w wird eine Worker Instanz initialisiert. · gearman -w -f GearmanJob_UpperCase -- tr '[:lower:]' '[:upper:]';
I Kommt nun vom Jobserver eine Aufgabe „GearmanJob_UpperCase „ so wird der Workload an das Linux Programm tr übergeben und von diesem bearbeitet.
Mayflower GmbH I 39
„MySQL Client“
UDF - User defined functions
Mayflower GmbH I 40
Gearman – MySQL Client (UDF)
Gearman API Funktionalitäten für SQL Querys, Trigger und Stored Procedures
https://launchpad.net/gearman-mysql-udf
Mayflower GmbH I 41
„Gearman Manager“
Mayflower GmbH I 42
Gearman – Gearman Manager I
I OpenSource PHP Applikation zum Managen von PHP Gearman Worker Prozessen (http://github.com/brianlmoon/GearmanManager)
I Cronjob vs Start-Stop-Daemon == Zombie vs. Fork
I PHP-POSIX-Extension
· Kontrollieren von Prozessen auf Betriebssystemebene
· POSIX ermöglicht es PHP Prozesse zu forken und als Daemons laufen zu lassen
Mayflower GmbH I 43
I Gearman Manager => PHP Gearman Worker als Daemon laufen lassen
· Mit diesem Aufruf werden 3 PHP Gearman Worker Scripte im Hintergrund als Daemon geforkt
php manager.php -a -D3 -w"/export/home/www/gearman.examples.local/htdocs/GearmanManager/workers/" -h127.0.0.1:4730 -d -P“/var/run/gearman_manager.pid“
Gearman – Gearman Manager II
Mayflower GmbH I 44
Gearman – Gearman Manager – Funktionen
Mayflower GmbH I 45
Einsatzgebiete?
Mayflower GmbH I 46
Gearman – Mögliche Einsatzgebiete
I Rechenintensive Operationen
· Thumbnail Erstellung
· Video Processing
· Statistiken / Logfile Analysen
· Katalog Import
· Etc...
I Cache Warmup
I Kommunikation zwischen verschiedenen Architekturen
Mayflower GmbH I 47
Gearman – Rechenintensive Operationen
find ./ -name "*.php" -o -name ".htaccess" | xargs egrep -rin "ini_set(.*)max_execution_time(.*)|set_time_limit[:blank:]{0,1}\((.*)\)|ini_set(.*)memory_limit|php_value(.*)max_execution_time|php_value(.*)memory_limit"
Mayflower GmbH I 48
Quellen
I Resources / Links:
· http://www.gearman.org
· http://danga.com, http://www.livejournal.com/, http://www.sixapart.com/
· http://gearman.org/index.php?id=protocol
· https://launchpad.net/gearman-mysql-udf
· http://php.net/manual/en/install.pecl.phpize.php
· http://github.com/brianlmoon/GearmanManager
· http://en.wikipedia.org/wiki/POSIX
· http://man.cx/start-stop-daemon%288%29
28.10.10 Mayflower GmbH 49
Vielen Dank für Ihre Aufmerksamkeit!
Kontakt Web http://www.mayflower.de
Email: [email protected]
Tel +49 931 35965 1161
Mayflower GmbH
Pleichertorstr. 2
97070 Würzburg