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

background jobで
気をつけないといかんところ

background jobで
気をつけないといかんところ

@threetreeslight
Repro Inc.

shinjukurb #37
May 25, 2016

threetreeslight

June 22, 2016
Tweet

More Decks by threetreeslight

Other Decks in Technology

Transcript

  1. background jobで

    気をつけないといかんところ
    @threetreeslight
    Repro Inc.
    shinjukurb #37
    May 25, 2016

    View Slide

  2. ※注意※
    こういうときどうしました?
    話です。sidekiq寄りです。

    View Slide

  3. @treetreeslight
    Repro

    View Slide

  4. What’s Repro?

    View Slide

  5. マーケティングツール

    View Slide

  6. カジュアルな改善アクション

    View Slide

  7. 献立
    • 優先順位の制御
    • 並列実行数・リソースの制御
    • 実行順序の制御
    • 信頼性の担保

    View Slide

  8. 優先順位の制御

    View Slide

  9. background jobにまわしてユーザー体
    験改善しまくりヒャッハー!

    View Slide

  10. 重要じゃないjobが積まれてす
    ぎて消化しきれない、、、

    View Slide

  11. さらに
    • SidekiqなんでQueueで分けるが、、、
    • でも共通処理として定義されたjob、呼び出
    し元によって優先順位かわるんだけどどうす
    る?

    View Slide

  12. そんなQueueのPrioritize
    どうします?

    View Slide

  13. 例えば
    • 突っ込むQueueを動的に変える
    • sidekiq起動条件変えてプロセスレベルで割

    • こういうのを使う
    • https://github.com/socialpandas/
    sidekiq-priority

    View Slide

  14. 並列実行数・リソースの制御

    View Slide

  15. jobで並列化しまくれば無限に
    スケール!!

    View Slide

  16. connection数, deadlock,
    OOM…

    View Slide

  17. そんなときどうやって
    並列実行数を制御します?

    View Slide

  18. 例えば
    • サービス全体で並列実行数を制御するのであれば
    • redisでsemaphoreを管理したり
    • こういうやつも(時間があったら読む)
    • https://github.com/dv/redis-semaphore
    • https://github.com/brainopia/sidekiq-
    limit_fetch
    • プロセス毎の同時実行数は管理したいのであれば
    • プロセス内にsemaphore作ってQueueのpopをblock
    して積み直しになるのかな?

    View Slide

  19. 実行順序の制御

    View Slide

  20. 処理を高速化するためにjobを分割
    して並列実行するべさ!

    View Slide

  21. job間の依存関係どうしよう

    View Slide

  22. そんなときどうやって
    実行順序を制御します?

    View Slide

  23. 例えば
    • 複数のjob完了を待って発火するもの
    • 特定のjob郡が完了していることを待つwaiting jobづく

    • 逐次にjobが発火するstyle
    • continuation passing styleで次のjob渡す
    依存関係の定義が自明で集約されており、全体感がつかみやすい
    ものが良い。

    View Slide

  24. 例えば
    • background jobにworkflowでかいけつする
    • https://github.com/chaps-io/gush
    • https://github.com/thebadmonkeydev/
    sidekiq-workflow
    • そもそも別の仕組み使う
    • rundeck
    • http://rundeck.org/
    • rukawa
    • https://github.com/joker1007/rukawa

    View Slide

  25. 信頼性の担保

    View Slide

  26. background job
    だいぶこなれてきた!!

    View Slide

  27. process downや
    中断に強くしなければ

    View Slide

  28. そんなときどうやって
    job実行の信頼性
    を担保しますか?

    View Slide

  29. 例えば
    • sidekiq使ってたらsidekiq proにしちゃう
    • やっているのは別のqueueにコピーしてるだけ(多分)
    • Proのお話はsumyappさんのslide参照が良さそう
    • http://www.slideshare.net/SumiKoichiro/
    sidekiq-pro1-rb-29th-shinjukurb
    • 処理の冪等性担保する
    • けどPush Notificationとかできないので、jobの中で
    途中実行できるようにする
    • 依存関係のあるJobはどう途中再開させるか?
    • daemon作って監視させるしか無いか?

    View Slide

  30. そんなつらみを乗り越えたい
    そんなアタナに

    View Slide

  31. WE ARE 

    HIRING NOW!!!
    https://www.wantedly.com/companies/repro/projects

    View Slide