公式ドキュメントを読んでもあんまりピンとこなかったので実際に動かしてみて感覚をつかむ
適当な関数を用意してcreate-http-task
でタスクを生成しCloudTasksのログから再実行の間隔を見る
再試行設定
CloudTasksでは指数関数的に再試行間隔が増加していくが細かい調整の設定を行うことができる
ドキュメントからたどっていくとAPIリファレンスにたどり着く
REST Resource: projects.locations.queues | Cloud Tasks のドキュメント
更にその中でどういう意味かみたいな話はこちらへどうぞとAppEngineのqueue.yaml
のリトライ設定の箇所に飛ばされる
queue.yaml リファレンス | Python 2 の App Engine スタンダード環境 | Google Cloud
こんな感じかな
項目 | 値 |
---|---|
maxAttempts | 最大施行回数 |
maxRetryDuration | 初回実行からの最大間隔 |
minBackoff | 最小の施行間隔 |
maxBackoff | 最大の施行間隔 |
maxDoublings | 何回まで指数関数的に再試行間隔を伸ばしていくか |
実際に試してみる
項目 | 値 |
---|---|
maxAttempts | 10 |
maxRetryDuration | |
minBackoff | 10 |
maxBackoff | 10240 |
maxDoublings | 4 |
- 再試行間隔と施行間隔の増加分
10.0 20.0 40.0 81.0 160.0 320.0 + 160 480.0 + 160 640.0 + 160 800.0 + 160
試行間隔は5回(maxDoublings)までは倍々、それ移行は以前の差分を足していくように増えていく
項目 | 値 |
---|---|
maxAttempts | 10 |
maxRetryDuration | |
minBackoff | 10 |
maxBackoff | 10240 |
maxDoublings | 3 |
- 再試行間隔と施行間隔の増加分
11.0 20.0 40.0 80.0 160.0 + 80 240.0 + 80 321.0 + 80 400.0 + 80 480.0 + 80
試行間隔は3回(maxDoublings)までは倍々、それ移行は以前の差分を足していくように増えていく
項目 | 値 |
---|---|
maxAttempts | 10 |
maxRetryDuration | |
minBackoff | 10 |
maxBackoff | 50 |
maxDoublings | 3 |
- 再試行間隔
10.0 21.0 40.0 50.0 50.0 50.0 50.0 50.0 50.0
maxBackoff
が50なので50以上は施行間隔が増えない
maxRetryDurationとmaxAttemptsどちらが優先されるのか
maxAttempts
とmaxRetryDuration
両方の設定が満たされるまで再試行が続く
とあったので試してみる
項目 | 値 |
---|---|
maxAttempts | 10 |
maxRetryDuration | 200 |
minBackoff | 10 |
maxBackoff | 50 |
maxDoublings | 3 |
- 再試行間隔と総待機時間
10.0 10 20.0 30 40.0 70 50.0 120 50.0 170 50.0 220 50.0 270 50.0 320 50.0 370
先にmaxRetryDuration
の設定値を超えてしまったがmaxAttempts
が10なので10回施行されるまでは再試行が続く
項目 | 値 |
---|---|
maxAttempts | 3 |
maxRetryDuration | 200 |
minBackoff | 10 |
maxBackoff | 50 |
maxDoublings | 3 |
- 再試行間隔と総待機時間
10.0 10 20.0 30 40.0 70 50.0 120 50.0 170 50.0 220 この時点で超えたのでここで打ち止め
maxAttemps
が3なので先に閾値を超えるがmaxRetryDuration
が200なので総待機時間が200秒を超えるまでは再試行が続く
maxAttemptsとmaxRetryDurationは両方満たされるまで再実行されることが確認できた
所感
maxAttempts
は試行回数なので初回の施行も含まれるよう、なのでそれを踏まえて設定を書く必要がある
ドキュメント読んだだけだとあんまり良くわからなかったが試してみたらだいぶイメージが湧いた