耐故障処理 Fault Tolerance 「分散計算の基礎」 12章 発表者 : 高橋 慧 Distributed System Fault Tolerance 耐故障処理とは • コンピュータでは様々なエラーが発生 • プログラム自体のバグ • 外的要因によるプロセスの中断・停止 • ネットワークの障害 • これらのエラーを検知して • エラー処理を行い、終了する • 修復して処理を継続する Distributed System Fault Tolerance No. 2 発表の流れ • プロセス単位での耐故障処理 • 簡単なデモ • 並列システムでの耐故障処理 • Two Phase Commit Protocol • Voting Protocol • 送信エラーを考慮したbroadcast • Atomic Broadcast Distributed System Fault Tolerance No. 3 プロセス単位での耐故障処理 • プロセスの予期しない終了への対処 • ログによって復帰する • バックアップのプロセスが処理を引き継ぐ • 常に複数のプロセスが平行して処理を行う • 問題点 • 復帰しても再びエラーになった時は? →ログを資料にデバッグ • 何度も計算したとき、結果は一定なのか? →常に結果が同じになる処理のみを考える Distributed System Fault Tolerance No. 4 簡単なデモ 1) 一定間隔で値をファイルに記録 死んだらログを読んで処理継続 2) 親プロセスと子プロセスが存在 子が死んだら親が子を立ち上げる 3) 別プロセッサからpsの出力を監視 プロセスが死んだら、rshで立ち上げる Distributed System Fault Tolerance No. 5 並列システムでの耐故障処理 • 各プロセッサでデータの同期が必要 →同時刻に読むデータは同一(atomic) • Two Phase Commit • readは自由・writeに許可が必要 • 全員の同意を得てwrite (commit) • エラー処理を行い、処理中断 • Voting • read、writeとも許可が必要 • 半数以上の賛成が得られればwrite/readを許可 • エラー時でも、残ったプロセッサで処理継続 Distributed System Fault Tolerance No. 6 同期の必要性 • プロセッサ間でデータの同期が必要 (データの同期をatomicityと呼ぶ) • メッセージ消失によりatomicityを失った例 X=1 X=2 xのatomicityが 保たれていない X=1 (X=1) X=2に変更 X=1 変更の送信に失敗 X=2 X=2 変更を送信 Distributed System Fault Tolerance No. 7 Two Phase Commitの概要 • 前提 • 親プロセスが1つある • 通信路は信頼できない • 基本的なアイディア • • • • 処理の結果はcommitによって反映される abortすると結果は反映されない 全プロセスが同意した場合のみcommit commit / abortは一意 → atomicityの維持 Distributed System Fault Tolerance No. 8 Two Phase Commitの操作 • 子プロセッサが親にcommitを要求 • 親は全ての子にcommit_requestを送信 • 子はcommit_requestを受信したら、 • (エラー時)abortを送信 • (正常時) ログを取り、agreeを返信し、ブロック • 親は子からの返信をある時間待って • (一つでもagreeしない時) agreeしたプロセスにabortを送信 • (全員がagreeした時) commitを送信し、commit操作 • agreeを送信した子は、親からのメッセージによって • (abortを受信) ログにより復帰し、ブロック解除 • (commitを受信) 待機し、commitに必要な処理のみ行う • 親はcommitが完了したら、completeを送信 • 子はcompeteを受信したら、ブロック解除 Distributed System Fault Tolerance No. 9 Two Phase Commitの例 (1) • Commitが行われる例 Commitの例 X=2に更新 X=1 受信を確認 X=2を送信 Commit操作開始 Commit完了 X=2 commit agree commit request agree X=1 X=2に更新 complete X=2 block解除 X=2に変更を要求 ログを取ってblock X=1 X=2に更新 X=2 ログを取ってblock Distributed System Fault Tolerance block解除 No. 10 Two Phase Commitの例 (2) • abortされる例 • 水色がcommit_requestに返信しない場合 timeout Abortを決定 Abortを送信 X=1 X=2に変更を要求 (X=1) commit agree request abort X=1 (X=1) No reply ログを取ってblock block解除 ログから復帰 X=1 メッセージを返信できない Distributed System Fault Tolerance No. 11 Two Phase Commitの特徴 • 処理時間は一番遅いプロセッサに依存 • commit中に親がエラーを起こした場合、全 プロセスがブロックしてしまう • prepare stateを設けたcommit protocol →ますます遅くなる • 通信が高速で、頻繁には失敗しないシステ ムで、処理の確実性を保つのに有用 Distributed System Fault Tolerance No. 12 Votingの概要 • 前提 • プロセッサに親子の区別はない • 通信路は信頼できない • 基本的なアイディア • 各プロセッサはデータのコピーを持つ • 読み書きするにはvoteをする必要がある • quorum(定足数)を満たすと権利を得られる Distributed System Fault Tolerance No. 13 Votingの操作 (準備) • 各プロセッサがデータのコピーを持っている • データの更新回数(version) も付随している • 各プロセッサは、アクセスモードを記憶している • write mode (一人だけread/writeアクセス) • read mode (全員read onlyアクセス) • noaccess mode (全員アクセス不可) • vote結果待ち mode • voteによりデータアクセスのモードを切り替える • 各プロセッサはvoteのための票数(votes)を持つ Distributed System Fault Tolerance No. 14 Votingの操作 • r/w したいプロセッサ(幹事)がvote_requestを送信 • 各プロセッサは自分のmodeに応じてvote • (noaccess) 自分のvotesとversionを返信、結果待ち • (それ以外) 反対を返信 • 幹事は最新のversionを持つ賛成票を集計し、 • quorumを満たせば、read modeに入ることを送信 • 満たさなければ、vote失敗を送信 • 幹事は自分のデータが古い場合、最新のものを入手 • writeの場合は変更したデータを送信 • 各プロセッサはデータとversionを変更 • 操作が終わったら、noaccessモードに戻る Distributed System Fault Tolerance No. 15 Votingの例 quorum = 3、votesは全プロセッサで1とする [成立] [失敗] [1] request ver.3 [1] request ver.3 [2] agree agree ver.2 ver.2 [3] agree ver.3 賛成: 1,3,4 無効: 2 反対: 5 Distributed System Fault Tolerance [5] disagree ver.2 [4] agree ver.3 [2] agree agree ver.2 ver.2 [3] agree ver.3 [5] disagree ver.2 [4] network failure 賛成: 1,3,4 無効: 2, 4 反対: 5 No. 16 quorumの設定 read_quorum=r, write_quorum=w, ∑votes=vとする。 • 同時に二つのwriteが起こらない →w > v/2 • writeとreadは並存しない →r + w > v • writeが頻繁に発生→wを小さく • writeがあまり起こらない→wを大きく • w=vなら、two phase commitと同じ Distributed System Fault Tolerance No. 17 votesの設定 • 信頼でき高速なプロセッサは票数を多く [1] 1msec votes=1 [2] 10msec votes=1 [1] 1msec votes=3 [2] 10msec votes=2 [3] 10msec votes=1 [4] 100msec votes=1 [3] 10msec votes=2 [4] 100msec votes=1 c=4, w=3 成立するのは {1,2,3} (10ms) {1,2,4} (100ms) {1,3,4} (100ms) {2,3,4} (100ms) {1,2,3,4} (100ms) Distributed System Fault Tolerance c=8, w=5 成立するのは {1,2} (10ms) {1,3} (10ms) {1,2,3} (10ms) {1,2,4} (100ms) {1,3,4} (100msec) {2,3,4} (100ms) {1,2,3,4} (100msec) No. 18 Votingの特徴 • 近いプロセッサだけで同意が成立 • voteの票数やquorum、さらにタイムアウトや賛 否の決め方を変更し、柔軟な運用ができる • さらに耐故障性を高く • Dynamic Vote • Quorum Reassignment • 不均質で信頼性の低いシステムで有効 Distributed System Fault Tolerance No. 19 atomic broadcastの概要 • 前提 • 任意の一プロセッサがbroadcastする • 全員の同期が必要 • メッセージが失われる可能性がある • 基本的なアイディア • メッセージの到着と順序の同一性を保障 • 到着したメッセージは一度バッファに入る • 全プロセッサでメッセージが到着したら受信 Distributed System Fault Tolerance No. 20 atomic broadcastの操作 • 送信者がメッセージをbroadcast。msgにはIDがある • 受信者はメッセージが到着したら以下の操作を行う • もしキューに同一IDのメッセージがあれば受信しない • 到着時のlamport clockをpriorityとして設定 • “undeliverable”マークを付け、キュー(priority付き)に入れる • 送信者は指定時間返信を待ち、 • 返信が来ないプロセッサに先と度同じIDを用いて再送信 • 全ての返信を受信したら、その中で最大のpriorityをbroadcast • 受信者はpriorityを受信したら • メッセージのpriorityを更新し、”deliverable”マークをつける • キューの先頭から”deliverable”なメッセージを順に受信する Distributed System Fault Tolerance No. 21 まとめ • 耐故障性には処理の冗長性が不可欠 • 完全な耐故障は存在しない • (伝令のパラドックス) →性能と耐故障性のトレードオフ • 耐故障プログラムを書くのは大変 →下層で信頼性を確保(TCPとIPの関係) Distributed System Fault Tolerance No. 22
© Copyright 2024 ExpyDoc