【まいくろさーびす】

マイクロサービス とは?

💡 大きなアプリを「小さな部品」の集合体に分割する
📌 このページのポイント
モノリス vs マイクロサービス モノリス 1つの巨大アプリケーション ユーザー管理 注文処理 決済 在庫管理 共有データベース 密結合・一括デプロイ 1箇所の変更が全体に影響 マイクロサービス ユーザー サービス 注文 サービス 決済 サービス 在庫 サービス API DB DB DB DB 疎結合・個別デプロイ 各サービスが独立して動作 マイクロサービスは各機能を独立したサービスに分割し、APIで連携する
モノリスは一体型、マイクロサービスは機能ごとに独立したアーキテクチャ
ひよこ ひよこ

モノリスと何が違うの?

ペンギン先生 ペンギン先生

モノリスは全機能が1つのアプリケーションに詰まった構成。マイクロサービスは「ユーザー管理」「注文処理」「在庫管理」などを独立したサービスに分割する。モノリスは開発が楽だけど変更の影響範囲が大きい。マイクロサービスは独立して変更・デプロイできるけど、サービス間の連携が複雑になるよ

ひよこ ひよこ

いつマイクロサービスにすべき?

ペンギン先生 ペンギン先生

最初からマイクロサービスにするのは避けるべきだよ。まずモノリスで作り、チームが大きくなったり特定の機能だけスケールしたい場面が出てきたら分割を検討する。10人以下のチームでマイクロサービスにすると運用コストの方が高くつく。「Monolith First」が現代の定石だね

ひよこ ひよこ

サービス間の通信は?

ペンギン先生 ペンギン先生

同期通信はREST APIまたはgRPC。非同期通信はメッセージキュー(SQS、Kafka)。APIゲートウェイで外部からのリクエストを適切なサービスにルーティングする。サービスメッシュIstioLinkerd)でサービス間通信の暗号化、認証、可観測性を一括管理することも多いよ

ひよこ ひよこ

分散システムの難しさは?

ペンギン先生 ペンギン先生

ネットワーク障害(サービス間の通信が失敗する)、②分散トランザクション(複数サービスにまたがる処理の整合性)、③デバッグの困難さ(ログが複数サービスに分散)、④サービスディスカバリ(動的にサービスの場所を見つける)。分散システムの8つの誤謬(Fallacies of Distributed Computing)は必読だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「マイクロサービス」って出てきたら「アプリを独立した小さなサービスに分割するアーキテクチャ」と思えればだいたいOK!
📖 おまけ:英語の意味
「Microservices Architecture」 = マイクロサービスアーキテクチャ
💬 Micro(小さな)Services(サービス)を組み合わせてシステムを構築する考え方だよ
← 用語集にもどる