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

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

Feb 19, 2017

Download

Technology

Akira Miki
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: background jobで気をつけないといかんところ

background jobで気をつけないといかんところ@threetreeslight Repro Inc.

shinjukurb #37 May 25, 2016

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

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

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

@treetreeslight Repro

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

What’s Repro?

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

マーケティングツール

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

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

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

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

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

優先順位の制御

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

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

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

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

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

さらに• SidekiqなんでQueueで分けるが、、、

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

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

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

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

例えば• 突っ込むQueueを動的に変える

• sidekiq起動条件変えてプロセスレベルで割る

• こういうのを使う

• https://github.com/socialpandas/sidekiq-priority

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

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

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

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

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

connection数, deadlock, OOM…

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

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

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

例えば• サービス全体で並列実行数を制御するのであれば

• redisでsemaphoreを管理したり • こういうやつも(時間があったら読む)

• https://github.com/dv/redis-semaphore • https://github.com/brainopia/sidekiq-

limit_fetch • プロセス毎の同時実行数は管理したいのであれば

• プロセス内にsemaphore作ってQueueのpopをblockして積み直しになるのかな?

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

実行順序の制御

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

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

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

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

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

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

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

例えば• 複数のjob完了を待って発火するもの

• 特定のjob郡が完了していることを待つwaiting jobづくり

• 逐次にjobが発火するstyle • continuation passing styleで次のjob渡す

依存関係の定義が自明で集約されており、全体感がつかみやすいものが良い。

Page 24: background 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

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

信頼性の担保

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

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

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

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

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

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

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

例えば• sidekiq使ってたらsidekiq proにしちゃう

• やっているのは別のqueueにコピーしてるだけ(多分) • Proのお話はsumyappさんのslide参照が良さそう

• http://www.slideshare.net/SumiKoichiro/sidekiq-pro1-rb-29th-shinjukurb

• 処理の冪等性担保する • けどPush Notificationとかできないので、jobの中で

途中実行できるようにする • 依存関係のあるJobはどう途中再開させるか?

• daemon作って監視させるしか無いか?

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

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

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

WE ARE HIRING NOW!!!

https://www.wantedly.com/companies/repro/projects