# アーキテクチャスタイル
## 定義
アーキテクチャスタイルとは、さまざまなアーキテクチャ特性をカバーする、コンポーネント同士の名付けられた関係の型を指す。デザインパターンと同様に定まった名前を持ち、その名前がアーキテクト間の表現法として機能する。名前が伝えるのは、構造の側面、サポートされる(あるいはされない)アーキテクチャ特性、典型的なデプロイメントモデル、データ戦略など豊富な詳細である。アーキテクチャスタイルは大きくモノリシック(すべてのコードが単一のデプロイメントユニットで構成される)と分散型(リモートアクセスプロトコルを介して接続された複数のデプロイメントユニットで構成される)の 2 種類に分類できる。完璧な分類法ではないが、分散アーキテクチャはモノリシックにはない共通の課題を共有するため、この分類でスタイルをうまく分離できる。分散アーキテクチャに固有の代償は「分散コンピューティングの誤信」と呼ばれる、信じられているが真実ではない 8 つの思い込み(ネットワークが信頼できる、レイテンシーがゼロ、帯域幅が無限、ネットワークが安全、トポロジーが変化しない、管理者は一人だけ、転送コストがゼロ、ネットワークが均一)に要約される(Source: [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 9 基礎]])。
## 未解決の問い
- 各アーキテクチャスタイル(レイヤード・パイプライン・マイクロカーネル・サービスベース・イベント駆動・スペースベース・サービス指向・マイクロサービス)固有のトポロジーとトレードオフはどう整理されるか。
- 分散コンピューティングの 8 つの誤信は、個別のアーキテクチャスタイル(特にマイクロサービスのような高度に分散されたスタイル)ごとにどう影響の度合いが異なるか。
- 「適切なアーキテクチャスタイルを選ぶ」ための判断基準は何か。
- 各スタイル章の星評価表が示す優先順位づけと、第18章のシリコンサンドイッチ/GGG のような具体的ケーススタディでの選択は、どこまで一対一に対応するか。星評価表だけでは説明できない選択理由(組織的要因や外部要因など)はどの程度あるか。
## 未編纂の観察
- **本書はスタイル選択を「モノリスか分散か」「データをどこに置くか」「通信を同期にするか非同期にするか」という決定の連鎖として提示する**: 第9章がモノリシック対分散という静的な分類軸を定義するのに対し、第18章はこの分類を出発点に、アーキテクチャクォンタムの概念を用いて単一のアーキテクチャ特性セットで足りるか(モノリス向き)複数のまとまりが要るか(分散向き)を判断し、次いでデータの保持責任とデータフローを決め、最後にサービス間通信を同期型か非同期型かで決める、という順序立った決定手続きへ具体化する。標準では同期通信を選び必要な場合のみ非同期通信を用いるべきだという明確な既定値も示される。(Source: [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 18 適切なアーキテクチャスタイルを選ぶ]] §18.2, [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 9 基礎]])
- **アーキテクチャのトレンドは時代とともに移り変わり、同じ問題に対する「正解」も変わる**: 第18章は好ましいアーキテクチャスタイルが変化する要因として、過去からの観察・エコシステムの変化・新しい能力・変化の加速・ドメインの変化・技術の変化・外部要因の 7 つを挙げる。第9章がモノリシック/分散という分類とスタイルの名前をアーキテクト間の安定した表現法として提示するのに対し、第18章はその分類自体が固定的な正解ではなく、コンテナ技術や Kubernetes のような新しい能力の登場によって時代ごとに相対化されることを示す。(Source: [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 18 適切なアーキテクチャスタイルを選ぶ]] §18.1, [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 9 基礎]])
- **個別スタイル章が共通して用いる「アーキテクチャ特性の評価」(星評価表)は、スタイル選択を特性の優先順位づけ問題へ還元する装置である**: レイヤードアーキテクチャ(§10.6)・マイクロカーネルアーキテクチャ(§12.5)・イベント駆動アーキテクチャ(§14.11)・スペースベースアーキテクチャ(§15.7)・マイクロサービスアーキテクチャ(§17.9)は、いずれも章末に同一書式の星評価表を置き、1 つ星をそのスタイルが特性を十分サポートしない印、5 つ星を最も強い特徴の印とする。この共通装置は、第18章が判断基準として挙げる「構造に影響を与えるアーキテクチャ特性」の発見・解明という作業を、章ごとに独立した表としてあらかじめ可視化したものであり、第18章のスタイル選択はつまるところ、この星評価表群のうちどの特性の組を最優先するかという優先順位づけ問題に帰着する。(Source: [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 18 適切なアーキテクチャスタイルを選ぶ]] §18.2, [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 10 レイヤードアーキテクチャ]], [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 12 マイクロカーネルアーキテクチャ]], [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 14 イベント駆動アーキテクチャ]], [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 15 スペースベースアーキテクチャ]], [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 17 マイクロサービスアーキテクチャ]])
## 関連
- 実体: [[マイクロサービスアーキテクチャ]]
- ソース: [[@2022__OReillyJapan__ソフトウェアアーキテクチャの基礎 - Chapter 9 基礎]]
## 出典
- Mark Richards, Neal Ford 著, 島田浩二 訳, *ソフトウェアアーキテクチャの基礎*, オライリー・ジャパン, 2022, 第 9 章.