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
0
140
ノイジーネイバー問題を解決する 公平なキューイング
Gotanda.rb#64の登壇資料です。
Shoichi Ochi
January 28, 2026
Tweet
Share
More Decks by Shoichi Ochi
See All by Shoichi Ochi
高速化&コスト半減!? GitHub Actionsの サードパーティマネージドランナーの比較
occhi
1
470
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
occhi
0
1.7k
Other Decks in Programming
See All in Programming
モダンOBSプラグイン開発
umireon
0
190
AIコードレビューの導入・運用と AI駆動開発における「AI4QA」の取り組みについて
hagevvashi
0
570
Smarter Angular mit Transformers.js & Prompt API
christianliebel
PRO
1
100
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
580
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
300
Mastering Event Sourcing: Your Parents Holidayed in Yugoslavia
super_marek
0
130
「速くなった気がする」をデータで疑う
senleaf24
0
110
安いハードウェアでVulkan
fadis
1
840
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.2k
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
Strategy for Finding a Problem for OSS: With Real Examples
kibitan
0
120
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
450
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Everyday Curiosity
cassininazir
0
180
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
340
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
Mobile First: as difficult as doing things right
swwweet
225
10k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
Speed Design
sergeychernyshev
33
1.6k
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