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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shoichi Ochi
January 28, 2026
Programming
0
100
ノイジーネイバー問題を解決する 公平なキューイング
Gotanda.rb#64の登壇資料です。
Shoichi Ochi
January 28, 2026
Tweet
Share
More Decks by Shoichi Ochi
See All by Shoichi Ochi
高速化&コスト半減!? GitHub Actionsの サードパーティマネージドランナーの比較
occhi
1
400
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
occhi
0
1.5k
Other Decks in Programming
See All in Programming
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
580
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.4k
今から始めるClaude Code超入門
448jp
8
8.8k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
130
CSC307 Lecture 05
javiergs
PRO
0
500
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
280
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
240
FOSDEM 2026: STUNMESH-go: Building P2P WireGuard Mesh Without Self-Hosted Infrastructure
tjjh89017
0
170
CSC307 Lecture 01
javiergs
PRO
0
690
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
Data-Centric Kaggle
isax1015
2
770
CSC307 Lecture 06
javiergs
PRO
0
690
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
93
Un-Boring Meetings
codingconduct
0
200
エンジニアに許された特別な時間の終わり
watany
106
230k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
The Language of Interfaces
destraynor
162
26k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
Git: the NoSQL Database
bkeepers
PRO
432
66k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
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