制御可能性中心設計(Controllability-Centered Design)シリーズ
- [2/22] 正常性バイアスに抗う設計
- [2/24] 安定性から制御可能性へ(本記事)
- [2/26] 外部API依存環境における自己修復型データ基盤の階層設計
...(全8回・完結)
本稿は、システムアーキテクチャの最優先基準を「制御可能性」と位置づけるための設計理論です。安定性を中心とする既存の設計を再定義し、本シリーズ全体を貫く設計基準を提示します。
1. 安定性中心設計の仮定と背景
システム構築において「安定性」は最優先の目標点として仮定されます。可用性の向上。障害予防。冗長化。設計の背後には、「コンポーネントは常に稼働し、正しい状態が維持されているはずだ」という正常性バイアスが暗黙の前提として組み込まれます。外部API、データベース、実行環境。これらの状態が期待通りに管理されているという仮定の上に、多くのアーキテクチャが構築されています。
2. 観測された不整合
外部システムは絶えず変動します。APIの仕様は変わり、データは欠損し、実行環境は不安定です。
これら制御外の「状態」はログを通じて観測可能です。それは過去の記録にすぎず、未来の動作を保証しません。稼働率を高めるための冗長構成やエラー検知機構を導入しても、外的要因による予測不能な状態変動が起きれば、システム全体が連鎖的に停止する事象が観測されます。
3. 仮定の破綻
安定性は「状態が維持される」前提に依存しています。正常性バイアスに基づくこの前提が崩れたとき、安定性中心の設計は致命的な脆弱さを露呈します。
未知のエラーやネットワーク遮断といった予測不可能な事態において、「状態維持」への過度な依存はシステムの復旧手段を結果的に奪います。状態維持という脆い基盤に立脚したアーキテクチャは、運用の長期的継続という観点において破綻します。
4. 制御可能性を最優先とする再定義
本設計は、安定性を否定しません。それを最優先の基準とはしません。
システムの最優先基準を「安定性」から「制御可能性」へと再定義します。障害を完全に防ぐことは不可能です。障害発生時に状態を完全に掌握し、確実に入力から回復できる構造を絶対的な設計上の価値とします。
制御可能性の定義
本稿における制御可能性とは、
障害や状態破損が発生した場合においても、
システムの挙動が予測可能であり、構造的に回収可能であることを指す。
安定性は結果である。
制御可能性は設計基準である。
本設計は、この制御可能性を最優先とする。
5. 制御可能なシステムの実装原理
制御可能なシステムは、以下の条件を満たす。
-
再実行可能であること
同一入力に対して同一結果が得られる。 -
再構成可能であること
状態が破損しても基底データから復元できる。 -
境界が明確であること
外部依存と内部処理が分離されている。 -
副作用が局所化されていること
障害が全体へ波及しない。
本シリーズの設計は、これらの条件を満たすことを目的としている。
| 観点 | 安定性中心 | 制御可能性中心 |
|---|---|---|
| 前提 | 状態の維持(正常性バイアス) | 状態の変動と破綻 |
| 障害 | 予防と回避 | 完全な掌握と回収 |
| 設計軸 | 可用性指標 | 再構成能力 |
| 重視 | 表面的な稼働率 | 確定的な再実行 |
6. 結果と帰結
障害とエラーは避けられません。それは自明の事実です。
システムの制御不能状態は避けられます。これもまた構造による事実です。
本シリーズの実装アプローチは、すべてこの「制御可能性」の基準に沿っています。
- 状態の初期化(Resetability):不整合が起きた際に、複雑な修復を試みるのではなく、システムを健全な初期状態へ安全に再構成する仕組み(具体的には、後述するSQLiteの物理的破棄と再構築など)を導入します。
- 不変条件の強制(Invariants):外部からの入力がどれほど不確かでも、整合性チェックという境界線を設けることで、異常なデータがシステム深部へ浸透するのを防ぎます(yfinanceから取得した財務データへの制約付与など)。
これらは一見、力技に見えるかもしれません。しかし、「いつ壊れるかわからない不安」を「壊れても制御下にある安心」へと変えるための、この思想の具体的な現れなのです
本設計の目的は、障害を排除することではありません。
障害を制御不能にしないことです。
安定性は結果として得られます。
制御可能性は構造として設計されます。
本稿が提示するのは、安定性の追求ではない。
制御可能性を最優先とする設計基準である。
※この『制御可能性』を具体的にどうシステムへ落とし込むか、不確実性を四つの階層で封じ込める『自己修復アーキテクチャ』の全貌を次回明かします(→ 外部API依存環境における自己修復型データ基盤の階層設計)。