コンテンツにスキップ

バックエンド開発者が知っておくべき10のシステム設計の概念

原文

  1. 水平スケーリング vs 垂直スケーリング
  2. ロードバランシング
  3. キャッシング(Redis、CDN)
  4. データベースのインデクシング
  5. CAPの定理
  6. イベント駆動型アーキテクチャ
  7. マイクロサービス vs モノリス
  8. 回路遮断器
  9. 冪等性
  10. バックプレッシャーの処理

要約

バックエンド開発者にとって必須のシステム設計概念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等。

リンク