O’REILLY Learning「ソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析」3章〜4章
https://learning.oreilly.com/library/view/-/9784814400065/
3章 アーキテクチャのモジュール化
アーキテクチャのモジュール化によるメリット
・スケーラビリティ
・アジリティ
アーキテクチャ上のモジュール化は、必ずしも分散アーキテクチャを意味するわけではない。
モジュラーモノリスやマイクロカーネルアーキテクチャのようなモノリシックアーキテクチャでも、保守性、テスト性、デプロイ性は実現可能。
保守性(Maintainability)
機能の追加、変更、削除はもちろん、メンテナンスパッチやフレームワークやサードパーティライブラリのアップグレードといった内部変更の適用も容易であるような性質。
保守性を判断する代表的なメトリクス
・コンポーネントの結合度
・コンポーネントの凝集度
・循環的複雑度
・コンポーネントのサイズ
・技術による分割とドメインによる分割
テスト性(Testability)
テスト(通常は自動テストによって実装される)のしやすさだけでなく、テストの網羅性も含まれる。
デプロイ性(Deployability)
デプロイ頻度やデプロイに伴う全体的なリスクも含まれる。
スケーラビリティ(Scalability)
時間の経過とともにユーザー負荷が徐々に増加しても、システムが応答性を維持できる能力。
弾力性(Elasticity)
サービスの平均起動時間(Mean Time To Startup:MTTS)の短さに依存。
可用性・耐障害性
アーキテクチャのモジュール化の観点から、耐障害性を「システムの他の部分が故障しても、他の部分は応答性と可用性を維持する能力」と定義。
4章 アーキテクチャの分解
コンポーネントベース分解
→リファクタリングパターンを適用してコンポーネントを洗練させた上で抽出し、インクリメンタルかつ制御的に分散アーキテクチャを形成するアプローチ
戦術的フォーク
→アプリケーションのレプリカを作成し、まるで花崗岩や大理石の塊から美しい芸術作品を生み出す彫刻家のように、不要な部分を削り取ってサービスを形成するアプローチ
巨大な泥団子(Big Ball of Mud)アンチパターン
https://en.wikipedia.org/wiki/Anti-pattern#Software_engineering_anti-patterns