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

resque-scheduler

 resque-scheduler

Shinjuku.rb #43 発表資料
https://shinjukurb.connpass.com/event/44524/

Fumiaki MATSUSHIMA

November 30, 2016
Tweet

More Decks by Fumiaki MATSUSHIMA

Other Decks in Programming

Transcript

  1. (株)永和システムマネジメント
    @mtsmfm
    松島 史秋
    resque-scheduler

    View Slide

  2. 松島 史秋
    GitHub, Twitter
    @mtsmfm

    View Slide

  3. ポケモン S/M
    まっちまー
    フレコ
    1907-9185-9222

    View Slide

  4. View Slide

  5. resque-
    scheduler

    View Slide

  6. https://github.com/resque/resque-scheduler

    View Slide

  7. 大きく2つの
    機能

    View Slide

  8. - Delay
    - Schedule

    View Slide

  9. - Delay
    - 10分後に実行
    - Schedule
    - cron

    View Slide

  10. resque
    単体だと
    できない

    View Slide

  11. ActiveJob

    View Slide

  12. http://edgeguides.rubyonrails.org/active_job_basics.html#enqueue-the-job

    View Slide

  13. ActiveJob が
    やってくれたり
    してないかな

    View Slide

  14. Emoji provided free by Emoji One

    View Slide

  15. https://github.com/mtsmfm/
    resque-scheduler-example

    View Slide

  16. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque-
    scheduler.rb#L4

    View Slide

  17. 挙動が違う

    View Slide

  18. https://github.com/jmettraux/rufus-scheduler/blob/master/lib/rufus-
    scheduler.rb

    View Slide

  19. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler/tasks.rb#L17-L18

    View Slide

  20. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler/cli.rb#L117

    View Slide

  21. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler.rb#L59-L70

    View Slide

  22. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler/locking.rb#L65-L67

    View Slide

  23. Lock

    View Slide

  24. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler/locking.rb#L3-L50

    View Slide

  25. - master プロセスが落ちたときに複数回
    enqueue されないための機構
    - Redis の SETNX を使っている
    - Delayed job は SETNX で単純な十分
    - Scheduled job (cron っぽい方) は頻繁に
    master が変わると、マシンの時間がずれて
    いる場合に厳しい
    - (デフォルトだと) 3 分ごとに lock をとる
    - 2 回走ってもいいときや時間の同期がきっち
    りされているなら短くするとよい

    View Slide

  26. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler.rb#L59-L70

    View Slide

  27. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler.rb#L181-L190

    View Slide

  28. Schedule job
    は?

    View Slide

  29. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler/locking.rb#L3-L50

    View Slide

  30. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler/locking.rb#L28-L30

    View Slide

  31. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler.rb#L49-L53

    View Slide

  32. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler.rb#L89-L104

    View Slide

  33. https://github.com/resque/resque-scheduler/blob/v4.3.0/lib/resque/
    scheduler.rb#L124-L163

    View Slide

  34. 学び

    View Slide

  35. - 概要のわかる
    ドキュメント大事
    - resque-scheduler は
    多重実行されるくらいなら job
    が失われた方がいいという方

    - Lock 機構難しい

    View Slide