Google App Engineタスクを複数回実行できるのはなぜですか?Google I / O2009のBrettSlatkinの話によると、サーバーに障害が発生していなくても、タスクが誤って2回実行される可能性があります。
これは、スレッドの誤ったウェイクアップと関係がありますか?
Google App Engineタスクを複数回実行できるのはなぜですか?Google I / O2009のBrettSlatkinの話によると、サーバーに障害が発生していなくても、タスクが誤って2回実行される可能性があります。
これは、スレッドの誤ったウェイクアップと関係がありますか?
Brant Slatkinは、I /02010で同様の講演を行いました。
彼がこれがいつどのように起こるのかについて詳細を述べたことはありません。彼のポイントは、タスクキューの動作方法により、設計上、タスクを再エンキューすることが可能であるということでした。このため、問題が発生した場合に問題が発生しないようにタスクを作成する必要があります。
たとえば、メールを送信してからデータストアのカウンターをインクリメントするタスクがあるとします。コードにバグがあった場合、またはデータストアがダウンした場合、電子メールは正常に送信されますが、データストアへの書き込みは失敗する可能性があります。例外を処理してコード内のデータストアからの失敗を処理しなかった場合、データストアへの書き込みに失敗すると、タスクは500のHTTPステータスコードを返します。タスクキューは、ステータスコードを返した場合にタスクを再エンキューするように設計されています>299。これにより、データストアへの書き込みが成功するまで、タスクが何度も実行されることになります。これは、誰かが多くの重複した電子メールを受け取ることを意味します。
「タスクが誤って2回実行される可能性があります。」という行は、App Engineがこれを防ぐことが保証されていないことを示すための方法であり、コードで確実に処理する必要があります。