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