Transcript
Page 1: Async Job Execution mit Symfony2

ASYNC JOB EXECUTION MIT SYMFONY2

‘Die Welt ist nicht genug’

Wolfgang Münder

Page 2: Async Job Execution mit Symfony2

Browser Apache PHP

Timeout

Page 3: Async Job Execution mit Symfony2

Browser

Done

Apache PHP PHP

Page 4: Async Job Execution mit Symfony2

PROBLEMSTELLUNG

• Hoher Zeitaufwand (Timeout!)

• Hoher Speicherbedarf

• User braucht Ergebnis nicht sofort

Page 5: Async Job Execution mit Symfony2

ANFORDERUNGEN

• Client-Prozesse

• Job-Server (ggf. mehrere)

•Worker auf mehreren Async-Servern

• Konfigurierbar

• Jobtypen (pro Worker)

• Job Priorität

• Worker-Instanzen pro Server

Image (c) http://gearman.org/

Page 6: Async Job Execution mit Symfony2

FRAMEWORK

• Job Queuing System

• Gearman

• Alternative: Message Queue

• ActiveMQ, RabbitMQ, ZeroMQ

Page 7: Async Job Execution mit Symfony2

CLIENT‘In tödlicher Mission’

Page 8: Async Job Execution mit Symfony2

CLIENT

• Best practice: \GearmanClient abstrahieren

• Symfony2 Service

• Schlankes Interface

• Job einstellen

• Job Status abrufen

• Job Output abrufen

• Überblick über alle Jobs/Jobtypen

Page 9: Async Job Execution mit Symfony2

JOB-SERVER‘Octopussy’

Page 10: Async Job Execution mit Symfony2

WORKER‘Stirb an einem anderen Tag’

Page 11: Async Job Execution mit Symfony2

SYMFONY2 FRISST SPEICHERLass es nicht lange leben.

Page 12: Async Job Execution mit Symfony2

TRENNE WORKER UND JOBS

Page 13: Async Job Execution mit Symfony2

WORKER COMMAND‘Leben und sterben lassen’

Page 14: Async Job Execution mit Symfony2

WORKER COMMAND

• Lebt ewig (supervisor)

• Registriert sich für Jobtypen (laut config)

• Startet Job Commands (proc_open)

•Organisiert Kommunikation

• Best practice: \GearmanWorker, \GearmanJob abstrahiert

Page 15: Async Job Execution mit Symfony2

WORKER COMMAND

•Nice to have

• Eigenes Logfile für Worker

• Logging mit hostname + process_id

Page 16: Async Job Execution mit Symfony2

JOB COMMAND‘Man lebt nur zweinmal’

Page 17: Async Job Execution mit Symfony2

JOB COMMAND

• Lebt nur für einen Job

• Vollständig entkoppelt vom Job-Framework

• Änderungen im Code sofort verfügbar

• Eigenes Command pro Jobtyp

Page 18: Async Job Execution mit Symfony2

JOB COMMAND

• Nice to have

• Eigenes Logfile pro Jobtyp

• Logging mit hostname + process_id

• Generische Fehlerbehandlung

• E-Mail im Fehlerfall

• Xhprof Profiling

• Login über serialisierten Token

Page 19: Async Job Execution mit Symfony2

‘Ein Quantum Trost’TESTS

Page 20: Async Job Execution mit Symfony2

TESTS

• Infrastruktur immer nur bedingt testbar

• Test-Client

• Prüft ob Jobs korrekt eingestellt werden

• Prüft ob Jobs korrekte Argumente erhalten

• Job Commands individuell testbar

Page 21: Async Job Execution mit Symfony2

GEARMANJob-Server auf mehreren Servern funktioniert nicht

Page 22: Async Job Execution mit Symfony2

GEARMANJob-Priorität nicht über Jobtypen hinweg

Page 23: Async Job Execution mit Symfony2

GEARMANOutput abrufen nur ‘händisch’

Page 24: Async Job Execution mit Symfony2

FAZIT

• Gearman löst Timeout-Probleme

• Generische Implementierung durch Abstraktion

• Gearman löst das Skalierungsproblem aber nicht vollständig

[email protected]


Recommended