Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
sidekiq_enterprise20190828
Search
Shinsuke Kawaida
August 28, 2019
Technology
1
4.3k
sidekiq_enterprise20190828
Shinsuke Kawaida
August 28, 2019
Tweet
Share
More Decks by Shinsuke Kawaida
See All by Shinsuke Kawaida
ginza rails sponsor talk
degwinthegreat
0
170
Other Decks in Technology
See All in Technology
ヘブンバーンズレッドのレンダリングパイプライン刷新
gree_tech
PRO
0
520
クラウドセキュリティを支える技術と運用の最前線 / Cutting-edge Technologies and Operations Supporting Cloud Security
yuj1osm
2
270
AI エージェントとはそもそも何か? - 技術背景から Amazon Bedrock AgentCore での実装まで- / AI Agent Unicorn Day 2025
hariby
4
920
生成AI時代のデータ基盤設計〜ペースレイヤリングで実現する高速開発と持続性〜 / Levtech Meetup_Session_2
sansan_randd
1
130
衝突して強くなる! BLUE GIANTと アジャイルチームの共通点とは ― いきいきと活気に満ちたグルーヴあるチームを作るコツ ― / BLUE GIANT and Agile Teams
naitosatoshi
0
300
Grafana Meetup Japan Vol. 6
kaedemalu
1
200
ヘブンバーンズレッドにおける、世界観を活かしたミニゲーム企画の作り方
gree_tech
PRO
0
510
Nstockの一人目エンジニアが 3年間かけて向き合ってきた セキュリティのこととこれから〜あれから半年〜
yo41sawada
0
200
kubellが考える戦略と実行を繋ぐ活用ファーストのデータ分析基盤
kubell_hr
0
140
生成AI時代のデータ基盤
shibuiwilliam
4
3.3k
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
380
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
170
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
184
22k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
A Tale of Four Properties
chriscoyier
160
23k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
185
54k
Raft: Consensus for Rubyists
vanstee
140
7.1k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Rails Girls Zürich Keynote
gr2m
95
14k
The Pragmatic Product Professional
lauravandoore
36
6.8k
How STYLIGHT went responsive
nonsquared
100
5.8k
Transcript
4JEFLJR &OUFSQSJTFΛ ಋೖͯ͠ϝʔϧ৴+0#Λ վળͯ͠Έͨ !UBNBNVTIJ@ 1
2 ⾃⼰紹介
3 ⾃⼰紹介 ・川井⽥ 新介(かわいだ しんすけ) ・3年前まで⿅児島で農業したりしてた⼈ ・趣味はサウナ ・2019年1⽉メドピア⼊社 ・1⽉からRailsエンジニア
4 今⽇のお話
5 の前に
6 Rails ばっちこいな⼈
7 Sidekiq さわったことある⼈
8 Sidekiqとは queue管理にRedisを使い マルチスレッドでメモリに優しい Rubyの⾮同期処理 フレームワーク
9 有償版Pro・Enterprise
10 Enterprise 導⼊の理由
11 信頼性の向上 ・reliable_push ・super_fetch ・expiring_jobs
12 Reliable Push(pro) ( ( )
13 エンキュー! 500 あいつどこ⾏った? 普通のpush
14 エンキュー! 500 Reliable Push 隠し持ってたやつ エンキュー! オッケー!
15 Expiring Jobs(pro) 期 限 切 れ
16 URL: https://github.com/mperham/sidekiq/wiki/Pro-Expiring-Jobs
17 Super Fetch(pro)
18 普通のfetch フェッチ ① ② ③ ④ ② ③ ④
19 Super Fetch フェッチ ① ② ③ ④ ② ③
④ ① バックアップ
20 今⽇のお話
21 Sidekiq Enterpriseを導⼊して、 安⼼と信頼の定期実⾏ メール配信処理を実現した話
22 を
23 Sidekiq Enterpriseの 機能を紹介しながら していきます
24 なので
25 こんな気持ち ・Sidekiqの有償版きになるわぁ ・メール配信の定期実⾏って多重配信とかどう管 理してるのかしら ・普段Ruby触らないけど他⾔語の⾮同期処理でも 活かせるところあるかも で聞いていただけると嬉しいです。
26 本題
27 こんなJOBが ありました
28 5分おきに実⾏ 1.配信待ちのメルマガを取得 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
29 デプロイしたら死ぬ
30 デプロイ時 ・キューのfetchを停⽌ ・8秒待ってプロセス終了 ・終わらなかったJOBは Redisに戻される
31 再実⾏はされそう
32 5分おきに実⾏ 1.配信待ちのメルマガを取得 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
33 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 2.送信中に更新!ココ
34 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 2.送信中に更新!ココ ステータスは送信中のままなので、 再実⾏時配信対象として取得されない
35 送信中のメルマガも ひろうようにする
36 5分おきに実⾏ 1.配信待ちと送信中!のメルマガを取得 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
37 多重配信
38 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 !ココ 送信JOB① 送信JOB② メールA DB 送信中にするぜ 送信中のも送信するぜ
39 ①ロックする 多重配信対策
40 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得してロック 2.送信中に更新 3.配信対象ユーザー分メール送信 4.送信結果を保存 5.送信完了に更新
41 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得 送信JOB① 送信JOB② メールA DB ロックして 送信中にするぜ ロックできない!!!
42 そもそも実⾏時間 が⻑すぎる
43 ②実⾏時間を短くする ためJOBを分ける 多重配信対策
44 インポートJOB メール配信JOB
45 5分おきに実⾏ 1.配信待ちと送信中のメルマガを取得してロック 2.送信中に更新 3.配信対象ユーザーをインポート 4.送信JOBをエンキュー インポートJOB
46 1.メール送信 2.送信結果を保存 メール送信JOB
47 インポートJOB メール配信JOB すべてのメール配信JOBが終了したら ステータスを更新したい
48 Batches(Pro)
49
50 インポートJOB エンキューするJOB(Batches) メール配信JOB !
51 インポートJOB エンキューするJOB(Batches) メール配信JOB リトライとかで 多重実⾏されないようにしたい
52 Unique Jobs(Ent)
53 指定した時間内に クラス名、引数、キューが 同じJOBを実⾏しないようにする
54 なんとかなった
55 学び ・設計から並列性、冪等性を 考慮した設計にしないとツライ
56 Wiki のBest Practicesにも 書いてある url: https://github.com/mperham/sidekiq/wiki/Best-Practices
57 でも
58 元々の問題
59 デプロイしたら死ぬ
60 Rolling Restart(Ent)
61 URL: https://github.com/mperham/sidekiq/wiki/Ent-Rolling-Restarts
62 ※メモリに注意 ※新旧のコードに互換性が必要 新プロセス⽴ち上げて 旧プロセスのworkerの終了を 待ってから、旧プロセスを終了する
63 学び ・設計から並列性、冪等性を 考慮した設計にしないとツライ ・Enterpriseだとなんとか してくれる機能がある
64 ご清聴ありがとうございました!