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

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

Upload: akira-miki

Post on 19-Feb-2017

301 views

Category:

Technology


2 download

TRANSCRIPT

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://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