🐥
モノリシックとマイクロサービス
概要
ソフトウェアにおけるモノリシックとは、分割されていない1つのモジュールで構成されたものを指す。
マイクロサービスとは、複数の小さいサービスの集合体から一つのアプリケーションを構成するアーキテクチャの一種。
モノリシックとマイクロサービスは対の関係になる。
モノリシック
図例
[f:id:ryo310jp:20200810104651p:plain]
@startuml
cloud "Cloud" {
package "管理画面" {
[ログイン]
[商品管理]
[注文管理]
[在庫管理]
}
}
node "Node" {
database "Database" {
[アカウント]
[商品]
[注文]
[在庫]
}
}
[ログイン] .. [アカウント] : TCP
[商品管理] .. [商品] : TCP
[注文管理] .. [注文] : TCP
[在庫管理] .. [在庫] : TCP
@enduml
メリット
- 一つのプロセスで処理を全てを行う事ができる。
- 処理速度が高速である(通信コストが最小で済む等の理由で)
デメリット
- 拡張が難しい。
- 一つの機能をデプロイする際に他の機能への影響が大きい
- サービスの担当者は全ての機能を把握する必要がある
マイクロサービス
図例
[f:id:ryo310jp:20200810141207p:plain]
@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 つのコンポーネントに障害が発生すると、アプリケーション全体に障害が及ぶおそれがある。マイクロサービスでは、一つのコンポーネントへの障害はアプリケーション全体の障害にはならず、機能の低下だけに留まる。
デメリット
- 通信コストの増加
- 構成が複雑になるおそれ
- サービスごとに自由ゆえに統一感をなくすおそれ
Discussion