SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Job Queue in Zend Server 5.0
Jan Burkl
Systen Engineer, Zend Technologies

Das 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.
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.
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 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.
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ä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.
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.
Wie genau funktionert es?
Architektur und ein paar Interna




                       © All rights reserved. Zend Technologies, Inc.
Job Queue 4.x - Architekturüberblick




                 © All rights reserved. Zend Technologies, Inc.
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.
Job Queue 4.x - Architekturüberblick
                                                                                 Executing Server




                                                                  HTTP Request




                Job Queue Daemon




                 © All rights reserved. Zend Technologies, Inc.
Verwendung der Job Queue API
Kreieren & Ausführen von Jobs




                      © All rights reserved. Zend Technologies, Inc.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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                    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.
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.
Final Words
Wie geht's weiter?




                     © All rights reserved. Zend Technologies, Inc.
There's 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.
Vielen Dank!




© All rights reserved. Zend Technologies, Inc.
Using the Job Queue API
Querying for jobs and checking status




                       © All rights reserved. Zend Technologies, Inc.
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 job's 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.
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.
Webinar
Das Webinar kann hier angeschaut werden:
http://www.zend.com/de/webinar/Server/70170000000b
HqW-Backend-Processing-mit-Job-Queue-
20100622_DE.FLV
oder
http://bit.ly/qv2gTE


(nach einer kurzen Registrierung)




                                © All rights reserved. Zend Technologies, Inc.

Weitere ähnliche Inhalte

Andere mochten auch

Sistema nacional bachillerato_sep-2007
Sistema nacional bachillerato_sep-2007Sistema nacional bachillerato_sep-2007
Sistema nacional bachillerato_sep-2007Leo Nela
 
EMS-Dienstleistungen
EMS-DienstleistungenEMS-Dienstleistungen
EMS-DienstleistungenNicole Eisele
 
Tabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-EmsTabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-EmsSCM Fussball
 
2014.03.04 - Seminar Invitation_Revisiting the social contract
2014.03.04 - Seminar Invitation_Revisiting the social contract2014.03.04 - Seminar Invitation_Revisiting the social contract
2014.03.04 - Seminar Invitation_Revisiting the social contractOECD_NAEC
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampWerner Keil
 
IoT em Ação: Criando um Moderno Sistema para Hospitais
IoT em Ação: Criando um Moderno Sistema para HospitaisIoT em Ação: Criando um Moderno Sistema para Hospitais
IoT em Ação: Criando um Moderno Sistema para HospitaisFernando Rizzato
 
IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...
IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...
IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...GCB German Convention Bureau e.V.
 
Realtime workshop Lisboa - 2013-01-10 (Portuguese)
Realtime workshop Lisboa - 2013-01-10 (Portuguese)Realtime workshop Lisboa - 2013-01-10 (Portuguese)
Realtime workshop Lisboa - 2013-01-10 (Portuguese)Realtime
 
Tabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-EmsTabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-EmsSCM Fussball
 
Postes 1er niveau v6
Postes 1er niveau v6Postes 1er niveau v6
Postes 1er niveau v6Charloutte
 
Tabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-EmsTabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-EmsSCM Fussball
 

Andere mochten auch (16)

Sistema nacional bachillerato_sep-2007
Sistema nacional bachillerato_sep-2007Sistema nacional bachillerato_sep-2007
Sistema nacional bachillerato_sep-2007
 
Perfil y evaluación docente ems
Perfil y evaluación docente emsPerfil y evaluación docente ems
Perfil y evaluación docente ems
 
EMS-Dienstleistungen
EMS-DienstleistungenEMS-Dienstleistungen
EMS-Dienstleistungen
 
Tabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-EmsTabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 21. spieltag Landesliga Weser-Ems
 
Zion Technologies - Apresentação
Zion Technologies - ApresentaçãoZion Technologies - Apresentação
Zion Technologies - Apresentação
 
EMS Group - Catalogue Français
EMS Group - Catalogue FrançaisEMS Group - Catalogue Français
EMS Group - Catalogue Français
 
2014.03.04 - Seminar Invitation_Revisiting the social contract
2014.03.04 - Seminar Invitation_Revisiting the social contract2014.03.04 - Seminar Invitation_Revisiting the social contract
2014.03.04 - Seminar Invitation_Revisiting the social contract
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
IoT em Ação: Criando um Moderno Sistema para Hospitais
IoT em Ação: Criando um Moderno Sistema para HospitaisIoT em Ação: Criando um Moderno Sistema para Hospitais
IoT em Ação: Criando um Moderno Sistema para Hospitais
 
IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...
IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...
IMEX 2011: Vortrag von Thomas Ansorge: „Hoteleinkauf leicht gemacht – kennen ...
 
Realtime workshop Lisboa - 2013-01-10 (Portuguese)
Realtime workshop Lisboa - 2013-01-10 (Portuguese)Realtime workshop Lisboa - 2013-01-10 (Portuguese)
Realtime workshop Lisboa - 2013-01-10 (Portuguese)
 
Iec 15 juin.3
Iec 15 juin.3Iec 15 juin.3
Iec 15 juin.3
 
Tabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-EmsTabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 25. Spieltag Landesliga Weser-Ems
 
EMS Regional Sul Roda de Conversa
EMS Regional Sul Roda de Conversa EMS Regional Sul Roda de Conversa
EMS Regional Sul Roda de Conversa
 
