# 永続性のマントラ
## 定義
永続性のマントラ(the durability mantra)とは、*Principles of Computer System Design* が提示する設計原則の1つで、「複数のコピーを、広く離して、独立に管理せよ(multiple copies, widely separated and independently administered)」という定式で表される。本書はこの原則を第10章 §10.3.1(永続ストレージの広域複製)の文脈で導入し、巻頭の設計原則一覧では「Durability: The durability mantra」として、原子性の黄金律・単一書き手の原則などと並ぶ特定領域向けの原則に分類している。(Source: [[@2009__MITOCW__Principles of Computer System Design - Chapter 10 Consistency]] §10.3.1)
## なぜ「広く離して・独立に管理」が要るのか
第8章[on-line]が示すミラーリング(同一物理サイト内での複製の同期書き込み)は個々のディスクの内部故障には有効だが、次の2つの脅威に無力である。(1) アプリケーションや OS がデータを壊してから書けば、全レプリカが同じ損傷を負う。(2) 複製が同一の物理的立地・同一の管理下にあると、火災や地震のような環境障害、あるいは管理上の失策(administrative bungling)に対して独立性を持たない。永続性のマントラは、複製を地理的に分離し、かつ管理主体そのものも分離することで、これら2種類の相関障害への耐性を作り込む原則である。(Source: ch.10 §10.3.1)
本書はこの原則の系譜として、Ross Anderson の Eternity Service(サイドバー4.5[on-line]、本 wiki では Part I 未取り込みのため詳細未確認)と、「lots of copies keep stuff safe」という別の定式化(LOCKSS の標語としても知られる)を挙げる。さらに古い先例として、トマス・ジェファーソンが1791年の書簡で史料保存について「金庫や錠前ではなく、コピーの多重化によって偶然の届かない場所へ置く」と述べた一節を引用しており、原則そのものは計算機以前から存在する着想であることを示す。(Source: ch.10 §10.3.1)
## 実現手段としての複製ステートマシンとクォーラム
永続性のマントラを実際に満たすには、地理的に分離した複製の間でデータをどう同期させるかという実装上の問題が残る。第10章はこれを[[複製ステートマシン]](全レプリカに同一入力を同一順序で与える体系的手法)と、より控えめなマスタ/スレーブ複製という2つの手段のスペクトラムとして提示し、読み出しの可用性調整には[[クォーラムベースレプリケーション]]が扱う Qr/Qw クォーラムの考え方を導入する。永続性のマントラは「なぜ複製を分離するか」という設計原則であり、複製ステートマシンやクォーラムは「分離した複製をどう一貫させ、どう読み書きするか」という実装手段にあたる。(Source: ch.10 §10.3.1, §10.3.2, §10.3.5)
## 横断的知見
- (今後、他ソースとの突き合わせで蓄積する。現時点では単一ソースのみ。)
## 未解決の問い
- 「独立に管理する(independently administered)」という要件は、クラウド環境でのマルチリージョン・マルチアカウント構成でどこまで具体化できるか。単一クラウドベンダー内での複数リージョン配置は、本原則が要求する管理上の独立性を満たすと言えるか。
- [[データ耐久性]]ページが扱う SRE 文脈の耐久性設計(クォーラム合意プロトコルの論理的密結合リスクなど)と、本原則が想定する物理的・管理的分離は、どこまで同じ問題として統合的に扱えるか。
## 関連
- ソース: [[@2009__MITOCW__Principles of Computer System Design - Chapter 10 Consistency]](原則の定式化・由来・実現手段としての複製ステートマシン/クォーラムとの関係)
- 概念: [[複製ステートマシン]](原則を満たす体系的な複製手段) / [[クォーラムベースレプリケーション]](読み出し可用性の調整手段) / [[データ耐久性]](耐久性設計の隣接領域)
- 実体: [[Principles of Computer System Design]](原則の出典書籍)
## 出典
- Jerome H. Saltzer and M. Frans Kaashoek, *Principles of Computer System Design: An Introduction*, Version 5.0, 2009, Chapter 10, §10.3.1 "Durable Storage and the Durability Mantra". MIT OpenCourseWare, CC BY-NC-SA 3.0 US.