FIG-105

マイクロサービスとモノリス — 天才シェフ1人か、完全分業の厨房か

インフラ 2026.09.28 公開 読了 約10分

アプリを1つの大きなかたまりとして作るか、小さなサービスの集まりとして作るか。前者をモノリス、後者をマイクロサービスと呼びます。どちらが正解という話ではなく、何と何を交換しているかを知るのが大事です。

たとえるなら厨房です。モノリスは何でも作れる天才シェフが1人で全部こなす厨房。マイクロサービスは前菜・メイン・デザートが完全に分業され、伝票で注文を受け渡す厨房です。図1で厨房を切り替え、4つの出来事を起こしてみてください。

KITCHEN — 同じ出来事が、2つの厨房ではどう違って効くか
👨‍🍳 天才シェフ app(1つのプロセス) + DB 1つ
🧾 注文受付
🥗 前菜
🍖 メイン
🍰 デザート
👨‍🍳 複製 1
🧾🥗🍖🍰
メイン以外の腕も丸ごと
👨‍🍳 複製 2
🧾🥗🍖🍰
メイン以外の腕も丸ごと
🧾 注文受付係 order-svc + 🗄️
🧑‍🍳
🥗 前菜係 starter-svc + 🗄️
🧑‍🍳
🍖 メイン係 main-svc + 🗄️
🧑‍🍳 🧑‍🍳🧑‍🍳
🍰 デザート係 dessert-svc + 🗄️
🧑‍🍳
🧾
出来事 👨‍🍳 モノリス 👥 マイクロサービス
1皿の受け渡し — —
一部だけ変更 — —
一部だけ混雑 — —
一部だけ故障 — —
管理するもの アプリ1つ・DB 1つ アプリ4つ・DB 4つ・その間の通信と監視
図1 — 分業は「一部だけ」の出来事に強く、その代わり受け渡しと管理の手間を払う

マイクロサービスが買っているのは「一部だけ」の自由

表を両方埋めると、マイクロサービスが強いのは「一部だけ」の出来事だと分かります。デザートのレシピを変えてもデザート係だけ入れ替えればよい。メインが混んだらメイン係だけ増やせばよい。デザート係が倒れても、ほかの料理は出し続けられる。

モノリスでは、どれも厨房全体の話になります。小さな変更でも全体を作り直して入れ替え、混雑したらシェフを使わない腕前ごと丸ごと複製し、どこか1か所の不具合で全体が止まることがあります。

その代わりに払うのは「受け渡し」と「管理」

一方で、1皿を仕上げるだけならモノリスが圧倒的に速くて確実です。モノリスの中の受け渡しは同じプロセス内の関数呼び出しなので、ほぼ一瞬で、途中で失われることもありません。マイクロサービスでは受け渡しのたびにネットワーク越しの呼び出しになり、遅くなるうえにどこかで失敗する可能性が生まれます。タイムアウトやサーキットブレーカーが必要になるのはこのためです。

管理するものも増えます。サービスごとのデプロイ、監視、ログ、そしてデータベースが分かれることで、複数のサービスにまたがる整合性をどう保つかという新しい悩み。これらはチームが大きく、担当を分けたいときに初めて元が取れるコストです。

そのため「まずはモノリスで作り、分ける理由がはっきりしてから切り出す」のが定石とされます。最初から細かく分けすぎると、分業の手間だけを払うことになりがちです。

用語ミニ辞書
モノリス
すべての機能を1つのアプリとしてまとめ、1回でデプロイする作り方。
マイクロサービス
機能ごとに小さなサービスへ分け、それぞれ独立して開発・デプロイ・スケールする作り方。
プロセス内呼び出し
同じプログラムの中で関数を呼ぶこと。速く、途中で失われない。
ネットワーク呼び出し
別のサービスへHTTPやgRPCでお願いすること。遅く、失敗することがある。
独立デプロイ
ほかのサービスを止めずに、1つのサービスだけを入れ替えられること。
障害の分離
1か所の故障が全体に広がらないように、境目で食い止めること。

まとめ

モノリスとマイクロサービスの違いは分け方です。分けると、一部だけ変える・増やす・壊れることができるようになります。その代わり、受け渡しは遅く不確実になり、管理するものが増えます。天才シェフ1人で回る規模なら1人のほうが速く、厨房が大きくなって初めて分業が効いてくる、と覚えておいてください。