Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
background jobで

気をつけないといかんところ
@threetreeslight
Repro Inc.
shinjukurb #37
May 25, 2016
※注意※
こういうときどうしました?
話です。sidekiq寄りです。
@treetreeslight
Repro
What’s Repro?
マーケティングツール
カジュアルな改善アクション
献立
• 優先順位の制御
• 並列実行数・リソースの制御
• 実行順序の制御
• 信頼性の担保
優先順位の制御
background jobにまわしてユーザー体
験改善しまくりヒャッハー!
重要じゃないjobが積まれてす
ぎて消化しきれない、、、
さらに
• SidekiqなんでQueueで分けるが、、、
• でも共通処理として定義されたjob、呼び出
し元によって優先順位かわるんだけどどうす
る?
そんなQueueのPrioritize
どうします?
例えば
• 突っ込むQueueを動的に変える
• sidekiq起動条件変えてプロセスレベルで割
る
• こういうのを使う
• https://github.com/socialpandas/
sidekiq-priority
並列実行数・リソースの制御
jobで並列化しまくれば無限に
スケール!!
connection数, deadlock,
OOM…
そんなときどうやって
並列実行数を制御します?
例えば
• サービス全体で並列実行数を制御するのであれば
• redisでsemaphoreを管理したり
• こういうやつも(時間があったら読む)
• https://github.com/dv/redis-semaphore
• https:...
実行順序の制御
処理を高速化するためにjobを分割
して並列実行するべさ!
job間の依存関係どうしよう
そんなときどうやって
実行順序を制御します?
例えば
• 複数のjob完了を待って発火するもの
• 特定のjob郡が完了していることを待つwaiting jobづく
り
• 逐次にjobが発火するstyle
• continuation passing styleで次のjob渡す
依存関係...
例えば
• background jobにworkflowでかいけつする
• https://github.com/chaps-io/gush
• https://github.com/thebadmonkeydev/
sidekiq-work...
信頼性の担保
background job
だいぶこなれてきた!!
process downや
中断に強くしなければ
そんなときどうやって
job実行の信頼性
を担保しますか?
例えば
• sidekiq使ってたらsidekiq proにしちゃう
• やっているのは別のqueueにコピーしてるだけ(多分)
• Proのお話はsumyappさんのslide参照が良さそう
• http://www.slideshare.n...
そんなつらみを乗り越えたい
そんなアタナに
WE ARE 

HIRING NOW!!!
https://www.wantedly.com/companies/repro/projects
Upcoming SlideShare
Loading in …5
×

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

613 views

Published on

@threetreeslight
Repro Inc.

shinjukurb #37
May 25, 2016

Published in: Technology
  • Be the first to comment

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

  1. 1. background jobで
 気をつけないといかんところ @threetreeslight Repro Inc. shinjukurb #37 May 25, 2016
  2. 2. ※注意※ こういうときどうしました? 話です。sidekiq寄りです。
  3. 3. @treetreeslight Repro
  4. 4. What’s Repro?
  5. 5. マーケティングツール
  6. 6. カジュアルな改善アクション
  7. 7. 献立 • 優先順位の制御 • 並列実行数・リソースの制御 • 実行順序の制御 • 信頼性の担保
  8. 8. 優先順位の制御
  9. 9. background jobにまわしてユーザー体 験改善しまくりヒャッハー!
  10. 10. 重要じゃないjobが積まれてす ぎて消化しきれない、、、
  11. 11. さらに • SidekiqなんでQueueで分けるが、、、 • でも共通処理として定義されたjob、呼び出 し元によって優先順位かわるんだけどどうす る?
  12. 12. そんなQueueのPrioritize どうします?
  13. 13. 例えば • 突っ込むQueueを動的に変える • sidekiq起動条件変えてプロセスレベルで割 る • こういうのを使う • https://github.com/socialpandas/ sidekiq-priority
  14. 14. 並列実行数・リソースの制御
  15. 15. jobで並列化しまくれば無限に スケール!!
  16. 16. connection数, deadlock, OOM…
  17. 17. そんなときどうやって 並列実行数を制御します?
  18. 18. 例えば • サービス全体で並列実行数を制御するのであれば • redisでsemaphoreを管理したり • こういうやつも(時間があったら読む) • https://github.com/dv/redis-semaphore • https://github.com/brainopia/sidekiq- limit_fetch • プロセス毎の同時実行数は管理したいのであれば • プロセス内にsemaphore作ってQueueのpopをblock して積み直しになるのかな?
  19. 19. 実行順序の制御
  20. 20. 処理を高速化するためにjobを分割 して並列実行するべさ!
  21. 21. job間の依存関係どうしよう
  22. 22. そんなときどうやって 実行順序を制御します?
  23. 23. 例えば • 複数のjob完了を待って発火するもの • 特定のjob郡が完了していることを待つwaiting jobづく り • 逐次にjobが発火するstyle • continuation passing styleで次のjob渡す 依存関係の定義が自明で集約されており、全体感がつかみやすい ものが良い。
  24. 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. 25. 信頼性の担保
  26. 26. background job だいぶこなれてきた!!
  27. 27. process downや 中断に強くしなければ
  28. 28. そんなときどうやって job実行の信頼性 を担保しますか?
  29. 29. 例えば • sidekiq使ってたらsidekiq proにしちゃう • やっているのは別のqueueにコピーしてるだけ(多分) • Proのお話はsumyappさんのslide参照が良さそう • http://www.slideshare.net/SumiKoichiro/ sidekiq-pro1-rb-29th-shinjukurb • 処理の冪等性担保する • けどPush Notificationとかできないので、jobの中で 途中実行できるようにする • 依存関係のあるJobはどう途中再開させるか? • daemon作って監視させるしか無いか?
  30. 30. そんなつらみを乗り越えたい そんなアタナに
  31. 31. WE ARE 
 HIRING NOW!!! https://www.wantedly.com/companies/repro/projects

×