Job Queue in Zend Server 5.0Jan BurklSysten Engineer, Zend TechnologiesDas Webinar kann hier angeschaut werden:http://www....
Agenda●   Was ist Job Queue und wofür ist sie gut?●   Wie sie funktioniert●   Verwendung der API    ▶   Jobs erstellen, Pa...
Was ist Job Queue?...und wofür ist sie gut?                            © All rights reserved. Zend Technologies, Inc.
Was versuchen wir zu lösen?●   Off-line Bearbeitung?     ▶   Web Applikationen tendieren dazu in HTTP Request/Response Cyc...
Beispiel: Ein On-line Forum                 © All rights reserved. Zend Technologies, Inc.
Und jetzt mit Job Queue!                © All rights reserved. Zend Technologies, Inc.
Job Queue erlaubt Ihnen...●   bestimmte Tasks in eine separate Execution Queue zu packen     ▶   Off-load zu einem spätere...
Also, es ist ein hübscher Cron?●   Nein    ▶   Sie können Dinge JETZT ausführen, jedoch ohne auf das Ende        warten zu...
Wie genau funktionert es?Architektur und ein paar Interna                       © All rights reserved. Zend Technologies, ...
Job Queue 4.x - Architekturüberblick                 © All rights reserved. Zend Technologies, Inc.
Job Queue 4.x - Architekturüberblick                       Job Queue Daemon                               JQ Protocol over...
Job Queue 4.x - Architekturüberblick                                                                                 Execu...
Verwendung der Job Queue APIKreieren & Ausführen von Jobs                      © All rights reserved. Zend Technologies, I...
Die ZendJobQueue Class●    Die ZendJobQueue Klasse beinhaltet fast die komplette     PHP API für Job Queue●    Um Tasks au...
Jobs kreieren●    Jobs werden durch Verwendung der createHttpJob()     Methode kreiert●          $queue = new ZendJobQueue...
Parameter Weitergabe●   Einfache Parameter können als Part eines Query Strings    übergegeben werden     ▶   Dies ist verf...
Parameterübergabe (Beispiel) $params = array(    cart => array(      items => array(        array(id => 324, qty => 1, pri...
Parameter-Zugriff●    Im Job code, verwenden Sie die statische     ZendJobQueue::getCurrentJobParams() Methode:     $param...
Weitere Job Optionen●    Der 3. Parameter des createHttpJob ist ein assoziatives     Array von Optionen:     ▶   name     ...
Deferred Jobs kreieren●    Execution Time über schedule_time:         // Process the form at 3:00 am         $runAt   = da...
Recurring Jobs kreieren●    Recurring Jobs durch schedule Option.●    cron-ähnliche Syntax, die das Scheduling spezifizier...
Reporting von Logical Failures●    Ein logischer Fehler tritt auf, wenn etwas bei der Programmierung     scheitert      ▶ ...
Quick Tour durch UI   © All rights reserved. Zend Technologies, Inc.
Demo Time!             © All rights reserved. Zend Technologies, Inc.
Ein paar Benchmarks   © All rights reserved. Zend Technologies, Inc.
Emails versenden●   Requests/Second bei einem einfachen E-mail Versand-    Script:                              Baseline  ...
Image Konvertierung●   Image Konvertierung mit Hilfe von ImageMagick                          Baseline                    ...
Final WordsWie gehts weiter?                     © All rights reserved. Zend Technologies, Inc.
Theres more!●   Prioritäten managen●   Job Dependencies●   Querying nach Jobs●   Job Status und Queue Statistics überprüfe...
Vielen Dank!© All rights reserved. Zend Technologies, Inc.
Using the Job Queue APIQuerying for jobs and checking status                       © All rights reserved. Zend Technologie...
Querying for job status●    Wenn die Job Id bekannt ist, kann der Status überprüft     werden: // When=creating the job:  ...
Querying for jobs●    Die Job List kann nach unterschiedlichen Parametern     durchsucht werden:    // Query for all faile...
WebinarDas Webinar kann hier angeschaut werden:http://www.zend.com/de/webinar/Server/70170000000bHqW-Backend-Processing-mi...
Upcoming SlideShare
Loading in …5
×

Backend Processing mit Job Queue

1,012 views
916 views

Published on

Dies sind die Präsentationsfolien des Zend Webinars "Lassen Sie Ihre End-User nicht warten: Backend Processing mit Job Queue".

Außergewöhnlich lange laufende Tasks, wie z. B. Buchungsprozesse oder das Versenden von E-Mails, führen zu einer unnötigen Last auf Ihrem Web-Server und erhöhen die Response-Zeit Ihrer Applikation. Mit der Job Queue von Zend Server 5 haben Sie die Möglichkeit, die Ausführung solcher Tasks in den Hintergrund auszulagern oder sogar auf einen anderen Server zu verschieben.

Sehen Sie in diesem Webinar, wie Sie die Job Queue für einen Performance-Boost Ihrer Applikation einsetzen können.

Sprecher – Jan Burkl

Das dazugehörige Webinar kann unter http://bit.ly/qv2gTE angeschaut werden, nach einer kurzen, kostenlosen Registrierung.

Published in: Technology, Business
1 Comment
0 Likes
Statistics
Notes
  • Dies sind die Präsentationsfolien des Zend Webinars 'Backend Processing mit Job Queue'.

    Das dazugehörige Webinar kann unter http://bit.ly/qv2gTE angeschaut werden, nach einer kurzen, kostenlosen Registrierung.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
1,012
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Backend Processing mit Job Queue

  1. 1. Job Queue in Zend Server 5.0Jan BurklSysten Engineer, Zend TechnologiesDas Webinar kann hier angeschaut werden:http://www.zend.com/de/webinar/Server/70170000000bHqW-Backend-Processing-mit-Job-Queue-20100622_DE.FLV © All rights reserved. Zend Technologies, Inc.
  2. 2. Agenda● Was ist Job Queue und wofür ist sie gut?● Wie sie funktioniert● Verwendung der API ▶ Jobs erstellen, Parameter weiterleiten ▶ Parameter akzeptieren ▶ Zeitplan und wiederkehrende Jobs ▶ Failure und Success Reporting● Quick Tour des Administration Interfaces● Zum Nachtisch: ein paar Benchmarks● Für die, die noch nicht genug haben... © All rights reserved. Zend Technologies, Inc.
  3. 3. Was ist Job Queue?...und wofür ist sie gut? © All rights reserved. Zend Technologies, Inc.
  4. 4. Was versuchen wir zu lösen?● Off-line Bearbeitung? ▶ Web Applikationen tendieren dazu in HTTP Request/Response Cycles zu “leben” ▶ Was ist zu tun, um Vorgänge Off-line zu nehmen? ▶ Was ist zu tun, wenn periodische Ausführung benötigt wird?● Es ist unter anderem eine Frage von User-Experience: ▶ User warten lassen ist nicht hilfreich● Zend Server Job Queue erlaubt Ihnen Vorgänge Off-line auszuführen! ▶ Dinge asynchron, später oder auf einem anderen Server laufen zu lassen ▶ Dinge periodisch laufen zu lassen © All rights reserved. Zend Technologies, Inc.
  5. 5. Beispiel: Ein On-line Forum © All rights reserved. Zend Technologies, Inc.
  6. 6. Und jetzt mit Job Queue! © All rights reserved. Zend Technologies, Inc.
  7. 7. Job Queue erlaubt Ihnen...● bestimmte Tasks in eine separate Execution Queue zu packen ▶ Off-load zu einem späteren Zeitpunkt (oder sogar parallel laufen lassen) ▶ Off-load auf einen anderen Server● bestimmte Tasks zu einem definierten Zeitpunkt auszuführen ▶ Verschieben des Processing Load in Off-Hours● bestimmte Tasks periodisch auszuführen● Während… ▶ Große Mengen von bestehender Infrastruktur & Code wiederverwendet werden können ▶ Sichergestellt wird, dass nichts verloren geht ▶ Alles von einer PHP API erledigt wird © All rights reserved. Zend Technologies, Inc.
  8. 8. Also, es ist ein hübscher Cron?● Nein ▶ Sie können Dinge JETZT ausführen, jedoch ohne auf das Ende warten zu müssen ▶ Sie können Dinge einmalig ausführen, nicht zwingend sofort ▶ Sie können Dinge periodisch ausführen (wie cron) ● Und haben volle Kontrolle über sie – Starten, Stoppen,Verschieben, Fortsetzen von der PHP API ▶ Job Queue gibt Ihnen genaue Übersicht über was gerade passiert ● Erhalten Sie Benachrichtigungen über Failed Jobs, analysieren Sie Errors und Re-queue ● Behalten Sie den Überblick über vergangene, laufende und wartende Jobs in der GUI ● API für Querying Job Status und Failure Handling ▶ Keine Hacks notwendig © All rights reserved. Zend Technologies, Inc.
  9. 9. Wie genau funktionert es?Architektur und ein paar Interna © All rights reserved. Zend Technologies, Inc.
  10. 10. Job Queue 4.x - Architekturüberblick © All rights reserved. Zend Technologies, Inc.
  11. 11. Job Queue 4.x - Architekturüberblick Job Queue Daemon JQ Protocol over TCP or Unix Socket PHP + Job Queue Extension © All rights reserved. Zend Technologies, Inc.
  12. 12. Job Queue 4.x - Architekturüberblick Executing Server HTTP Request Job Queue Daemon © All rights reserved. Zend Technologies, Inc.
  13. 13. Verwendung der Job Queue APIKreieren & Ausführen von Jobs © All rights reserved. Zend Technologies, Inc.
  14. 14. Die ZendJobQueue Class● Die ZendJobQueue Klasse beinhaltet fast die komplette PHP API für Job Queue● Um Tasks auszuführen, müssen Sie sich mit einem Job Queue server verbinden, in dem Sie ein ZendJobQueue Object instantieren : // Connect to the default JQ server $queue = new ZendJobQueue(); // Connect to any other JQ server $queue = new ZendJobQueue("tcp://1.2.3.4:5678"); © All rights reserved. Zend Technologies, Inc.
  15. 15. Jobs kreieren● Jobs werden durch Verwendung der createHttpJob() Methode kreiert● $queue = new ZendJobQueue(); $queue->createHttpJob( http://backend.local/jobs/somejob.php);●● Weitergabe eines Pfads anstatt einer kompletten URL kreiert den Job mit $_SERVER[HTTP_HOST] im Host Name $jobPath = /jobs/otherjob.php; $queue->createHttpJob($jobPath); // This is equivalent to: $queue->createHttpJob(http:// . $_SERVER[HTTP_HOST] . $jobPath); © All rights reserved. Zend Technologies, Inc.
  16. 16. Parameter Weitergabe● Einfache Parameter können als Part eines Query Strings übergegeben werden ▶ Dies ist verfügbar innerhalb des Jobs in $_GET● Komplexe Parameter können im 2. Parameter des createHttpJob() übergeben werden ▶ Übergabe eines assoziativen Arrays key => value Paaren ▶ Wert kann beliebige Daten beinhalten, die auch mittels JSON repräsentiert werden können ● Null, Booleans, Strings, Integers, Floating Point Zahlen ● Indizierte Arrays (einschließlich Nested Arrays) ● Objekte und assoziative Arrays © All rights reserved. Zend Technologies, Inc.
  17. 17. Parameterübergabe (Beispiel) $params = array( cart => array( items => array( array(id => 324, qty => 1, price => 19.95), array(id => 75, qty => 2, price => 14.95, size => XL) ), total => 49.85, coupon => null, giftwrap => true ), user => $user ); $queue->createHttpJob( http://backend/jobs/checkout.php, $params); © All rights reserved. Zend Technologies, Inc.
  18. 18. Parameter-Zugriff● Im Job code, verwenden Sie die statische ZendJobQueue::getCurrentJobParams() Methode: $params = ZendJobQueue::getCurrentJobParams(); var_export($params); /* Output will be: array ( cart => array ( items => array ( 0 => array ( id => 324, qty => 1, price => 19.95, ), ... */● Sie können auch json_decode() des Raw POST Bodys verwenden: $params = json_decode(file_get_contents(php://input)); © All rights reserved. Zend Technologies, Inc.
  19. 19. Weitere Job Optionen● Der 3. Parameter des createHttpJob ist ein assoziatives Array von Optionen: ▶ name ▶ priority ▶ persistent ▶ predecessor ▶ http_headers ▶ schedule ▶ schedule_time © All rights reserved. Zend Technologies, Inc.
  20. 20. Deferred Jobs kreieren● Execution Time über schedule_time: // Process the form at 3:00 am $runAt = date(Y-m-d h:i:s, strtotime(+1 day 3:00am)); $options = array( schedule_time => $runAt ); $queue->createHttpJob(http://backend/jobs/process.php, $_POST, $options);● Der Job wird nicht vor der bestimmten Zeit ausgeführt ▶ Abhängig vom Queue Load, wird es eventuell danach ausgeführt © All rights reserved. Zend Technologies, Inc.
  21. 21. Recurring Jobs kreieren● Recurring Jobs durch schedule Option.● cron-ähnliche Syntax, die das Scheduling spezifiziert // Run on Sunday, Monday, and Tuesday at midnight $jq->createHttpJob( http://localhost/jobs/feed/405, array(), array(schedule => 0 0 * * 0,1,2)); // Run every other day of the month at 2:30pm $jq->createHttpJob( http://localhost/jobs/feed/405, array(), array(schedule => 30 14 */2 * *)); © All rights reserved. Zend Technologies, Inc.
  22. 22. Reporting von Logical Failures● Ein logischer Fehler tritt auf, wenn etwas bei der Programmierung scheitert ▶ Z.B. Versand von Emails oder Verbindung zu SOAP Service schlägt fehl ▶ Unterschied zu einem Execution Failure, der eine technische Störung darstellt (Z.B. TCP Error oder HTTP 500 Error vom Server)● Logische Fehler müssen programmatisch gemeldet werden: if (! $pp->sendPaymentRequest()) { // Report failure ZendJobQueue::setCurrentJobStatus( ZendJobQueue::FAILED, "Error from payment service: " . $pp->getError()); } // Everything went well ZendJobQueue::setCurrentJobStatus(ZendJobQueue::OK); © All rights reserved. Zend Technologies, Inc.
  23. 23. Quick Tour durch UI © All rights reserved. Zend Technologies, Inc.
  24. 24. Demo Time! © All rights reserved. Zend Technologies, Inc.
  25. 25. Ein paar Benchmarks © All rights reserved. Zend Technologies, Inc.
  26. 26. Emails versenden● Requests/Second bei einem einfachen E-mail Versand- Script: Baseline Job Queue 140 128,81 127,82 128,61 120 100 80 60 40 20 9,39 3,38 1,5 0 1 recipient 3 recipients 6 recipients © All rights reserved. Zend Technologies, Inc.
  27. 27. Image Konvertierung● Image Konvertierung mit Hilfe von ImageMagick Baseline Job Queue 30 27,7777 25 20 15 10 5 0,7845 1,2746 1,4771 0 ±2mb Image ±30k Image © All rights reserved. Zend Technologies, Inc.
  28. 28. Final WordsWie gehts weiter? © All rights reserved. Zend Technologies, Inc.
  29. 29. Theres more!● Prioritäten managen● Job Dependencies● Querying nach Jobs● Job Status und Queue Statistics überprüfen● Recurring Jobs & Queues Verschieben/Fortsetzen● Custom HTTP Headers weitergeben● Failure Handling und Retry Control● Load Management und Balancing © All rights reserved. Zend Technologies, Inc.
  30. 30. Vielen Dank!© All rights reserved. Zend Technologies, Inc.
  31. 31. Using the Job Queue APIQuerying for jobs and checking status © All rights reserved. Zend Technologies, Inc.
  32. 32. Querying for job status● Wenn die Job Id bekannt ist, kann der Status überprüft werden: // When=creating the job: $jobId $jq->createHttpJob($url, $params, $options); // To check for the jobs status (must be connected to the same queue) $status = $jq->getJobStatus($jobId); var_export($status); // Output is: array ( id => 126, type => 1, status => 4, priority => 1, persistent => false, script => http://localhost/mail/job.php, vars => {"email":"shahar.e@zend.com"}, output => HTTP/1.1 200 OK ...<snip>, creation_time => 2009-10-21 19:40:01, start_time => 2009-10-21 19:41:03, end_time => 2009-10-21 19:41:05, ); © All rights reserved. Zend Technologies, Inc.
  33. 33. Querying for jobs● Die Job List kann nach unterschiedlichen Parametern durchsucht werden: // Query for all failed "Sales Report" jobs $jobs = $jq->getJobsList(array( status => ZendJobQueue::STATUS_FAILED, name => Sales Report )); // Try to re-run failed jobs foreach($jobs as $job) { echo "Attempting to re-queue failed job #{$job[id]}...n"; $jq->restartJob($job[id]); } © All rights reserved. Zend Technologies, Inc.
  34. 34. WebinarDas Webinar kann hier angeschaut werden:http://www.zend.com/de/webinar/Server/70170000000bHqW-Backend-Processing-mit-Job-Queue-20100622_DE.FLVoderhttp://bit.ly/qv2gTE(nach einer kurzen Registrierung) © All rights reserved. Zend Technologies, Inc.

×