$30 off During Our Annual Pro Sale. View Details »

Jak přežít frontu a nepředbíhat

Jak přežít frontu a nepředbíhat

Moje přednáška z PyVa o Celery a obecně frontách v Pythonu. Je to takový lehký úvod, nic do hloubky.

Honza Javorek

May 19, 2012
Tweet

More Decks by Honza Javorek

Other Decks in Technology

Transcript

  1. Jak přežít frontu a nepředbíhat
    Honza Javorek
    [email protected]

    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. Fronta v Pythonu?
    buffer
    pásová výroba
    efektivní hromadné zpracování
    ...

    View Slide

  6. Fronta na webu?
    web server = GUI
    fronta = tvrdá práce na pozadí
    úkoly, na které nemá web server čas
    (uživatel čeká...) nebo zdroje, aby je
    okamžitě vyřídil a vrátil odpověď

    View Slide

  7. View Slide

  8. Q
    v angličtině queue
    čteme [kjů]
    což je totéž jako Q
    Co konkrétně googlit: message queue

    View Slide

  9. View Slide

  10. Web App Serva', yeah
    anotha' Web App Serva'
    Massive Gangsta' Message
    Queue Broka'
    Black Worker
    Serva' Brotha's

    View Slide

  11. web servery hážou úkoly do fronty a
    pokračují ve své práci
    fronta si úkoly hromadí (FIFO)
    workery (greedy) asynchronně berou
    úkoly z fronty a zpracovávají je

    View Slide

  12. PROČ?!

    View Slide

  13. rychlá odezva stránek
    (nemusí se udělat okamžitě? do fronty!)
    procesy na pozadí, generování, přepočítávání,
    zpracovávání, hromadné odesílání...
    asynchronní zpracování, distribuce přes více serverů
    (jak webových, tak workerů)

    View Slide

  14. Ajajajaj! V žádném případě. Je to asynchronní klient-server
    technologie, ale...
    řízený frontendem
    pomalý (HTTP)
    bez záruk
    Vhodný akorát k tomu, aby se GUI dotazovalo backendu na stav
    zpracování.
    AJAJ

    View Slide

  15. změna velikosti obrázku
    generování různých velikostí náhledů
    přeformátování videí
    nahrávání velkých souborů
    odesílání hromadné pošty
    agregace RSS
    ...

    View Slide

  16. View Slide

  17. CRON

    View Slide

  18. AMPQ protokol
    ZeroMQ
    Amazon SQS
    RabbitMQ
    Beanstalk
    ...
    Message Broker

    View Slide

  19. ...or

    View Slide

  20. na jednoduché věci stačí samotný
    http://flask.pocoo.org/snippets/73/
    http://hello-redis-tasks.joeyespo.webfactional.com/

    View Slide

  21. na složitější věci je lepší nad broker
    ještě něco postavit...

    View Slide

  22. na složitější věci je lepší nad broker
    ještě něco postavit

    View Slide

  23. View Slide

  24. View Slide

  25. Celery

    View Slide

  26. View Slide

  27. jednoduché na instalaci (na localhostu)
    open source, aktivní vývoj
    integrace s webovými frameworky
    (Django, Flask, Pylons, ...)
    podpora pro velké množství brokerů
    (RabbitMQ, Redis, Beanstalk, MongoDB, CouchDB, JakákolivDB, ...)
    plánování úkolů (cron)
    distribuovaná, využívá jádra procesoru (= paralelní)
    přístup k return values z úkolů
    hooks, routing, remote-control, monitoring, serialization, ironing, washing dirty dishes,
    managing fridge, cooking, cleaning, shopping, taking care of pets, ...

    View Slide

  28. View Slide

  29. CRON?

    View Slide

  30. View Slide

  31. je nutné dobře zvládnout
    instalaci na server
    framework
    aplikace v balíčku
    konfigurační soubory
    nehrát si s init.d – cesta do pekel

    View Slide

  32. Přehršel spouštění, restartování, hlídání...?

    View Slide

  33. Supervisor

    View Slide

  34. démonizuje procesy
    hlídá je
    loguje
    restartuje
    ...a na to vše nemusíte být root

    View Slide

  35. ...už se těšíte na pyvo, co?

    View Slide

  36. ...už se těšíte na pyvo, co?
    kurňa už
    neotravuj...

    View Slide

  37. View Slide

  38. fronta – práce všeho druhu, na pozadí
    broker – posílá zprávičky
    Celery – lepí dohromady naši app,
    broker, databázi, workery, cron
    Supervisor – chobotnička na správu
    procesů na serveru (abychom se
    nezbláznili z Celery)

    View Slide

  39. View Slide

  40. Díky!
    Povinná četba:
    http://www.slideshare.net/tarequeh/life-in-a-queue-using-message-queue-with-django
    http://www.slideshare.net/richleland/celery-the-distributed-task-queue
    http://www.turnkeylinux.org/blog/django-celery-rabbitmq
    www.celeryproject.org
    http://supervisord.org/
    http://home.pacific.net.hk/~rebylee/text/prince/contents.html
    Http://redis.io
    http://srazy.info/brnenske-pyvo/

    View Slide