コンテンツにスキップ

レイテンシを12倍削減する12のルール:インデックスからCDNまで

概要

システムのレイテンシを大幅に下げるための 12 のテクニック。データベースからネットワーク層まで体系的に整理。

詳細

データベース層

1. Database Index(インデックス追加)
   → クエリの Seq Scan を Index Scan に変換
   → 例: 10M 行テーブルで 2000ms → 5ms になることも

2. Compress Payload(ペイロード圧縮)
   → gzip / brotli でレスポンスを 60-80% 削減
   → 帯域が少ない環境(モバイル)で特に効果大

リクエスト最適化

3. Group Requests(リクエストをまとめる)
   → N+1 クエリを防ぐ(JOIN や DataLoader パターン)
   → API レベルでは GraphQL の batching も有効

4. Use HTTP/2(HTTP/2 で並列リクエスト)
   → HTTP/1.1: リクエストは直列(TCP 接続を再利用できない)
   → HTTP/2:   1 本の接続で並列に送れる(Multiplexing)

ネットワーク・配信層

5. Use CDN(CDN でユーザーの近くにデータを置く)
   → 静的コンテンツ(画像・JS・CSS)のオリジンへのラウンドトリップを削減
   → CloudFront, Cloudflare, Fastly 等

6. Reduce External Dependencies(外部依存を減らす)
   → サードパーティ API 呼び出しはキャッシュかフォールバックを用意
   → Timeout と Circuit Breaker を設定

スケーリング

7. Load Balancer(負荷分散)
   → 単一サーバーへの集中を防ぎ、レスポンスタイムを均等化

8. Scale Vertically(スペックアップ)
   → CPU・メモリを増やす(最も手軽だが限界がある)

9. Cache(キャッシュ)
   → Read-heavy な場合に絶大な効果
   → Redis で頻繁に読まれるデータをメモリに置く
   → TTL とキャッシュ無効化戦略の設計が重要

非同期・最適化

10. Async Processing(非同期処理)
    → ユーザーを待たせる必要のない処理(メール送信・ログ記録)はキューへ
    → レスポンスタイム改善と同時にスループットも向上

11. Connection Pool(コネクションプール)
    → DB 接続の確立コストを削減
    → pgBouncer, HikariCP など

12. Read Replica(読み取りレプリカ)
    → 読み書きの負荷を分離
    → 読み取り専用の参照系は Replica に向ける

なぜ重要か / いつ使うか

  • API レイテンシが遅い原因を体系的に探すとき
  • システムデザイン面接で「パフォーマンス改善」を聞かれたとき
  • 新機能実装時のパフォーマンスレビューチェックリストとして