# プロセスペア
## 定義
プロセスペア(process-pair)とは、主プロセスとバックアッププロセスの対を構成し、主プロセスの障害時にバックアップが処理を引き継ぐことで耐障害実行を実現するソフトウェア設計パターンである。[[Jim Gray]] は [[@1985__Tandem__Why Do Computers Stop and What Can Be Done About It]] において 5 つの類型を体系的に比較した:
1. **ロックステップ**: 主とバックアップが同一命令列を同期実行する。ハードウェア障害には対応するが、[[Heisenbug]] を許容しない(同一バグを同期実行するため)。
2. **状態チェックポイント**: 主プロセスが各主要イベント前にバックアップへ状態変更と応答メッセージを送信する。耐障害性は優れるがプログラミングが困難。
3. **自動チェックポイント**: カーネルが自動的にプロセス間のメッセージを保存・再生する。プログラマの負担は軽いが転送データ量が多い。
4. **デルタチェックポイント**: 物理的ではなく論理的な更新をバックアップに送信する。性能は良好(メッセージトラフィックを半減、バイト数を 1/3)だがプログラミングが困難。
5. **永続(persistent)プロセスペア**: 主プロセスの障害時にバックアップが初期状態(健忘状態)で起動する。最も単純で低オーバーヘッドだが、障害時にデータベースやデバイスが不整合状態になる。
Gray はトランザクション機構と永続プロセスペアの組合せが最も実用的であると結論づけた。トランザクションの UNDO 機能が未完了トランザクションを巻き戻してデータベースを整合状態に戻し、入力メッセージからトランザクションを再開する。これにより、プログラマはフェイルファストモジュールを通常言語で書くだけでよい。(Source: [[@1985__Tandem__Why Do Computers Stop and What Can Be Done About It]])
## 横断的知見
(本概念について複数ソースの突き合わせによる知見は、2 ソース目以降の ingest で蓄積する。)
## 未解決の問い
- 永続プロセスペア + トランザクションのパターンは、現代の分散システムにおけるステートレスマイクロサービス + 外部状態ストアのパターンと構造的にどう対応するか。
- LLM 訓練における warm standby/hot-update([[@2025__SOSP__Robust LLM Training Infrastructure at ByteDance]] の ByteRobust)は、Gray の 5 類型のどれに最も近いか。チェックポイント + 予備機の組合せはデルタチェックポイント型プロセスペアの現代的変形と見なせるか。
- Gray が棄却したロックステップ方式は、決定的再実行に基づくレプリケーション(例: deterministic replay)として復活しているか。非決定的ワークロードでの適用可能性はどうか。
- プロセスペアの概念は 2 重冗長に限定されるが、Gray 自身「プロセス三重は改善しない」と述べている(システムの他の部分の MTBF が桁違いに劣るため)。現代の大規模クラスタで冗長度 N を 2 以上に取る設計(データ並列の複製冗長など)との関係はどうか。
## 関連
- [[ソフトウェア耐障害性]] — プロセスペアが支える上位概念
- [[Heisenbug]] — プロセスペアが許容する障害類型
- [[チェックポイント]] — 状態保存方式としての関連(チェックポイント型プロセスペア)
- [[耐障害LLM訓練]] — 現代の大規模訓練における冗長実行と復旧パターン
## 出典
- [[@1985__Tandem__Why Do Computers Stop and What Can Be Done About It]]