Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
AI駆動開発における設計思想 認知負荷を下げるフロントエンドアーキテクチャ/ 20251211 Teppei Hanai
shift_evolve
PRO
2
360
【AWS re:Invent 2025速報】AIビルダー向けアップデートをまとめて解説!
minorun365
4
510
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
2
170
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
310
LLM-Readyなデータ基盤を高速に構築するためのアジャイルデータモデリングの実例
kashira
0
240
世界最速級 memcached 互換サーバー作った
yasukata
0
340
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
280
AIプラットフォームにおけるMLflowの利用について
lycorptech_jp
PRO
1
110
.NET 10の概要
tomokusaba
0
100
Power of Kiro : あなたの㌔はパワステ搭載ですか?
r3_yamauchi
PRO
0
110
新 Security HubがついにGA!仕組みや料金を深堀り #AWSreInvent #regrowth / AWS Security Hub Advanced GA
masahirokawahara
1
1.9k
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
710
Featured
See All Featured
It's Worth the Effort
3n
187
29k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Designing for humans not robots
tammielis
254
26k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
BBQ
matthewcrist
89
9.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
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 ご清聴ありがとうございました!