先日、オライリーより出版されている「ソフトウェアアーキテクチャの基礎」を読了しました。
ページ数はそこそこの書籍でしたが、少しずつ少しずつ...読み進めて約1ヶ月で読了することができました。
今回は「ソフトウェアアーキテクチャの基礎」についての書評を簡単にまとめてみたいと思います。
この書籍の内容を一言で紹介するならば「アーキテクチャとは常にトレードオフであるものを理解せよ」といった感じでした。
全てはトレードオフ
僕自身はアーキテクトという立場で仕事をしたことがありません。
データベースは何にするか、メッセージングかHTTPリクエストか...といった議論に参加することはあれど、システム全体を設計したことはありませんが、今後のキャリアだったり、自分の視野を広げるためにアーキテクチャについて知見を広げていきたいと感じていました。
本書を読了して、強く感じているのは「全てはトレードオフである」ということです。
近年ではマイクロサービスという言葉をよく聞きます。これもアーキテクチャのパターンの1つです。なぜ、近年でこれほどマイクロサービスが流行っているのかについては省略しますが、個人的には「だったら、全部マイクロサービスでいいじゃん」と思っていました。
しかし、読了した今、それは完全な間違いであることに気づきました。
特性について
アーキテクチャというのは、多くの特性(ility)によって評価されるそうです。
運用のコストやデバッグの容易さ、スケーラビリティ、弾力性、堅牢性など(書籍で紹介されています)...です。
大前提として全ての特性を最高レベルに満たすようなアーキテクチャは存在しません。ドラクエの職業のように長所・短所は必ずあります。
確かにマイクロサービスは素晴らしいものですが、全ての特性を満たしている完璧なものではありません。コストの面やデバッグの容易さという点では従来のモノリシックなアーキテクチャには劣ります。
つまり「〇〇なら間違いない」という判断は危険であり、自分たちが満たしたい特性にあったアーキテクチャを選択することが大切です。またアーキテクチャは常に変化していくものであるという認識も重要であり、アーキテクチャはフェーズに合わせて再設計・改善されていくものだそうです。
アーキテクチャスタイルの紹介
第1部ではアーキテクチャはトレードオフであることが強調されています。
そして、第2部に進むとアーキテクチャスタイルについて紹介が始まります。近年、名前は聞いたことがある...であろう有名なスタイルがどのような特性を持っているのか、実際のプロダクトの例を交えて紹介されています。
- レイヤードアーキテクチャ
- パイプラインアーキテクチャ
- マイクロカーネルアーキテクチャ
- サービスベースアーキテクチャ
- イベント駆動アーキテクチャ
- スペースベースアーキテクチャ
- オーケストレーション駆動サービス指向アーキテクチャ
- マイクロサービスアーキテクチャ
全てのスタイルを覚えておく必要はないと思いますが、いざアーキテクチャを設計する際には「こんなパターンもあるじゃん」と辞書的に活用できると感じました。
それぞれのスタイルがどのような背景を持って生まれたのかという話が面白かったです。
第3部ではスタイルの決定・交渉をどのように進めていけば良いのかという話だったので、スラスラと読み流しました。
勝手に対象読者
おすすめできる人
- アーキテクチャについてよく知らない・学びたい人
- アーキテクチャの書籍の1冊目を検討している人
- 開発者でシステム全体を俯瞰できるようになりたい人
- アーキテクトをしているが、どう設計すれば良いか分からない人
おすすめできない人
- 開発者になりたての人
- アーキテクチャとは「トレードオフであること」を認識している人
- さまざまなアーキテクチャスタイルについて詳しく知りたい人
- アーキテクチャについてすでに熟知している人
気になる方はぜひ「ソフトウェアアーキテクチャの基礎」を読んで見てください。
少しでも「ええな〜」と思ったらはてなスター・はてなブックマーク・シェアを頂けると励みになります。