面白駆動人生

やっほー

【読書メモ】Fundamentals of Software Architecture ~第一章 Introduction~ (2)

『Fundamentals of Software Architecture: An Engineering Approach』(以下、FoSA)の読書メモ、今回は第一章 Introductionの2回目です。
前回の記事はこちら

Intersection of Architecture and...

このセクションでは、ソフトウェアアーキテクチャと以下の4つについて書かれています。

  • Engineering Practices
  • Operations/DevOps
  • Process
  • Data

上から順に、見ていきましょう。

Engineering Practices

まず前提として、プロセスとプラクティスという考え方があるそうです。

  • プロセスとは、どうやって「人」を動かすか(会議やチームビルディングなど)
  • ラクティスとは、継続的に恩恵を生み出す仕組み(CI/CDなど)

アーキテクチャとしては、プラクティスにフォーカスを当てる事が重要とのこと。

例えば、マイクロサービスで必要な、自動プロビジョニング・自動テスト/デプロイなどをどう実現するかを決めること。


なぜプロセスとプラクティスを分けて考えるのか。

  • (1) プラクティスはプロセスに依存せずに構築できるため。
  • (2) 人間は「分からないとわかっていないこと」に対する推定が苦手なため。

「分からないとわかっていないこと」というフレーズは、2002年にラムズフェルド元米国防長官という人の発言として有名なようです。
詳しくはwikiを参照ください。 ジョハリの窓理論に由来するそうな。

プロジェクトの始まりは、「知らないと知っていること」を明らかにしていくこと。 例えば、開発者が予習しておくべき要素やドメイン知識など。

問題は、「知らないと知らなかったこと」にぶつかった時。 これについて、事前に考慮したプロセスを組むことは不可能で、 イテレーションを回して解決する他ないようです。


長くなったのでサマリとしては、

  1. プロセスとプラクティスは別物であり、扱う課題を切り分けて考える。
  2. アーキテクチャとして、機能させる上で必要なプラクティスを見極め、採用すること。

この二つがアーキテクトには求められるようです。

Operations/DevOps

かつては、運用はコスト削減のためアウトソースの対象、という背景があり、 アーキテクトは、運用は外部委託すると言う制約に対して防御的になるしかなかった。
その結果として、SPACE-BASED-ARCHITECTUREというアーキテクチャが生まれたそうです。

柔軟なスケールを実現するためにESB-driven SOAなども考案されたが、複雑であり、運用を考慮していなかった。

運用の関心ごとは運用でハンドルすべき
マイクロサービススタイルを築き上げた人たちは、そのことに気づいたそうです。
アーキテクチャーと運用をうまく連携させることで、 シンプルなアーキテクチャと、適切な運用を実現した。
不適切な姿は無駄な複雑性を産んでしまう、と本書で述べられてます。

Process

ソフトウェア開発プロセスと、アーキテクチャが独立しているというのはナンセンスと言う話。 本書では、イテレーションを回しながら進めていくプロセスの重要性が語られています。

イテレーションのいいところは、再構築性が高い事。 そもそも、アーキテクチャ自体の変更はあり得る。 最初はモノリスで初めても、あとあとマイクロサービス にするなど。 逆にウォーターフォールでマイクロサービスは現実的ではないよね、という話も出ていました。

Data

外部データはアーキテクチャにとって無視できないよって話。 詳しくはChapter 3で。 

ソフトウェアアーキテクチャの原理原則

▼ソフトウェアアーキテクチャの第一原理:
Everything in software architecture is a trade-off.
ソフトウェアアーキテクチャのすべては、トレードオフにある。

▼ソフトウェアアーキテクチャの第二原理:
Why is more important than how.
「なぜ」は「どうやって」よりも重要である。

本書では、トレードオフを踏まえた決定の背景にある「なぜ」 に注目していく、というところで第一章が締まります。

今回はここまで。 次回から、第二章に入ります。

英単語メモ

■agnostic (noun)
def: a person who believes that it is not possible to know whether God exists or not
XX-agnositc で「〜に依存しない」

■nemesis (noun)
def: the person or thing that causes somebody to lose their power, position, etc. and that cannot be avoided

■infuse A into B | infuse B with A (verb)
def: to make somebody/something have a particular quality

■nomenclature (noun)
def: a system of naming things, especially in a branch of science

■delve into (phrasal verb)
def: to try hard to find out more information about something