What is it, naokirin?

ソフトウェアアーキテクチャ ハード・パーツを読んだ

GWということで、溜まっていた書籍の消化をしていましたが、そのうちの1冊です。

特にマイクロサービスアーキテクチャを考えるエンジニアやアーキテクトにとっては、整理された情報源としてかなり有用そうです。

全体の感想

ソフトウェアアーキテクチャの基礎の著者が、ソフトウェアアーキテクチャの基礎で書けなかった内容を書いたということでしたが、この書籍単体で読めるようになっていました。

とはいえ、初級向けな内容ではないため、複数サービスのアーキテクチャを多少なりとも検討したことが無いと、なかなかイメージが湧きにくい内容も多いかもしれないです。

一方でこうした経験があると、間違いなく「なるほど!」「知っていたけれど整理されているのは読んだことがなかった」という部分が多いはずです。

また、今後こうした複数サービスのアーキテクチャの検討が求められるエンジニアやアーキテクトを目指す人にはかなり有用な情報源になると思います。

第一部 分解する

コンポーネントとデータの分解に関する内容ですが、以下のようなことが書かれています。

  • 分割をどのような手順ですすめるか
  • 適切な分割になっているか

まず、アーキテクチャの特性と事業をつなげているところから始まる点に大きな価値を感じました。

またコードの分解においても、コンポーネントベース、戦術的フォークの二種類が提示されています。

戦術的フォークがあまり選択肢のイメージがなかったのですが、選択肢としては確かにあるべきだと認識できたので良かったです。

データベースの選択も1章割かれています。整理されているので、悩んだときにパッと開いてみるのには非常に良さそうです。

最後に適切なサービス粒度を検討する章があります。マイクロサービスアーキテクチャの検討をしようとすると、どうしても見出した境界に沿ってすべてを分割しようとしてしまいがちだと思うのですが、そうではなく合理的な粒度はどの程度かを検討する方法が書かれているので、ぜひここは読むのが良いかと思います。

第二部 つなぎ合わせる

ここからさらにサービスを分割する際に悩むパターンを整理しています。

あるあるなアーキテクチャ検討として、どのようなアーキテクチャ特性が必要でどのような構成にするべきかの検討の前に、実際の技術ありきな構成パターンを検討してしまうことが挙げられると思います。

もちろん、選択肢がほぼない場合もありますが、ほとんどのパターンで選択肢が存在し、また同様の特性を満たす技術が複数存在していることも多いと思います。

こうした点を考慮しているのだと思いますが、特定の技術実装によらない(HTTP、コンテナといったレベルでもほとんどの場面で依存していない)パターンの記述になっており、広範囲のアーキテクチャ検討に役立つと思われます。

個人的には、これまで様々な場面で学び、蓄積してきた知識が整理されていて、しかも網羅性も高く、アーキテクチャを検討する際に常に横に置いておく本となりそうです。

特に第12章で、それまでの通信、整合性、調整のパターンを元に、それらの組み合わせをトランザクショナルサーガパターンとして整理しているのがすごいですね。これらの各パターンは、これまで断片的で網羅性の薄い個別パターンとして紹介されていることが多かったので、ここもかなり読む価値があると思います。

まとめ

アーキテクチャ考える人には、是非オススメしたい書籍でした。