水島雄太のブログ

個人的かつ雑多なブログです。

マイクロサービスアーキテクチャを読んだ

概要

現在SREとしてマイクロサービスやDevOpsに関する仕事をしている割には、マイクロサービスについてまとまった書籍を読んでいないことに気づいた。

何か体系的に学べそうな書籍が何か無いかと調べると、オライリーのマイクロサービスアーキテクチャが割と評判が良かった。

読書を進めると、思っていた以上に興味深いトピックがあり、今後の学習計画の参考にするためと内容の定着化を図るため、ここにメモとしてまとめます。

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャはそれ単体で発生したのではなく、DDDやCQRS・イベントソーシング、Rx、テスト、継続的デリバリーなど、近年の設計・開発手法などと共に醸成されてきたサービス設計思想である。 例えば、DDDでの境界付けられたコンテキストはマイクロサービスのサービス間の境界と等価であるといえるし、CQRS・イベントソーシングといった考え方はサービスの結合を疎にするための、設計手法とも言える。 また、マイクロサービスでは複数のサービスを連続して呼び出すことが多いが、これはRxという形で呼び出しの詳細を抽象化できる。 マイクロサービスでは、複数のサービスが個別にビルド・デプロイを行うことから、それらの自動化が必要であり、必然的に継続的デリバリーを実践しなければならない。

このようにマイクロサービスアーキテクチャは他の設計・開発手法と密接にリンクしていることから、それらについてもより深く学ぶ意欲が出来た。

またマイクロサービスアーキテクチャを読んでより理解が深まった概念として、サーキットブレイカーや分散トレーシングがあげられる。

仕事でサーキットブレイカーや分散トレーシングの話が出てくるが、自分の中でどのような経緯でサーキットブレイカーや分散トレーシングが必要になってきたのか、そのコンテキストを知らなかった。

サーキットブレイカーはサービス間連携で、一つの機能が使えないときにそのサービスを切り離すことで、サービスを縮退稼働させたり、大量のキューや待ちが発生しないように必ず必要になるものだし、分散トレーシングもマイクロサービスによって一つのストーリーが、複数のサービスに分割されることで、各サービスでどのような部分がボトルネックになっているのかを把握しやすくするために必要となるものだ。

また、マイクロサービスはコンウェイの法則にも従っており、組織構造とサービスの分割と粒度を合わせることになる。 DDDの境界付けられたコンテキストをコンウェイの法則に従って構築すると、マイクロサービスになるというのが一つの設計手法に対する別解という趣があり、大変興味深かった。

他にも細かい感想は色々あるが、マイクロサービスアーキテクチャを読んで、特になるほどと思った箇所は、以上といったところ。

RxやCQRS・ESについては、自分があまり深く理解してないところもあるので、個別に学習したい。