著者/所属機関
Haicheng Chen (The Ohio State University, United States) et al.
出典
ASE 2020 (http://www.tcse.cn/~wsdou/papers/2020-ase-cofi.pdf)
目的
- クラウド上で動作する分散システムへのネットワーク分断障害挿入の自動化
問題
- 既存のネットワーク障害を起こすツールでは、障害の開始と終了をユーザが指定する必要があるが、不具合が顕在化するよう特定のタイミングをユーザが指定することは困難
解法
- ネットワーク分断の開始を終了を自動で試行する障害挿入技術の提案
- 分散システムでのある実行時点にて、各ノードが持つ状態の一貫性を定義し、その一貫性が崩れた時点でネットワーク分断を自動挿入
- これにより、一貫性のないまま回復できない状態でのテストができる
- 通常(=ネットワーク分断しない)だとシステムの機能ですぐに一貫性ある状態に戻ってしまう
- また終了タイミングは、あらゆるメッセージで試さず、メッセージを分類して、分類したクラスごとに終了を試す
- 分類は、メッセージについての下記の四つ組が同じ場合に同じ種類とみなす
- メッセージを呼んだときのコールスタック
- 送信元ノード
- 送信先ノード
- システム状態=監視している変数の値
- 分類は、メッセージについての下記の四つ組が同じ場合に同じ種類とみなす
- 分散システムでのある実行時点にて、各ノードが持つ状態の一貫性を定義し、その一貫性が崩れた時点でネットワーク分断を自動挿入
- ここでの一貫性=特定のプログラムポイントにいるときに、各ノードで持っている変数が想定した状態になっていること (distributed program invariants)
- 例えばある時点で、ノードC2とC3が、ノードC1について同じ情報を持っている、とか
結果
- Cassandra, HDFS, YARNに適用し、4個の既知バグを12個の未知バグを見つけた
- 16個のうち10個は、ネットワーク分断の開始・停止のタイミングを適切に設定しないと見つけられないものだった
- 上記を見つけるためのツール実行は585時間ぐらい
- この際、33のfalse positiveがあった
- ランダムに開始・停止を決める手法であっても、12個の未知バグのうち6個は再現できた
その他
- 2017年のAWS障害は、S&P500の企業に1億5000万ドルの損失を出した
- ネットワーク分断は週1回ぐらいは起こるもの
- A. Alquraan et al. An analysis of network-partitioning failures in cloud systems. OSDI 2018. など
Tagged: #fault_injection