5

私はちょうどAppEngine documentation for Query Cursorsに次の段落に出くわしは:のGoogle AppEngineのサーバーインスタンスのクロック同期

カーソルの興味深いアプリケーションは 目に見えない変化のためのエンティティを監視することです。アプリがエンティティが変更されるたびに現在の の日付と時刻のタイムスタンププロパティを設定すると、アプリケーションはtimestampプロパティで昇順にソートされたクエリ をDatastoreカーソル で使用してエンティティが結果リスト エンティティのタイムスタンプが更新された場合、カーソルを含むクエリは 更新エンティティを返します。 クエリが最後に実行されてからエンティティが更新されなかった場合、結果は返されず、カーソルは に移動しません。

これを確実に動作させるには、異なるサーバーインスタンス間でのクロック同期について何らかの保証が必要です。

  1. Serverインスタンス1(高速クロック)1000
  2. クライアントが更新を要求し、このいずれかの更新を見つけたタイムスタンプ付きの更新プログラムを保存します。そうしないと、次のシナリオを得ることができます。
  3. サーバーインスタンス2(低速クロック)は、タイムスタンプ950で別の更新を保存します。
  4. クライアントは更新を求めますが、タイムスタンプが増えないため、この更新プログラムは見つかりません。

私が理解する限り、クロック同期の保証はありませんでした。これは変更しましたか?

更新:

私はちょうどクロックが完全にsync'edれた場合でも、このアプローチは、クエリの結果整合に起因する結果を逃す可能性があることに気づきました。後の更新が以前の更新よりも前にコミットされ、それが前の更新が実行されていない間に同時のクエリになると、以前の更新は非表示になります。または私は何かを逃していますか?

+1

クロック同期についての公式な声明はありませんでした。 Googleの人々と一緒にIRCで彼らはものが同期されていると言いましたが、私はそれはGoogleの男からのこの投稿はおそらく再生の状態の良い兆候ですhttps://groups.google.com/forum/#!searchin/google-appengine/clock $ 20sync/google-appengine/XKLp5Uehhr8/MlsdgGwOB-wJ。個人的には、私はappengineの初期の頃、30秒を超えるインスタンス間のクロックスキューを見てきました。前回私がチェックしたところ、重大なスキューは見つけられませんでした;-) –

+1

これは実際には悪い例がたくさんあるので(ドキュメントのように)、ドキュメントの悪い例です。完璧なクロック同期と強力な一貫性があっても、タイムスタンプフィールドをnow()に設定したり、何かがデータストアに送信されたときに遅延が生じる可能性があります。 –

答えて

0

クロックとGoogle Cloud Platformで見つかった唯一のドキュメントはherehereです。 first link postによれば、インスタンスはNTPサービスを使用して同期されています。

関連する問題