Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sucker Punch, Sidekiq etc.

Jim
January 27, 2015

Sucker Punch, Sidekiq etc.

Talk @ OpenCode Quebec XXIV

Jim

January 27, 2015
Tweet

Other Decks in Programming

Transcript

  1. Pourquoi? • Exécution en parallèle de plusieurs tâches (concurrency) •

    Parallélisme? • voir : https://blog.engineyard.com/2013/ruby-concurrency
  2. Pourquoi? • Exécution en parallèle de plusieurs tâches (concurrency) •

    Parallélisme? • voir : https://blog.engineyard.com/2013/ruby-concurrency
  3. Pourquoi? • Exécution en parallèle de plusieurs tâches (concurrency) •

    Parallélisme? • voir : https://blog.engineyard.com/2013/ruby-concurrency simultané
  4. Pourquoi? • Idéalement, le serveur doit répondre au client le

    plus rapidement possible • Tout ce qui n’est pas essentiel à la réponse devrait être traité en arrière-plan • … surtout si contraint en resources serveur (PAAS, Heroku)
  5. Pourquoi? • OK pour quelques utilisateurs • Peut devenir problématique

    assez rapidement si vous trendez sur Reddit ou TechCrunch… ou OCN
  6. Pourquoi? • Vous allez atteindre ce problème plus rapidement sur

    Heroku (ou autre PAAS) • Ce n’est pas forcément une mauvaise chose • Vous serez forcé d’optimiser vos resources plus rapidement • donc forcé d’opter pour une architecture qui scale bien
  7. Quoi? • Envoi de emails • Opérations sur des fichiers

    • Édition d’images • Compilation de rapports • Requêtes à des API externes • Invalidation de caches • Pre-caching
  8. Quoi? • Tâches bien définies • Si vous avez de

    la difficulté à trouver un nom, c’est que ça en est plus qu’une • Idempotentes • Nilpotentes
  9. Sidekiq • Multi-thread • ++ avec JRuby à cause du

    GVL de MRI • voir : http://joshrendek.com/2012/11/sidekiq-vs-resque/ • Tâches en file dans Redis • Dashboard Web • Basé sur Celluloid • Modèle acteur
  10. sucker_punch • Multi-thread • Single process • Économies ($$) sur

    Heroku (ou autre PAAS) • voir : http://brandonhilkert.com/blog/why-i-wrote-the-sucker-punch-gem/
  11. Resque • Fourches de travailleurs ヽ(。_°)ノ (worker fork) • Moins

    performant que le multi-threading • Tâches en file dans Redis • Dashboard Web
  12. delayed_job • Tâches en file dans la base de données

    • Mise en place plus simple • Ne nécessite pas d’infrastructure supplémentaire
  13. active_job • Depuis Noël (rails 4.2) • Une même API

    pour touts les systèmes de background jobs • Maintenant plus DRY avec GlobalID
  14. active_job # config/application.rb module MyApp class Application < Rails::Application config.active_job.queue_adapter

    = :sidekiq # :sucker_punch end end # app/jobs/do_something_job.rb class DoSomethingJob < ActiveJob::Base queue_as :default def perform(obj) obj.do_something_with_the_thing! end end # anywhere DoSomethingJob.perform_later(Thing.last)
  15. JustinLove/autoscaler • Permet de scaler un worker dyno seulement lorsque

    nécessaire et le scale down après X secondes de repos • Heroku + Sidekiq
  16. JustinLove/autoscaler • Permet de scaler un worker dyno seulement lorsque

    nécessaire et le scale down après X secondes de repos • Heroku + Sidekiq
  17. sucker_punch • Les tâches sont conservées dans le continuum espace-temps

    • Évitez les hard resets • Sur Heroku, activez le preboot • Besoin d’au moins 2 dynos • Vraiment pas idéal pour un système de transfers bancaires!
  18. Job servers non-ruby • Python • Celery • Équivalent de

    Sidekiq • RQ • Équivalent de Resque • PHP • Gearman (C) • Language agnostic