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

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
  2. ※注意※ こういうときどうしました? 話です。sidekiq寄りです。

  3. @treetreeslight Repro

  4. What’s Repro?

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

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

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

  8. 優先順位の制御

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

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

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

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

  13. 例えば • 突っ込むQueueを動的に変える • sidekiq起動条件変えてプロセスレベルで割 る • こういうのを使う • https://github.com/socialpandas/

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

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

  16. connection数, deadlock, OOM…

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

  18. 例えば • サービス全体で並列実行数を制御するのであれば • redisでsemaphoreを管理したり • こういうやつも(時間があったら読む) • https://github.com/dv/redis-semaphore •

    https://github.com/brainopia/sidekiq- limit_fetch • プロセス毎の同時実行数は管理したいのであれば • プロセス内にsemaphore作ってQueueのpopをblock して積み直しになるのかな?
  19. 実行順序の制御

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

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

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

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

    continuation passing styleで次のjob渡す 依存関係の定義が自明で集約されており、全体感がつかみやすい ものが良い。
  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
  25. 信頼性の担保

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

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

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

  29. 例えば • sidekiq使ってたらsidekiq proにしちゃう • やっているのは別のqueueにコピーしてるだけ(多分) • Proのお話はsumyappさんのslide参照が良さそう • http://www.slideshare.net/SumiKoichiro/

    sidekiq-pro1-rb-29th-shinjukurb • 処理の冪等性担保する • けどPush Notificationとかできないので、jobの中で 途中実行できるようにする • 依存関係のあるJobはどう途中再開させるか? • daemon作って監視させるしか無いか?
  30. そんなつらみを乗り越えたい そんなアタナに

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