【まいくろさーびす】

マイクロサービス とは?

最終更新:
💡 大きなアプリを「小さな部品」の集合体に分割する

1つのアプリケーションを、業務の機能ごとに分かれた小さなサービスの集まりとして作るアーキテクチャ。各サービスは別々のプロセスで動き、個別にデプロイできる。

📌 このページのポイント
モノリス vs マイクロサービス モノリス 1つの巨大アプリケーション ユーザー管理 注文処理 決済 在庫管理 共有データベース 密結合・一括デプロイ 小さな変更でも全体を再デプロイ → マイクロサービス ユーザー サービス 注文 サービス 決済 サービス 在庫 サービス API DB DB DB DB 疎結合・個別デプロイ 各サービスが独立して動作 マイクロサービスは各機能を独立したサービスに分割し、APIやメッセージで連携する
モノリスは一体型、マイクロサービスは機能ごとに独立したアーキテクチャ
ひよこ ひよこ
モノリスと何が違うの?
ペンギン先生 ペンギン先生
モノリスは全機能が1つのアプリケーションにまとまった構成で、小さな部分を変えても全体をビルドし直してデプロイする必要があるんだ。マイクロサービスは「ユーザー管理」「注文処理」「在庫管理」のように機能ごとにサービスを分けるから、サービス単位で変更・デプロイできる。その代わり、サービス間の連携が複雑になるよ。
ひよこ ひよこ
いつマイクロサービスにすべき?
ペンギン先生 ペンギン先生
Martin Fowler氏は、うまくいった例のほとんどは大きくなりすぎたモノリスを分割したもので、新規プロジェクトはモノリスから始めるべきだと書いているよ。サービスの境界を後から動かすのはモノリスの中より難しいからなんだ。ただ、最初から分けて作るべき場合もあるという反対意見もあって、決まった正解があるわけではないんだ。
ひよこ ひよこ
サービス間の通信は?
ペンギン先生 ペンギン先生
よく使われるのは、HTTPのAPIのような軽量な仕組みでほかのサービスを呼び出す方法と、軽量なメッセージの仕組みを通してやり取りする方法だよ。前者は相手の応答を待つ同期的なやり取り、後者は待たずに進められる非同期的なやり取りに向いているんだ。
ひよこ ひよこ
分散システムの難しさは?
ペンギン先生 ペンギン先生
①ほかのサービスの呼び出しは、相手が止まっていれば失敗する。だから呼ぶ側は失敗したときの振る舞いを考えて作る必要があるんだ。②複数サービスにまたがる処理を1つのトランザクションでまとめるのは難しいから、一時的にデータが食い違うことを受け入れ、問題があれば打ち消す処理で直す設計がよく使われるよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「マイクロサービス」って出てきたら「アプリを機能ごとの小さな独立したサービスに分けて作るアーキテクチャ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Microservices Architecture」 = マイクロサービスアーキテクチャ
💬 Micro(小さな)Services(サービス)を組み合わせてシステムを構築する考え方だよ。2014年のJames Lewis氏とMartin Fowler氏の解説記事で広く知られるようになったよ

参考資料

← 用語集にもどる