TL

マイクロサービス

1つの大きなアプリ(モノリス)を、独立してデプロイ・スケールできる小さなサービス群に分割するアーキテクチャです。開発速度やスケールを得られる反面、分散システム特有の難しさを抱えます。

中級マイクロサービスモノリスアーキテクチャ分散システム最終更新: 2026-06-16
TL;DR要点だけ先に
  • 1.マイクロサービスは、アプリを「独立してデプロイ・スケールできる小さなサービス」の集まりに分ける設計。各サービスが自分のデータを持つ。
  • 2.利点はデプロイ・スケール・チーム・技術の独立。代償はネットワーク越しの通信・データ整合性・運用といった分散システムの難しさ。
  • 3.小規模・少人数ならモノリスで十分。組織とドメインが大きくなり、分割の痛みより利益が勝ってから切り出すのが定石。

モノリスとマイクロサービス

従来の モノリス(一枚岩) は、画面・業務ロジック・データアクセスを 1つのアプリ にまとめ、1つの単位としてビルド・デプロイします。シンプルで、小規模なら最も生産的です。

マイクロサービス は、これを 業務の単位(ドメイン)ごとの独立したサービス に分割します。各サービスは、

  • 自分のプロセスで動き、独立してデプロイ・スケール できる
  • 自分専用のデータストア を持つ(他サービスの DB を直接見ない)
  • ネットワーク(API・メッセージ)越しに連携する
観点モノリスマイクロサービス
デプロイ単位アプリ全体を一括サービスごとに個別
スケール全体を増やす必要なサービスだけ増やす
技術選択基本は統一サービスごとに選べる
データ共有 DB が基本サービスごとに DB
障害範囲不具合が全体に波及しやすい影響を 1 サービスに閉じ込めやすい
難易度低い(最初は速い)高い(分散システムの複雑さ)

何がうれしいのか

  • 独立デプロイ:小さな変更を、そのサービスだけ素早く本番へ。全体の再デプロイが要らない(デプロイ戦略)。
  • 個別スケール:負荷の高いサービスだけを増やせる。リソース効率がよい。
  • チームの自律:サービス=担当チームに分け、並行して開発できる(コンウェイの法則)。
  • 技術の多様性:サービスごとに言語や DB を最適化できる。
  • 障害の分離:1 サービスの不具合を全体に波及させにくい(設計次第)。

代償:分散システムの難しさ

プロセス内の関数呼び出しが ネットワーク呼び出し に変わると、それまで考えなくてよかった問題が一気に表面化します。

  • 通信の信頼性:相手が落ちている・遅い。再試行・タイムアウト・サーキットブレーカーが要る。
  • 可観測性:1 リクエストが多数のサービスを横断する。横断的なログ・指標・分散トレーシングが必須になる(可観測性)。
  • データ整合性:DB がサービスごとに分かれるため、複数サービスにまたがる更新を 1 つの分散トランザクションにはできない。結果整合性や Saga で設計する。
  • 運用の複雑さ:デプロイ対象・監視対象・ネットワーク経路が一気に増える。
「分散モノリス」が最悪

サービスを分けたのに互いに密結合で、「A を直すたびに B も C も同時にデプロイが要る」状態を 分散モノリス と呼びます。モノリスの密結合と分散の複雑さの 両方の悪いとこ取り です。境界(どこで切るか)を誤るとこうなります。

どう分けるか(サービス境界)

分割の良し悪しは 境界の引き方 でほぼ決まります。技術レイヤー(画面 / ロジック / DB)で横に切るのではなく、業務の能力(ビジネスケイパビリティ) で縦に切るのが基本です。ドメイン駆動設計(DDD)の 境界づけられたコンテキスト が指針になります。

  • 1 サービス=1 つの責務。頻繁に一緒に変わるものは同じサービス にまとめる。
  • サービス間は API かイベント だけで連携し、相手の DB を直接触らない。
  • 最初から細かく割りすぎない。モノリスから始め、痛む境界から切り出す(モノリス・ファースト)。

データと通信

  • データ:サービスごとに DB を持つ(Database per Service)。共有 DB は密結合を生むので避け、横断的な集計はイベントで複製した読み取り用データやデータ基盤側で行う。
  • 同期通信:REST / gRPC。即時応答が要る場面。呼び出し連鎖が深いと遅延と障害が伝播する。
  • 非同期通信:メッセージキュー / イベント。疎結合で耐障害性が高く、結果整合性を受け入れる。

通信の共通機能(再試行・mTLS・可視化・トラフィック制御)をアプリの外へ寄せたい規模になったら、サービスメッシュが選択肢になります。各サービスを Twelve-Factor App に沿わせると、コンテナ化やデプロイが素直になります。

いつ採用すべきか

まずモノリス、痛んでから分割

小規模・少人数では、マイクロサービスの運用コストが利益を上回りがちです。モノリスで素早く作り、組織やドメインが大きくなって「全体一括デプロイがつらい」「特定機能だけスケールしたい」「チーム間が衝突する」が本当の痛みになってから、痛む部分を切り出すのが堅実です。

  • 向く:大規模・多チーム、機能ごとにスケール特性が大きく異なる、頻繁な独立リリースが要る。
  • 向かない:小規模、少人数、ドメインがまだ固まっていない段階。

まとめ

  • マイクロサービスは、アプリを 独立してデプロイ・スケールできる小さなサービス群 に分け、各サービスが 自分のデータ を持つ設計。
  • 利点は 独立性(デプロイ・スケール・チーム・技術) と障害分離。代償は 分散システムの複雑さ(通信・整合性・可観測性・運用)。
  • 成否は サービス境界 で決まる。技術レイヤーではなく業務単位で切る。分散モノリスは避ける。
  • モノリスから始め、痛む境界から切り出す。規模と組織が大きくなってからが本番。

DevOps/インフラ Article

マイクロサービスを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

マイクロサービス

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

利点はデプロイ・スケール・チーム・技術の独立。代償はネットワーク越しの通信・データ整合性・運用といった分散システムの難しさ。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「マイクロサービス / モノリス」に近いか確認する。
  • 強みである「マイクロサービスは、アプリを「独立してデプロイ・スケールできる小さなサービス」の集まりに分ける設計。各サービスが自分のデータを持つ。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

マイクロサービスモノリスアーキテクチャ分散システムマイクロサービスモノリスアーキテクチャ分散システム
参考: 公式情報