@threetreeslight Repro Inc.
shinjukurb #37 May 25, 2016
background jobで 気をつけないといかんところ@threetreeslightRepro Inc.shinjukurb #37May 25, 2016
View Slide
※注意※こういうときどうしました?話です。sidekiq寄りです。
@treetreeslightRepro
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://github.com/brainopia/sidekiq-limit_fetch• プロセス毎の同時実行数は管理したいのであれば• プロセス内にsemaphore作ってQueueのpopをblockして積み直しになるのかな?
実行順序の制御
処理を高速化するために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-workflow• そもそも別の仕組み使う• rundeck• http://rundeck.org/• rukawa• https://github.com/joker1007/rukawa
信頼性の担保
background jobだいぶこなれてきた!!
process downや中断に強くしなければ
そんなときどうやってjob実行の信頼性を担保しますか?
例えば• sidekiq使ってたらsidekiq proにしちゃう• やっているのは別のqueueにコピーしてるだけ(多分)• Proのお話はsumyappさんのslide参照が良さそう• http://www.slideshare.net/SumiKoichiro/sidekiq-pro1-rb-29th-shinjukurb• 処理の冪等性担保する• けどPush Notificationとかできないので、jobの中で途中実行できるようにする• 依存関係のあるJobはどう途中再開させるか?• daemon作って監視させるしか無いか?
そんなつらみを乗り越えたいそんなアタナに
WE ARE HIRING NOW!!!https://www.wantedly.com/companies/repro/projects