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
ノイジーネイバー問題を解決する 公平なキューイング
Search
Shoichi Ochi
January 28, 2026
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ノイジーネイバー問題を解決する 公平なキューイング
Gotanda.rb#64の登壇資料です。
Shoichi Ochi
January 28, 2026
More Decks by Shoichi Ochi
See All by Shoichi Ochi
高速化&コスト半減!? GitHub Actionsの サードパーティマネージドランナーの比較
occhi
1
650
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
occhi
0
2.1k
Other Decks in Programming
See All in Programming
yield再入門 #phpcon
o0h
PRO
0
1.1k
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
120
FDEが実現するAI駆動経営の現在地
gonta
2
280
Flow は今どうなっているか
mizdra
PRO
0
580
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.7k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
600
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
290
Go 1.27 における memory allocation の高速化
andpad
0
190
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
1
140
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
560
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
190
Featured
See All Featured
Optimizing for Happiness
mojombo
378
71k
The SEO identity crisis: Don't let AI make you average
varn
0
530
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Claude Code のすすめ
schroneko
67
230k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Facilitating Awesome Meetings
lara
57
7.1k
How to Ace a Technical Interview
jacobian
281
24k
Being A Developer After 40
akosma
91
590k
A better future with KSS
kneath
240
18k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
450
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.3k
Transcript
ノイジーネイバー問題を解決する 公平なキューイング Shoichi Ochi (@occhi) Gotanda.rb 2026-01-28
2 SmartBank, Inc. Software Engineer 越智 翔一 @ochi11181101
@sho-work おち しょういち 自己紹介
3
4 今回お話しするのは、 個人的にやっているシステム設計の勉強で学んだこと
5 「ノイジーネイバー問題」というワード、 時折聞きませんか?
6 ノイジーネイバー問題とは? ノイジーネイバー問題とは、マルチテナント環境 において、あるテナント(隣人 = ネイバー)のリ ソース使用が他のテナントのパフォーマンスに 悪影響を与える現象のこと。
長時間実行されるバックグラウンドジョブで問題 になりやすい。 (昨今トレンドになっている LLMを用いたプロダ クトでは問題になることが多い) 引用元①: https://densumesh.dev/blog/fair-queue/ 引用元②: https://zerofilter.medium.com/noisy-neighbor-problem-in-multi-tenant-systems-explained-briefly-3788ae5e9d5b
7 引用元: https://densumesh.dev/blog/fair-queue/ enqueueされたClient 3の処理が長時間dequeueされないケース
8 一般的な解決手段 ・ク ライアントのスロットリング ・公平なキューイング
9 クライアントのスロットリング
10 ク ライアントのスロットリング テナント毎に一定時間あたりに処理できるジョブ の数を制限する
11 引用元: https://github.com/Envek/sidekiq-fair_tenant sidekiqを使っている場合はsidekiq-fair_tenantというgemがある ク ライアントのスロットリング
12 あるテナントが先にかなりの数enqueueしていると、他のテナントが影響を受ける ク ライアントのスロットリング 課題
13 公平なキューイング
14 👎公平なキューイングなし 👍公平なキューイングあり 引用元: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html 公平なキューイング
15 今回は公平なキューイングの実現手段に焦点を当てます!
16 まずは公平なキューイングの処理の流れを考える🤔
17 右図のように、テナント毎にキューを分けて、 メッセージを管理する。 その上で、デキューの度にテナントを公平に選 択し、当該テナントのメッセージを取り出すよう にすれば実現できそう。 公平なキューイングの実現
18 右図のように、テナント毎にキューを分けて、 メッセージを管理する。 その上で、デキューの度にテナントを公平に選 択し、当該テナントのメッセージを取り出すよう にすれば実現できそう。 公平なキューイングの実現
19 テナント選択ロジックを考える🤔
20 テナント選択ロジック ・ラウンドロビン ・ランダムセレクション 引用元: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html 公平なキューイングの実現
21 ラウンドロビンの場合
22 ラウンドロビン ・ 厳密な「順番待ち行列」のイメージ (選択されると次は最後尾に追加される) 引用元:
https://www.qnx.com/developers/docs/8.0/com.qnx.doc.neutrino.sys_arch/topic/kernel_Round_robin_scheduling.html 公平なキューイングの実現
23 ・tenants.last_dequeued_at が古い順にテナントを選択する ・デキューの度に、
tenants.last_dequeued_atを更新する。 ラウンドロビンの場合の設計(RDBMSベース)
24 ・tenants.last_dequeued_at が古い順にテナントを選択する ・デキューの度に、
tenants.last_dequeued_atを更新する。 ラウンドロビンの場合の設計(RDBMSベース)
25 ・tenants.last_dequeued_at が古い順にテナントを選択する ・デキューの度に、tenants.last_dequeued_atを更新する
ラウンドロビンの場合の設計(RDBMSベース)
26 ・Redisでも実現できます。(ここでは割愛) ・broccoliというRustのライブラリが同じアルゴリズムで実現されています。 https://github.com/densumesh/broccoli ラウンドロビンの場合の設計(Redisベース)
引用元: https://densumesh.dev/blog/fair-queue/
27 ランダムセレクションの場合
28 ランダムセレクション その都度の「抽選箱」のイメージ 公平なキューイングの実現
29 ・ランダムにtenantsレコードを一件取得する ランダムセレクションの場合の設計(RDBMSベース)
30 ・ランダムにtenantsレコードを一件取得する 実はこのクエリ、テナントの数が少ないうちは高速だが、数が増えるとパフォーマンスが悪化する (indexが使えず、テーブルスキャンが発生するので、高コストなソートになる)
ランダムセレクションの場合の設計(RDBMSベース)
31 ・ランダムにtenantsレコードを一件取得する SQLアンチパターン 「16章 ランダムセレクション」が参考になります
☝ (時間の関係上、クエリの改善案は割愛) 引用元: https://www.oreilly.co.jp/books/9784814400744/ ランダムセレクションの場合の設計(RDBMSベース)
32 ・ランダムにtenantsレコードを一件取得する(改善 version) ランダムセレクションの場合の設計(RDBMSベース)
33 ランダムセレクションの場合の設計(Redisベース) ・ちなみにRedisベースでも実現できそう ・テナント選択時は SRANDMEMBER を使う ・メッセージは LPOP queue:tenant_202
で取得する ・テナントのメッセージが無くなったら SREM で、テナントIDを セットから削除
34 テナント選択ロジック ・ラウンドロビン ・ランダムセレクション 引用元: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html 公平なキューイングの実現
35 テナント選択ロジックの比較 公平なキューイングの実現
まとめ
37 まとめ ・ノイジーネイバー問題とは? ・解決する方法 ・スロットリング ・公平なキューイング ・公平なキューイングの実現手段 ・ラウンドロビン ・ランダムセレクション
38 オチ(occhiだけに!)
39 まとめ ベンダーロックインを気にしないなら、 SQS使った方が楽かな・・・
ノイジーネイバー問題を解決する 公平なキューイング Shoichi Ochi (@occhi) Gotanda.rb 2026-01-28