Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
sidekiq_enterprise20190828
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Shinsuke Kawaida
August 28, 2019
Technology
4.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
sidekiq_enterprise20190828
Shinsuke Kawaida
August 28, 2019
More Decks by Shinsuke Kawaida
See All by Shinsuke Kawaida
ginza rails sponsor talk
degwinthegreat
0
180
Other Decks in Technology
See All in Technology
しろおびから始める!ログ活用の第一歩
shumei_ito
0
950
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
初海外で注意すべきこと12選!!!安全快適なre:invent生活にするために
yuuuuuuu168
1
160
Classmethod Company Deck
satoshi7
1
690
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
hackers_champloo_2026_tidb
makocchi
0
160
日本語に強いオープンな大規模言語モデル「LLM-jp」
odashi
4
1.1k
1つのリクエストを追って理解する - llm-dのP/D分離
akhino
1
160
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
分析AIエージェントを育てる、動く環境を育てる
codatum
1
1.1k
Featured
See All Featured
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Crafting Experiences
bethany
1
380
Building AI with AI
inesmontani
PRO
1
1.3k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
For a Future-Friendly Web
brad_frost
184
10k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
So, you think you're a good person
axbom
PRO
2
2.2k
What's in a price? How to price your products and services
michaelherold
247
13k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
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 ご清聴ありがとうございました!