2

Google App Engine タスク プッシュ キューを使用して、スケジュールされた時間の秒単位の精度で実行したい将来のタスクをスケジュールしています。

通常、私は今から 30 秒後にシステムの状態の変更をトリガーするタスクをスケジュールし、最後に別の将来のタスクをスケジュールします。

私のローカル開発サーバーではすべて正常に動作します。

しかし、GAE サーバーにデプロイしたので、スケジュールされたタスクの実行が遅れていることに気付きました。スケジュールされてから 2 分後でも実行されているのを見てきました。

タスク キュー管理コンソールから、実際には ETA について次のように表示されます。

ETA: "2013/11/02 22:25:14 0:01:38 ago" 
Creation Time: "2013/11/02 22:24:44 0:02:08 ago"

これはなぜでしょうか?

ETA によってスケジュールされたタスクの期待値と精度に関するドキュメントは見つかりませんでした。

私は Python でプログラミングしていますが、これが違いを生むとは思えません。\

Python コードでは、eta パラメータは次のように文書化されています。

eta: A datetime.datetime specifying the absolute time at which the task
        should be executed. Must not be specified if 'countdown' is specified.
        This may be timezone-aware or timezone-naive. If None, defaults to now.

マイキュー設定:

queue:    
- name: mgmt
  rate: 30/s

30 秒ごとに実行する必要がある 5 つのタスクを除いて、システムにはまったく負荷がかかりません。

アップデート:

https://code.google.com/p/googleappengine/issues/detail?id=4901を見つけました。これは、タイムリー キューの受け入れられた機能リクエストですが、それについて何も行われていないようです。ETA を使用したタスクは、何分も遅れて実行される可能性があるという事実を受け入れます。

秒精度でトリガーをスケジュールするには、他にどのようなメカニズムを使用できますか?

4

2 に答える 2

1

GAE は、データ センター内およびデータ センター間のクロック同期について保証しません。Google App Engine で UTC 時間を表示しますか? 関連する議論のために。したがって、ターゲット時間の許容範囲内でタスクが実行されることを (異なる) 保証したとしても、絶対時間を正確に指定することさえできません。

この種の精度が本当に必要な場合は、信頼できる外部クロックと同期し、タスクのキューイングと実行サービスを提供する永続的な GAE「バックエンド」インスタンスをセットアップすることを検討できます。

(余談ですが、残念ながら、このアプローチでは単一障害点が発生するため、修正するには、次のステップに進み、これらのバックエンドのクラスター全体を構築することができます...しかし、その時点では、GAE 以外の方法を検討することもできます。 GAE の「自動送信」モデルから離れて、AWS の「手動送信」モデルに移行しています。)

于 2013-11-03T23:39:25.567 に答える
1

この問題を GAE チームに報告したところ、次のような回答がありました。

This appears to be an isolation issue. Short version: a high-traffic user is sharing underlying resources and crowding you out. 

Not a very satisfying response, I know. I've corrected this instance, but these things tend to revert over time. 

We have a project in the pipeline that will correct the underlying issue. Deployment is expected in January or February of 2014.

https://code.google.com/p/googleappengine/issues/detail?id=10228を参照してください

スレッドも参照してください: https://code.google.com/p/googleappengine/issues/detail?id=4901

彼らが「このインスタンスを修正」した後、私は数時間テストを行いました。特に ETA のないタスクでは、状況が少し改善されました。しかし、ETA を使用するタスクの場合、少なくとも半数が少なくとも 10 秒遅れて実行されていることがわかります。これは私の要件に対して信頼できるとは言えません

今のところ、GAE チームが「根本的な問題を修正」し、より予測可能なタスク スケジューリング システムを用意するまで、別のホストで独自のスケジューリング サービスを使用することにしました。

于 2013-11-05T10:53:18.563 に答える