モノリシックとマイクロサービス
概要
ソフトウェアにおけるモノリシックとは、分割されていない1つのモジュールで構成されたものを指す。
マイクロサービスとは、複数の小さいサービスの集合体から一つのアプリケーションを構成するアーキテクチャの一種。
モノリシックとマイクロサービスは対の関係になる。
モノリシック
図例
@startuml cloud "Cloud" { package "管理画面" { [ログイン] [商品管理] [注文管理] [在庫管理] } } node "Node" { database "Database" { [アカウント] [商品] [注文] [在庫] } } [ログイン] .. [アカウント] : TCP [商品管理] .. [商品] : TCP [注文管理] .. [注文] : TCP [在庫管理] .. [在庫] : TCP @enduml
メリット
- 一つのプロセスで処理を全てを行う事ができる。
- 処理速度が高速である(通信コストが最小で済む等の理由で)
デメリット
- 拡張が難しい。
- 一つの機能をデプロイする際に他の機能への影響が大きい
- サービスの担当者は全ての機能を把握する必要がある
マイクロサービス
図例
@startuml cloud { package "管理画面" { } } cloud { package "アカウントAPI" { [ログイン] } database { [アカウント] } } cloud { package "商品API" { [商品管理] } database { [商品] } } cloud { package "注文在庫API" { [注文管理] [在庫管理] } database { [注文] [在庫] } } 管理画面 .. アカウントAPI: HTTP 管理画面 .. 商品API: HTTP 商品API .. 注文在庫API: HTTP [ログイン] .. [アカウント] : TCP [商品管理] .. [商品] : TCP [注文管理] .. [注文] : TCP [在庫管理] .. [在庫] : TCP @enduml
メリット
概要
- マイクロサービスごとにデプロイできる
- マイクロサービスごとにスケールできる
- マイクロサービスごとに適切な技術を自由に選択できる
- マイクロサービスごとに独立した運用担当チームに任せられる。
- 開発サイクルの高速化
- 可用性の向上
詳細
- サービスごとに個別にスケールできる事で、コストの適正化、スパイクが生じた場合の可用性の維持が可能。
- サービスごとに独立したチームは各サービスに最適な技術を自由に選択可能
- サービスごとに独立した複数のチームから構成されるマイクロサービスでは、チームがそれぞれ自分の担当するサービスについて理解が深く、自主的かつ迅速に仕事に取り組める。
- モノリシックでは1 つのコンポーネントに障害が発生すると、アプリケーション全体に障害が及ぶおそれがある。マイクロサービスでは、一つのコンポーネントへの障害はアプリケーション全体の障害にはならず、機能の低下だけに留まる。
デメリット
- 通信コストの増加
- 構成が複雑になるおそれ
- サービスごとに自由ゆえに統一感をなくすおそれ