第20章: グレースフルデグラデーション
需要がキャパシティを超えた場合、システムには2つの選択肢があります:完全に障害するか、グレースフルに劣化するかです。グレースフルデグラデーションとは、すべてのユーザーにエラーを返すのではなく、機能を減少させながらサービスを継続することを意味します。遅いウェブサイトと到達不能なウェブサイトの違いです。
デグラデーション戦略にはロードシェディング(残りを保護するためにリクエストの一部を拒否する)、機能削減(リソース消費を減少させるために高コストの機能を無効にする)、優先キューイング(高優先度リクエストを低優先度リクエストより先に処理する)が含まれます。各戦略は継続的な可用性のために一部の機能をトレードオフします。
私たちのシステムでは、キャッシングサービスがストレージサービスの自然なデグラデーションパスを提供します。ストレージサービスが過負荷になった場合、キャッシングサービスはリクエストを完全に失敗させるのではなく、古いデータを提供できます。ルーティングサービスは過負荷のバックエンドへのトラフィック送信を停止し、より健全なインスタンスに負荷を分散できます。
デグラデーションはテストする必要があります。一度も実行されたことのないデグラデーション戦略は、機能しないデグラデーション戦略です。カオスエンジニアリング——本番環境で意図的に障害を注入する実践——は、デグラデーションメカニズムが本当に必要になる前に設計通りに機能することを検証する実践です。