リトライが過大なアクセスを産まないための工夫
分散システムにおいて、何かしらが失敗したときにリトライする際、すぐさまリトライしていると使っている資源に過大なアクセスが来てしまい死ぬことがある。 様々なプロセスが同時にリトライを繰り返すと、処理が詰まる。
このため、各々のプロセスのリトライタイミングがなるべく被らないようにする工夫をする。
リトライまでの待ち時間を冪で増やしていく。
適度に上限も設けておく(リトライ自体の失敗)。
待ち時間にごく短い時間をランダムで足す。
Exponential backoffしてもリトライ原因が単一ならリトライタイミングが被ってしまうので。
障害時にたくさんのリトライが溜まってしまう問題もある。
全体に占めるリトライ率が一定を超えたらリトライを一旦止める。
同時に行えるリトライ数の上限を決める。Quotaを定める。