マイクロサービスアーキテクチャを読んだ
マイクロサービスアーキテクチャ(第2版)を読んだので、印象に残った箇所を書いていきます。
マイクロサービスは難しい
まず、本書を読んで率直な感想は、「マイクロサービスは難しい」です。 マイクロサービスアーキテクチャを採用することには、メリットもあればデメリットもあり、デメリット(対処しなければならない課題)には、技術的課題・組織的課題の両方があります。
技術的課題としては以下のようなものが言及されており、
- 監視やトラブルシューティングが難しい
- サービス間でデータの整合性を保つのが難しい
- テスト(特にE2Eテスト)の実施が難しい、など
組織的課題としては、マイクロサービスを採用するには、組織(開発チーム)が以下のような状態になっている必要があると書かれていました。
- チームが、職能ごと(フロントエンドチームやバックエンドチーム)ではなく、サービスごとに職能を横断する形で組織されている
- チームのサービスの所有権(デプロイ権限など)が与えられている、など
技術的な課題についてはなんとなく想像がついていましたが、組織的に解決しなければならない課題もあるというのは、勉強になりました。 以前読んだ「ソフトウェアアーキテクチャの基礎」にも書いてありましたが、全ての状況に適応できる万能なアーキテクチャは存在せず、それぞれのメリット・デメリットのトレードオフを考慮した上でアーキテクチャの選択をするべきであり、安直にマイクロサービスアーキテクチャを採用することは危険でもあるということがよくわかりました。
このトレードオフについては、特にモノリスとマイクロサービスを比較するような形で何度も言及されており、これについてもう少し書いていきます。
モノリスとマイクロサービス
モノリスと分散(マイクロサービス)は、よく比較されているのを見るので、一見対立するような構造に思えます。 そして、モノリスとマイクロサービスを比較する文脈は、大抵モノリスからマイクロサービスにリプレイするという文脈であることが多く、私自身なんとなくですが、モノリスよりマイクロサービスのほうが優れているという印象を持ってしまっていました。 もっと大げさに言えば、モノリスはレガシー、マイクロサービスはモダンであり、マイクロサービスアーキテクチャを採用する方が今風でかっこいいな的なイメージを持っていました。
しかし、本書では、モノリスの利点についても提示しており、特に新システムの開発においてマイクロサービスは採用するべきではない、とまで言及しています。
安定したサービス境界を定義することの重要性を考えると、マイクロサービスアーキテクチャは、新製品やスタートアップにとって、向いていないことが多いと思います。どちらの場合も、構築したいものの基本部分で繰り返し作業するにつれて、作業するドメインが大きく変更されることが一般的です。このようなドメインモデルの変更によって、サービス境界がさらに変更されることになります。そして、サービス境界を越えて変更を調整することには、コストがかかります。一般に、ドメインモデルが十分安定するまで待ってから、サービス境界を定義する方が適切だと思います。
マイクロサービスは、「多く」の複雑さをもたらします。マイクロサービスを使う理由を真剣に検討する必要があるほどの、複雑さです。新規システムでは、単純な単一プロセスモノリスから出発することが、完全に理にかなっていると、依然として確信しています。しかし、時間とともに、我々は多くを学び、現在のシステムアーキテクチャが、もはや目的にそぐわないことに気付きます。その時点で変更を検討するのが、適切です。
このようにマイクロサービスはモノリスに比べて常に優れているわけではなく、その時の状況をしっかり見極めて、採用を検討する必要があることがわかります。
また、モノリスからマイクロサービスへの移行についても印象に残った記述があります。 それは、「モノリスが消滅しないこともある」という記述です。
繰り返しますが、モノリシックアーキテクチャが本質的に「悪い」わけではないので、それを敵とみなすべきではありません。「モノリスを持たない」ことにこだわらず、アーキテクチャ変更がもたらす利点を重視するようにします。 マイクロサービスへの移行後に、既存のモノリシックアーキテクチャが残ることは、よくあることです。ただし多くの場合、既存のモノリシックアーキテクチャのキャパシティが、小さくなります。例えば、現在ボトルネックとなっている10%の機能をモノリシックシステムから削除し、残りの90%をモノリシックシステムに残すことで、アプリケーションの処理能力改善を実現できるかもしれません。
モノリスからマイクロサービスへの移行は、モノリスなサービスが消滅することがゴールなのかなーと思っていましたが、それは誤解しでしたね。。
最後に
マイクロサービスについては、元々なんとなーく聞いたことがある程度の理解でしたが、本書を読んだことで色々と誤解をしていたことがよくわかりました。 ページ数がとても多く読むのが大変でしたが、その分吸収できたことも多く、とても満足しています。