2013-08-16 11 views
5

Ho appena incontrato il seguente paragrafo nella AppEngine documentation for Query Cursors:Google AppEngine istanza del server di sincronizzazione dell'orologio

Un'applicazione interessante dei cursori è quello di monitorare enti per cambiamenti invisibili. Se l'app imposta una proprietà timestamp con la data e l'ora correnti ogni volta che un'entità cambia, l'app può utilizzare una query ordinata in base alla proprietà timestamp, crescente, con un cursore Datastore per verificare quando le entità vengono spostate alla fine di la lista dei risultati. Se viene aggiornato un timestamp dell'entità , la query con il cursore restituisce l'entità aggiornata . Se nessuna entità è stata aggiornata dall'ultima volta che è stata eseguita la query , non viene restituito alcun risultato e il cursore non si sposta su .

Affinché funzioni in modo affidabile, ci dovrebbe essere una sorta di garanzia sulla sincronizzazione dell'orologio tra diverse istanze del server. In caso contrario, si potrebbe ottenere il seguente scenario:

  1. esempio Server 1 (orologio veloce) salva un aggiornamento con il time-stamp 1000.
  2. cliente chiede aggiornamenti e trova questo aggiornamento.
  3. L'istanza del server 2 (orologio lento) salva un altro aggiornamento con il timestamp 950.
  4. Il client richiede aggiornamenti e NON trova questo aggiornamento in quanto il time stamp non è aumentato.

Per quanto ho capito, non ci sono mai state garanzie di sincronizzazione dell'orologio. Questo è cambiato ???

Aggiornamento:

Ho appena realizzato che anche se gli orologi sono stati sincronia perfetta, questo approccio potrebbe perdere i risultati a causa della eventuale consistenza delle query. Se un aggiornamento successivo finisce per essere commesso prima di un aggiornamento precedente e lo inserisce in una query simultanea mentre quello precedente non lo fa, nasconderà l'aggiornamento precedente. O mi sta sfuggendo qualcosa?

+1

Non ho mai trovato una dichiarazione ufficiale sulla sincronizzazione dell'orologio. su IRC con google folk hanno detto che la roba è stata sincronizzata e credo che questo post di un utente di Google sia probabilmente una buona indicazione dello stato di avanzamento della https://groups.google.com/forum/#!searchin/google-appengine/orologio $ 20sync/google-appengine/XKLp5Uehhr8/MlsdgGwOB-wJ. Personalmente, nei primi tempi di Appengine ho visto gli skew di clock tra istanze> 30 secondi. L'ultima volta che ho controllato non sono riuscito a trovare alcuna inclinazione significativa ;-) –

+1

Questo è davvero solo un cattivo esempio dei documenti perché ci sono molti casi limite di cui preoccuparsi (come hai detto tu). Anche con sincronizzazione dell'orologio perfetta e consistenza forte, l'impostazione di un campo di timestamp su now() e quando qualcosa viene inviato al Datastore potrebbe essere ritardata. –

risposta

0

Gli unici documenti che ho trovato su orologio e Google Cloud Platform, sono here e here. In base allo first link post, le istanze vengono sincronizzate tramite il servizio NTP ed è fatta per te.

Problemi correlati