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
ノイジーネイバー問題を解決する 公平なキューイング
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shoichi Ochi
January 28, 2026
Programming
270
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ノイジーネイバー問題を解決する 公平なキューイング
Gotanda.rb#64の登壇資料です。
Shoichi Ochi
January 28, 2026
Transcript
40 slides
ノイジーネイバー問題を解決する 公平なキューイング 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
More Decks by Shoichi Ochi
See All by Shoichi Ochi
履歴が膨大なら、どう保存する? 〜Kaigi on Rails登壇後に深まったデータ設計の話〜
occhi
0
50
登壇はいいぞ! 〜Kaigi on Railsに登壇して起きた3つの変化〜
occhi
0
140
Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
1
4.3k
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
840
Prevent Concurrency Problems! A Practical Introduction to Transactions
occhi
0
42
並行性の問題を防げ!実践トランザクション入門
occhi
1
370
高速化&コスト半減!? GitHub Actionsの サードパーティマネージドランナーの比較
occhi
1
1k
HTTPじゃ遅すぎる! SwitchBotを自作ハブで動かして学ぶBLE通信
occhi
0
2.4k
Other Decks in Programming
See All in Programming
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
230
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
750
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
350
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
120
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
240
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
670
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
210
オーケストレーション記述言語 Katari
yukikurage
0
260
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
250
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
380
Modernizing iOS Apps
seyfoyun
0
150
SODA - FACT BOOK(JP)
sodainc
1
40k
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
530
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
320
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
121
130k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
600
HDC tutorial
michielstock
2
1k
Visualization
eitanlees
153
17k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
KATA
mclloyd
PRO
35
16k
Skip the Path - Find Your Career Trail
mkilby
1
290
Heart Work Chapter 1 - Part 1
lfama
PRO
11
37k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.6k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
400