mongolyyのブログ

開発(Javascript, Typescript, React, Next.js)や開発手法(スクラム, アジャイル)、勉強したことについて色々書ければと。

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

はじめに

上司や同僚と会話していたときに、マイクロサービス、マイクロフロントエンドの話題が出てくるのですが、概要しかわかっていませんでした。
マイクロサービス、マイクロフロントエンド自体の解像度を上げたり、現場に適応できるのか理解を深めたいなーと思い本書を読みました。

感想

マイクロサービス化の準備のイメージがついた

本書を読んで、マイクロサービス化は以下のような流れで進めていけばいいのかなと理解しました。

  1. 目的を定める
  2. ドメインモデルを作る。イベントストーミングを通して、ステークホルダーと共通理解
  3. チーム、組織を再編成
  4. 定量的、定性的に計測しながら各マイクロサービスを段階的に移行していく

旧システムからの移行(含: to モノリシック)について理解を整理できた

マイクロサービスへの移行パターンについて、以下のようなものを学びました。

  • スタラングラーアプリケーション
    • プロキシを挟んで、新システムをモノリスから切り出して、マイクロサービスとして稼働させて、リダイレクトで移行していくパターン。すぐに戻せるのがメリット。
  • UI合成
  • 抽象化によるブランチ
    • 既存のシステムで、マイクロサービス化する部分に対して抽象化のクラスを用意する。それまでのコードは実装クラスのコードとし、既存のシステムは抽象化クラスを通して実装クラスのコードを呼び出すように変更する。
    • その実装クラスの機能をマイクロサービス化する。新たに実装クラスを作成し、そのマイクロサービスを呼び出すようにする。
    • 準備が整ったら抽象化クラスと実装クラスの関連付けを変更してマイクロサービスを呼び出す実装クラスを稼働させるようにする。
  • 同時実行
    • 既存のシステムも新しいシステムも同時に動かす。複雑な仕組みを移行した場合に有用で、差分を比較することで正しく動いているか評価できる。
  • デコレーティングコラボレーター
    • 既存のシステムの前にプロキシを置き、そのプロキシからマイクロサービスを呼び出すようにする。既存のシステムに変更を加えなくて良いことがメリット。
  • 変更データキャプチャ
    • モノリスによって変更されたデータをキャプチャして、それをトリガーにマイクロサービスを動かす。

他に、データベースの移行についても10弱のパターンが紹介されていました。

上記はマイクロサービスへの移行を前提に書かれているものではあるのですが、業務システムを作っているものとしては、現行システムの一部だけを切り出し、新システムとして稼働させるみたいなこともあり、そこについて役立ちそうな知識(フューチャーフラグ、スパイを使う等のテクニック)があったのが今後役に立ちそうでした。 特にフューチャーフラグのあたりは最近同僚とのディスカッションテーマだったりもしたのですごくタイムリーでした。

まとめ

システム設計周り、特にDDD周りの知識が増強されたり、システムの移行の手法について手札が増えたように感じました。 また、マイクロサービスの概要、DDDの節を中心に、最近読んだ「Design It!」とも関連する話だなーとも思いました。

「マイクロサービス化したら良くなるわけではない。現況を踏まえて判断しなさい」との記述がところどころにあったが、それを踏まえてなのか、本書ではマイクロサービスが前提になっていつつも、マイクロサービス化しなくても当てはまるパターンやテクニックの紹介があり、非常に有用でした。