コンテンツにスキップ

バックエンドのボトルネックが発生しない設計になっているか?

Type: DeepDive
Category: パフォーマンス・スケーラビリティ
Audience: 設計リーダー / SRE / インフラ設計者 / レビュー担当者


背景・概要

パフォーマンス劣化や障害の多くは、DB・API・キューなどのバックエンドのボトルネックが原因

処理分離、非同期化、キューイング、負荷分散を活用することでこれを回避可能


  • 一括アップロード処理を同期APIではなくバッチ処理に分離
  • ドキュメントの登録をPub/Sub・Amazon SNS/SQS・Azure Service Bus経由で非同期化し、API負荷と切り離し
  • Cloud Tasks・Amazon SQS + Lambda(AWS)・Azure Queue Storage + Functionsでワーカー数を動的に調整できるよう設計

よくある失敗例

  • 画像処理やPDF生成などの重たい処理をリクエスト内に含め、タイムアウト
  • N+1クエリが原因で1テナントの利用で全体に影響
  • バックグラウンド処理をただのスレッドで実装し、Worker障害時の再実行が不能

FAQ

Q. どこがボトルネックになるか分からない

A. 想定ケースを書き出し、SplunkなどのプロファイラやAPMで可視化すべき。まずは重い処理、同期化されたI/Oを疑う

Q. スレッド実行とキューの違いは?

A. スレッドは同一プロセス内で処理され高速だが、失敗時の再試行や監視が困難で信頼性に欠ける。キューは処理を外部化し、失敗時の再送・監視・耐障害性に優れる


関連観点