Sto implementando il mio primo codice di sincronizzazione. Nel mio caso avrò 2 tipi di client iOS per utente che sincronizzeranno i record su un server usando un lastSyncTimestamp
, un numero intero a 64 bit che rappresenta l'epoca Unix in millisecondi dell'ultima sincronizzazione. I record possono essere creati sul server o sui client in qualsiasi momento e i record vengono scambiati come JSON su HTTP.Quali sono le insidie più comuni della sincronizzazione basata sul timestamp?
Non sono preoccupato per i conflitti poiché ci sono pochi aggiornamenti e sempre dallo stesso utente. Tuttavia, mi chiedo se ci siano cose comuni di cui ho bisogno di essere consapevole che possono andare storto con un approccio basato sul timestamp come la sincronizzazione durante l'ora legale, la sincronizzazione con altri o con altri trucchi.
So che git e qualche altro sistema di controllo della versione evitano la sincronizzazione con i timestamp per un approccio di sincronizzazione della negoziazione basato sul contenuto. Potrei immaginare un approccio simile anche per le mie app, dove usando lo uuid
o lo hash
degli oggetti, entrambi i peer annunciano quali oggetti possiedono e quindi li scambiano fino a quando entrambi i peer hanno gli stessi set.
Se qualcuno conosce vantaggi o svantaggi della sincronizzazione basata sul contenuto rispetto alla sincronizzazione basata sul timestamp in generale, sarebbe altrettanto utile.
Modifica - Ecco alcuni dei vantaggi/svantaggi che ho trovato per il timestamp e la sincronizzazione basata sul contenuto. Si prega di contestare/correggere.
Nota - Io sono la definizione dei contenuti a base di sincronizzazione semplice negoziazione di 2 set di oggetti come ad esempio la 2 bambini si scambiavano le carte, se ha dato loro ogni parti di un mucchio jumbled da 2 serie identiche di carte di baseball e ha detto loro che mentre li guardano per annunciare e consegnare qualsiasi duplicato trovato all'altro finché non hanno entrambi set identici.
- Johnny - "Ho preso questa carta".
- Davey - "Ho preso questo mazzo di carte, dammi quella carta".
- Johnny - "Ecco la tua carta, dammi quel mazzo di carte."
- Davey - "Ecco il tuo mazzo di carte."
- ....
- Entrambi - "abbiamo finito"
Vantaggi di timestamp a base di sincronizzazione
- Facile da implementare
- immobili singolo utilizzato per la sincronizzazione.
Svantaggi di timestamp a base di sincronizzazione
- Il tempo è un concetto relativo all'osservatore e gli orologi della macchina differente può essere fuori sincrono. Ci sono un paio di modi per risolvere questo. Genera timestamp su una singola macchina, che non scala bene e rappresenta un singolo punto di errore. O usare orologi logici come orologi vettoriali. Per lo sviluppatore medio che costruisce il proprio sistema, gli orologi vettoriali potrebbero essere troppo complessi da implementare.
- La sincronizzazione basata sul timestamp funziona per sincronizzare il client ma non funziona anche per la sincronizzazione peer-to-peer o laddove la sincronizzazione può avvenire con 2 master.
- Singolo punto di errore, qualsiasi cosa generi il timestamp.
- Il tempo non è realmente correlato al contenuto di ciò che viene sincronizzato.
Vantaggi di contenuti basati su sincronizzazione
- No al pari timestamp deve essere mantenuto. 2 peer possono avviare una sessione di sincronizzazione e avviare la sincronizzazione in base al contenuto.
- Endpoint ben definito da sincronizzare - quando entrambe le parti hanno set identici.
- Consente un'architettura peer-to-peer, in cui qualsiasi peer può agire come client o server, a condizione che possano ospitare un server HTTP.
- La sincronizzazione funziona con il contenuto degli insiemi, non con un tempo di concetto astratto.
- Poiché la sincronizzazione è basata sul contenuto, è possibile utilizzare la sincronizzazione per eseguire la verifica del contenuto, se lo si desidera. Per esempio. un hash SHA-1 può essere calcolato sul contenuto e utilizzato come uuid. Può essere paragonato a ciò che viene inviato durante la sincronizzazione.
- Inoltre, gli hash SHA-1 possono essere basati su hash precedenti per mantenere una cronologia coerente del contenuto.
Svantaggi di contenuti basati su sincronizzazione
- proprietà extra sul tuo oggetti possono essere necessarie da implementare.
- Più logica su entrambi i lati rispetto alla sincronizzazione basata sul timestamp.
- Un protocollo leggermente più chatty (questo potrebbe essere ottimizzato sincronizzando il contenuto nei cluster).
Buon punto. Gotcha # 1, usa sempre una macchina per calcolare i timestamp. Non avevo considerato questo, ma probabilmente dovrei sempre produrre l'ultimo SyncTimestamp sul server. –