🐥

モノリシックとマイクロサービス

2021/07/12に公開

概要

ソフトウェアにおけるモノリシックとは、分割されていない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 つのコンポーネントに障害が発生すると、アプリケーション全体に障害が及ぶおそれがある。マイクロサービスでは、一つのコンポーネントへの障害はアプリケーション全体の障害にはならず、機能の低下だけに留まる。

デメリット

  • 通信コストの増加
  • 構成が複雑になるおそれ
  • サービスごとに自由ゆえに統一感をなくすおそれ

出典

[https://ec-orange.jp/ec-media/?p=23421:title]

GitHubで編集を提案

Discussion