「モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド」第1章を読んだ

はじめに

「モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド」の第1章を読み終わって、学んだことを書き留めておきます

マイクロサービスで解決したい問題はなにか

  • 実装とデプロイを並列作業できないこと

メリット

  • 開発対象以外のコードがカプセル化されているため、開発ドメインを理解することが容易
  • 各サービスのドメインに合った柔軟な技術選定が可能

デメリット

  • データ整合性を担保するのが困難になる

モノリス

伝統的なアプローチでは、技術の凝集度は高いが、ビジネス機能の凝集度が低いため、ビジネス変更に弱い

モノリスの利点

  • 運用が容易
  • コードの再利用が容易

モノリスのデメリット

  • コードを触る人が増えるほど、デリバリー衝突が発生しやすい

モノリスは、3つに分解できる

単一プロセスのモノリス

全てのコードが単一のプロセスにある

モジュラーモノリス

「単一プロセスのモノリス」の一部。以下の特徴を持つ

  • コードがモジュール化されているため、開発者の並列作業を可能
  • デプロイが独立でないため、マイクロサービスでない

分散モノリス

モノリスでも、マイクロサービスでもないもの

サードパーティ製のブラックボックスシステム

Saasなど、外部の誰かが開発したソフトウェアでコードを変更できない

ビジネスドメインに基づいてモデル化されているので、マイクロサービスであるように思えるがデプロイできないので、モノリスであると理解した

結合度

モジュール結合度の話ではなかった

4つの結合度を以下に作らないかを考えてサービス分割を考える必要がある

実装結合

公開可能なデータベースを作成するというアプローチは、頭になかったので勉強になった

一時結合

同期通信を複数のサービスに跨って行うため発生する結合

キャッシュや、非同期通信を行うことで低減できる

疑問

  • 実装結合として例に挙がっている「データベースを共有する」以外、思いつくことができなかった

  • 以下の問題を解決する方法が分からなかったので、4章に期待

    • 決済サービス、受講サービスというサービスがあるとする
    • ユーザーは決済直後にサービス利用したいので、初回購入時のみ「決済サービス」、「受講サービス」間で同期通信するため一時結合になる

感想

  • モノリスも分散システムであるという言葉に、ハッとした
  • サービス分割をする時に、「独立したデプロイは可能か」、「インターフェースは、安定するのか」を問うてみると良さそう

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

  • 作者:Sam Newman
  • 発売日: 2020/12/26
  • メディア: 単行本(ソフトカバー)