9章障害検出
誰も聞く人がいない森の中で倒れた木は、音をたてるでしょうか。
――著者不明
システムにおいて障害に適切に対応するには、タイムリーに障害を検出する必要があります。障害が発生したプロセスにアクセスすると、たとえそれが応答できないとしても、レイテンシを増大させ、システム全体の可用性を低下させる可能性があります。
非同期の分散システムで、つまりタイミングの前提がまったくないシステムで障害を検出するのは、極めて困難です。それは、プロセスがクラッシュしたのか、それとも実行速度が遅くて応答に限りないほど長い時間がかかっているのかを区別できないからです。この点に関する問題については、「8.5 FLPの不可能性」で議論しました。
ステップの実行を完全に停止したプロセスについて説明する際には、通常、「動作停止」、「障害が発生した」、「クラッシュした」などの用語が使用されます。また、実行状態が疑わしいプロセスの説明には、「応答なし」、「故障」、「動作が遅い」などの用語が使用されます。ただし、これらのプロセスは、実際には動作停止(dead)となっていることもあります。
障害は、リンクレベル(プロセス間のメッセージが失われたり、その配信が遅かったりする場合)、またはプロセスレベル(プロセスがクラッシュしたり、その実行が遅かったりする場合)で発生し、遅れと障害は、いつでも区別できるというわけではありません。このことは、正常に動作しているプロセスを、停止しているであろうと誤って推測する(偽陽性⦅false-positive⦆を生む)ことと、応答がないプロセスに、動作を停止しているというマークを付けるのが遅れて、疑わしきは罰せず形式に考え、最終的には応答するであろうと期待する(偽陰性⦅false-negative⦆ ...
Get 詳説 データベース ―ストレージエンジンと分散データシステムの仕組み now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.