Postes 1er niveau v6
Postes 1er niveau v6Postes 1er niveau v6
Postes 1er niveau v6
 
Tabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-EmsTabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-Ems
Tabelle SC Melle 03 Fussball 24. Spieltag Landesliga Weser-Ems
 

Mehr von Zend by Rogue Wave Software

Building and managing applications fast for IBM i
Building and managing applications fast for IBM iBuilding and managing applications fast for IBM i
Building and managing applications fast for IBM iZend by Rogue Wave Software
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Zend by Rogue Wave Software
 
The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)Zend by Rogue Wave Software
 
Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)Zend by Rogue Wave Software
 

Mehr von Zend by Rogue Wave Software (20)

Develop microservices in php
Develop microservices in phpDevelop microservices in php
Develop microservices in php
 
Speed and security for your PHP application
Speed and security for your PHP applicationSpeed and security for your PHP application
Speed and security for your PHP application
 
Building and managing applications fast for IBM i
Building and managing applications fast for IBM iBuilding and managing applications fast for IBM i
Building and managing applications fast for IBM i
 
Building web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend ExpressiveBuilding web APIs in PHP with Zend Expressive
Building web APIs in PHP with Zend Expressive
 
To PHP 7 and beyond
To PHP 7 and beyondTo PHP 7 and beyond
To PHP 7 and beyond
 
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018) Speed up web APIs with Expressive and Swoole (PHP Day 2018)
Speed up web APIs with Expressive and Swoole (PHP Day 2018)
 
The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)The Sodium crypto library of PHP 7.2 (PHP Day 2018)
The Sodium crypto library of PHP 7.2 (PHP Day 2018)
 
Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)Develop web APIs in PHP using middleware with Expressive (Code Europe)
Develop web APIs in PHP using middleware with Expressive (Code Europe)
 
Middleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.xMiddleware web APIs in PHP 7.x
Middleware web APIs in PHP 7.x
 
Ongoing management of your PHP 7 application
Ongoing management of your PHP 7 applicationOngoing management of your PHP 7 application
Ongoing management of your PHP 7 application
 
Developing web APIs using middleware in PHP 7
Developing web APIs using middleware in PHP 7Developing web APIs using middleware in PHP 7
Developing web APIs using middleware in PHP 7
 
The Docker development template for PHP
The Docker development template for PHPThe Docker development template for PHP
The Docker development template for PHP
 
The most exciting features of PHP 7.1
The most exciting features of PHP 7.1The most exciting features of PHP 7.1
The most exciting features of PHP 7.1
 
Unit testing for project managers
Unit testing for project managersUnit testing for project managers
Unit testing for project managers
 
The new features of PHP 7
The new features of PHP 7The new features of PHP 7
The new features of PHP 7
 
Deploying PHP apps on the cloud
Deploying PHP apps on the cloudDeploying PHP apps on the cloud
Deploying PHP apps on the cloud
 
Data is dead. Long live data!
Data is dead. Long live data! Data is dead. Long live data!
Data is dead. Long live data!
 
Optimizing performance
Optimizing performanceOptimizing performance
Optimizing performance
 
Resolving problems & high availability
Resolving problems & high availabilityResolving problems & high availability
Resolving problems & high availability
 
Developing apps faster
Developing apps fasterDeveloping apps faster
Developing apps faster
 

Backend Processing mit Job Queue

  • 1. Job Queue in Zend Server 5.0 Jan Burkl Systen Engineer, Zend Technologies Das 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. 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. Was ist Job Queue? ...und wofür ist sie gut? © All rights reserved. Zend Technologies, Inc.
  • 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. Beispiel: Ein On-line Forum © All rights reserved. Zend Technologies, Inc.
  • 6. Und jetzt mit Job Queue! © All rights reserved. Zend Technologies, Inc.
  • 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. 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. Wie genau funktionert es? Architektur und ein paar Interna © All rights reserved. Zend Technologies, Inc.
  • 10. Job Queue 4.x - Architekturüberblick © All rights reserved. Zend Technologies, Inc.
  • 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. Job Queue 4.x - Architekturüberblick Executing Server HTTP Request Job Queue Daemon © All rights reserved. Zend Technologies, Inc.
  • 13. Verwendung der Job Queue API Kreieren & Ausführen von Jobs © All rights reserved. Zend Technologies, Inc.
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. Quick Tour durch UI © All rights reserved. Zend Technologies, Inc.
  • 24. Demo Time! © All rights reserved. Zend Technologies, Inc.
  • 25. Ein paar Benchmarks © All rights reserved. Zend Technologies, Inc.
  • 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. 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. Final Words Wie geht's weiter? © All rights reserved. Zend Technologies, Inc.
  • 29. There's 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. Vielen Dank! © All rights reserved. Zend Technologies, Inc.
  • 31. Using the Job Queue API Querying for jobs and checking status © All rights reserved. Zend Technologies, Inc.
  • 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 job's 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. 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. Webinar Das Webinar kann hier angeschaut werden: http://www.zend.com/de/webinar/Server/70170000000b HqW-Backend-Processing-mit-Job-Queue- 20100622_DE.FLV oder http://bit.ly/qv2gTE (nach einer kurzen Registrierung) © All rights reserved. Zend Technologies, Inc.