SDN
← 概念一覧へ
アプリケーション層

マイクロサービス

Microservices

1つの大きなアプリを、独立してデプロイできる小さなサービス群に分割する設計。各サービスは1つの責務を持ち、別々に開発・スケール・障害分離できる。

キーポイント
  • 独立してデプロイ可能な、小さくモジュラーなサービスの集まり。
  • 各サービスは1つの明確な責務を持つ(例: ユーザープロフィール、フォロワー、フィード、検索、写真アップロードを別々に)。
  • 例: Pinterest が user profile / follower / feed / search / photo upload を別サービスに分けている。
  • サービスごとに別言語・別DB・別スケールが可能。チームも分かれて並行開発できる。
トレードオフ

疎結合なサービス群は、モノリシック(1枚岩)とは違うアーキテクチャ・運用・開発プロセスを要求する。サービスが増えるほどデプロイ・監視・障害追跡・サービス間通信の複雑さが増す。小規模では過剰で、むしろモノリシックの方が速いこともある。分割の単位を誤ると、かえって絡まり合って苦しむ。

たとえ話: 専門店街 vs デパート

  • モノリシック = 1つの巨大デパート。すべての売り場が同じ建物・同じシステムにある。改装(デプロイ)するときは全館を止める。1か所の火災(障害)が全館に及ぶ。
  • マイクロサービス = 専門店が並ぶ商店街。パン屋・本屋・花屋がそれぞれ独立。1店だけ改装でき、1店が休業しても他は営業できる。
図を描画中...

各サービスが自分のDBを持ち、自分のペースでデプロイ・スケールできるのがポイントです。フィードへのアクセスが急増したら、フィードサービスだけを増強できます。

メリット

  • 独立デプロイ: 1サービスの修正で全体を止めなくていい。
  • 障害分離: 1サービスが落ちても他は動き続けられる(設計次第)。
  • 独立スケール: 混んでいるサービスだけ増やせる。
  • 技術選択の自由: サービスごとに最適な言語・DBを選べる。
  • チーム分割: サービスごとにチームが並行開発。

デメリット(つまずきポイント)

  • 分散システムの難しさ全部乗せ: ネットワーク遅延、部分障害、データの整合性…これらは1枚岩なら悩まなかった問題。
  • 運用が重い: 監視・ログ・デプロイ・障害追跡の対象が一気に増える。
  • サービス間のデータ整合性: 1つのトランザクションで全部更新…ができなくなり、結果整合性で設計する必要が出る。
  • 分割しすぎ問題: 細かく分けすぎると通信だらけになり、かえって遅く・複雑に。最初はモノリシックで始め、必要に応じて切り出すのが定石(『モノリスファースト』)。

📊 図解

モノリシック vs マイクロサービスの構成

図を描画中...

関連する概念

この概念で腕試し

関連する 4 問のクイズに挑戦できます。

クイズを解く