sidekiq_enterprise20190828
by
Shinsuke Kawaida
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
4JEFLJR &OUFSQSJTFΛ ಋೖͯ͠ϝʔϧ৴+0#Λ վળͯ͠Έͨ !UBNBNVTIJ@ 1
Slide 2
Slide 2 text
2 ⾃⼰紹介
Slide 3
Slide 3 text
3 ⾃⼰紹介 ・川井⽥ 新介(かわいだ しんすけ) ・3年前まで⿅児島で農業したりしてた⼈ ・趣味はサウナ ・2019年1⽉メドピア⼊社 ・1⽉からRailsエンジニア
Slide 4
Slide 4 text
4 今⽇のお話
Slide 5
Slide 5 text
5 の前に
Slide 6
Slide 6 text
6 Rails ばっちこいな⼈
Slide 7
Slide 7 text
7 Sidekiq さわったことある⼈
Slide 8
Slide 8 text
8 Sidekiqとは queue管理にRedisを使い マルチスレッドでメモリに優しい Rubyの⾮同期処理 フレームワーク
Slide 9
Slide 9 text
9 有償版Pro・Enterprise
Slide 10
Slide 10 text
10 Enterprise 導⼊の理由
Slide 11
Slide 11 text
11 信頼性の向上 ・reliable_push ・super_fetch ・expiring_jobs
Slide 12
Slide 12 text
12 Reliable Push(pro) ( ( )
Slide 13
Slide 13 text
13 エンキュー! 500 あいつどこ⾏った? 普通のpush
Slide 14
Slide 14 text
14 エンキュー! 500 Reliable Push 隠し持ってたやつ エンキュー! オッケー!
Slide 15
Slide 15 text
15 Expiring Jobs(pro) 期 限 切 れ
Slide 16
Slide 16 text
16 URL: https://github.com/mperham/sidekiq/wiki/Pro-Expiring-Jobs
Slide 17
Slide 17 text
17 Super Fetch(pro)
Slide 18
Slide 18 text
18 普通のfetch フェッチ ① ② ③ ④ ② ③ ④
Slide 19
Slide 19 text
19 Super Fetch フェッチ ① ② ③ ④ ② ③ ④ ① バックアップ
Slide 20
Slide 20 text
20 今⽇のお話
Slide 21
Slide 21 text
21 Sidekiq Enterpriseを導⼊して、 安⼼と信頼の定期実⾏ メール配信処理を実現した話
Slide 22
Slide 22 text
22 を
Slide 23
Slide 23 text
23 Sidekiq Enterpriseの 機能を紹介しながら していきます
Slide 24
Slide 24 text
24 なので
Slide 25
Slide 25 text
25 こんな気持ち ・Sidekiqの有償版きになるわぁ ・メール配信の定期実⾏って多重配信とかどう管 理してるのかしら ・普段Ruby触らないけど他⾔語の⾮同期処理でも 活かせるところあるかも で聞いていただけると嬉しいです。
Slide 26
Slide 26 text
26 本題
Slide 27
Slide 27 text
27 こんなJOBが ありました
Slide 28
Slide 28 text
28 5分おきに実⾏ 1.配信待ちのメルマガを取得 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
Slide 29
Slide 29 text
29 デプロイしたら死ぬ
Slide 30
Slide 30 text
30 デプロイ時 ・キューのfetchを停⽌ ・8秒待ってプロセス終了 ・終わらなかったJOBは Redisに戻される
Slide 31
Slide 31 text
31 再実⾏はされそう
Slide 32
Slide 32 text
32 5分おきに実⾏ 1.配信待ちのメルマガを取得 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
Slide 33
Slide 33 text
33 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 2.送信中に更新!ココ
Slide 34
Slide 34 text
34 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 2.送信中に更新!ココ ステータスは送信中のままなので、 再実⾏時配信対象として取得されない
Slide 35
Slide 35 text
35 送信中のメルマガも ひろうようにする
Slide 36
Slide 36 text
36 5分おきに実⾏ 1.配信待ちと送信中!のメルマガを取得 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
Slide 37
Slide 37 text
37 多重配信
Slide 38
Slide 38 text
38 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 !ココ 送信JOB① 送信JOB② メールA DB 送信中にするぜ 送信中のも送信するぜ
Slide 39
Slide 39 text
39 ①ロックする 多重配信対策
Slide 40
Slide 40 text
40 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得してロック 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
Slide 41
Slide 41 text
41 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 送信JOB① 送信JOB② メールA DB ロックして 送信中にするぜ ロックできない!!!
Slide 42
Slide 42 text
42 そもそも実⾏時間 が⻑すぎる
Slide 43
Slide 43 text
43 ②実⾏時間を短くする ためJOBを分ける 多重配信対策
Slide 44
Slide 44 text
44 インポートJOB メール配信JOB
Slide 45
Slide 45 text
45 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得してロック 2.送信中に更新 3.配信対象ユーザーをインポート 4.送信JOBをエンキュー インポートJOB
Slide 46
Slide 46 text
46 1.メール送信 2.送信結果を保存 メール送信JOB
Slide 47
Slide 47 text
47 インポートJOB メール配信JOB すべてのメール配信JOBが終了したら ステータスを更新したい
Slide 48
Slide 48 text
48 Batches(Pro)
Slide 49
Slide 49 text
49
Slide 50
Slide 50 text
50 インポートJOB エンキューするJOB(Batches) メール配信JOB !
Slide 51
Slide 51 text
51 インポートJOB エンキューするJOB(Batches) メール配信JOB リトライとかで 多重実⾏されないようにしたい
Slide 52
Slide 52 text
52 Unique Jobs(Ent)
Slide 53
Slide 53 text
53 指定した時間内に クラス名、引数、キューが 同じJOBを実⾏しないようにする
Slide 54
Slide 54 text
54 なんとかなった
Slide 55
Slide 55 text
55 学び ・設計から並列性、冪等性を 考慮した設計にしないとツライ
Slide 56
Slide 56 text
56 Wiki のBest Practicesにも 書いてある url: https://github.com/mperham/sidekiq/wiki/Best-Practices
Slide 57
Slide 57 text
57 でも
Slide 58
Slide 58 text
58 元々の問題
Slide 59
Slide 59 text
59 デプロイしたら死ぬ
Slide 60
Slide 60 text
60 Rolling Restart(Ent)
Slide 61
Slide 61 text
61 URL: https://github.com/mperham/sidekiq/wiki/Ent-Rolling-Restarts
Slide 62
Slide 62 text
62 ※メモリに注意 ※新旧のコードに互換性が必要 新プロセス⽴ち上げて 旧プロセスのworkerの終了を 待ってから、旧プロセスを終了する
Slide 63
Slide 63 text
63 学び ・設計から並列性、冪等性を 考慮した設計にしないとツライ ・Enterpriseだとなんとか してくれる機能がある
Slide 64
Slide 64 text
64 ご清聴ありがとうございました!