バックエンド開発者が知っておくべき10のシステム設計の概念¶
原文¶
- 水平スケーリング vs 垂直スケーリング
- ロードバランシング
- キャッシング(Redis、CDN)
- データベースのインデクシング
- CAPの定理
- イベント駆動型アーキテクチャ
- マイクロサービス vs モノリス
- 回路遮断器
- 冪等性
- バックプレッシャーの処理
要約¶
バックエンド開発者にとって必須のシステム設計概念10項目のリスト。スケーリング、ロードバランシング、キャッシュ、DB設計など。
解説¶
1. 水平スケーリング vs 垂直スケーリング¶
- 垂直(スケールアップ): サーバーのCPU/メモリを増強。限界がある
- 水平(スケールアウト): サーバーの台数を増やす。理論上無限にスケール
→ 大規模システムでは水平スケーリングが基本
2. ロードバランシング¶
複数サーバーへのリクエスト分散。 → 既存材料: ALB vs NLB
3. キャッシング¶
DBアクセスを減らしてレスポンスを高速化。Redis、CDN、ブラウザキャッシュ等。 → 既存材料: インデックスとキャッシュの違い → 既存材料: Webキャッシュ戦略
4. データベースのシャーディング/レプリケーション¶
- シャーディング: データを複数DBに分割(例: ユーザーIDの範囲で分割)
- レプリケーション: 読み取り用レプリカを作成し読み取り負荷を分散
5. メッセージキュー¶
非同期処理のための仕組み(Kafka、RabbitMQ、SQS)。処理のデカップリングと負荷の平準化。
6. API設計(REST / gRPC / GraphQL)¶
→ 既存材料: オフセット vs カーソルページネーション → 新規材料: APIゲートウェイ
7. CAP定理¶
分散システムでは Consistency(一貫性)、Availability(可用性)、Partition tolerance(分断耐性)の3つを同時に完全には満たせない。
8. レート制限¶
APIの過負荷や悪用を防ぐ。トークンバケット、リーキーバケット等のアルゴリズム。
9. サーキットブレーカー¶
依存サービスが障害時、連鎖障害を防ぐ仕組み。一定時間エラーが続くとリクエストを遮断。
10. オブザーバビリティ(ログ・メトリクス・トレース)¶
分散システムの状態を把握するための3本柱。Prometheus、Grafana、Jaeger等。