生き死にを見る
応答しない台へ配らない
振り分けは、生きている台へ配らなければ意味がありません。
そこで、一定の間隔で各台へ生きているかを聞きます。応答しなければ配り先から外します。
外された台は、応答が戻れば配り先へ戻します。
1回で外すと外れすぎます。
ネットワークは時々詰まります。1回の失敗で外していると、正常な台が次々と外れ、残った台に負荷が集まって本当に落ちます。
だから、何回続けて失敗したら外すかを決めます。
戻すほうは慎重にする
外す回数と戻す回数は、別の数字にします。
戻すほうを厳しくするのは、半分死んでいる台を戻さないためです。1回応答しただけで戻すと、外れて戻ってを繰り返します。
Python
# 2回続けて失敗したら外す
# 2回続けて成功したら戻す配り先が毎秒変わると、利用者の接続が切れ続けます。
落ちている台が1台ある状態より、配り先が安定しない状態のほうが悪いことがあります。連続で数えるのは、揺れをそのまま配り先に伝えないためです。
演習
台の一覧と生存確認の結果から、いま配ってよい台と外れている台を返します。
要件
- はじめは全部の台が配り先に入っている。確認が失敗したら連続失敗を1増やし、連続成功を0に戻す
- 配り先に入っている台で連続失敗が fail_threshold に達したら外す。外れている台で連続成功が pass_threshold に達したら戻す
- pool と out には servers と同じ並びで名前を入れる。servers に無い台の確認は読み飛ばす
ヒント
編集 ゆめさく編集部