Sincronizzazione con il sistema offline

9

Sto progettando un sistema dal quale sincronizzerò i dati aziendali dal dispositivo mobile (che ha un'applicazione incorporata) che genera dati e li invia al server. Ogni linea sincronizzata genera un registro aziendale specifico nel database.

Se ciò che sincronizzo genera dati con una data (entro i dati di sincronizzazione) inferiore all'ultima data di modifica dei dati aziendali, devo ignorarlo e aggiungere semplicemente il database di accesso. Una volta elaborati i dati caricati, i dati vengono recuperati dal database e scaricati nel dispositivo.

A causa di questo download subito dopo la scrittura, la sincronizzazione deve essere sincrona. È ancora possibile avere uno schema lettore / scrittore se qualcosa del genere vale la pena sostituire la mia soluzione esistente. La cosa più importante è essere in grado di scaricare dati aggiornati. I dati vengono recuperati nel loro insieme, al momento non è implementata alcuna diff (potrebbe venire in seguito ma non sarà un problema).

Potrei avere più sincronizzazioni sullo stesso oggetto business in esecuzione, è improbabile ma può succedere e preferisco essere in grado di gestirlo. La sincronizzazione dovrebbe durare alcuni secondi, ma non alcuni minuti, a meno che non si usi l'applicazione mobile incorporata senza resync per alcuni giorni.

Il volume dei dati sincronizzati non dovrebbe essere grande, né il processo di sincronizzazione.

Quindi finisco per usare un'esclusione reciproca sul mio metodo di sincronizzazione, più precisamente, sto usando Java e ho messo un sincronismo sul metodo di scrittura, non sull'intero processo di sincronizzazione per non bloccare la sincronizzazione di sola lettura.

Vorrei sapere:

  1. Se questo modo ha senso? Fino a quando il volume e il tempo del processo di sincronizzazione sono ancora accettabili.
  2. In generale, quali concetti dovrei guardare. Bonus: se c'è una implementazione di questi concetti in un modulo Spring.
posta Walfrat 09.03.2016 - 15:30
fonte

2 risposte

1

Un approccio che ho indagato da un po 'ora (con un certo successo) per far sincronizzare i dati dei client con i dati del server, senza fare affidamento su date (che potrebbero essere inaffidabili) o richieste sincrone, è una combinazione di Patch JSON (forse POJO s nel tuo caso) e sourcing di eventi .

L'idea di base è che invece di memorizzare lo stato corrente sul client e sul server, il client e il server memorizzano un elenco di modifiche e si scambiano messaggi attraverso eventi o richieste di patch.

Quindi, anziché inviare al client tutti i dati più una data sul server, il client invia un evento, insieme a un numero di revisione che corrisponde all'ultima volta in cui il client ritiene che i dati siano aggiornati. Qualcosa del genere:

Server.send("MODIFY FOO", 3);

Una volta che il server riceve questo evento (in modo asincrono), lo riconcilia con altri eventi che potrebbe aver già ricevuto. Ad esempio, è possibile che un altro client che lavora con gli stessi dati abbia già modificato alcune cose, e ora il numero di revisione sul server è a 5. Quindi, questa revisione dovrà essere applicata prima che fossero applicati gli ultimi 2 e tutti i clienti dovranno essere informati di questo cambiamento.

Una volta terminato il server, notifica a tutti i client interessati le modifiche apportate e il nuovo numero di revisione corrente. Il client applica quindi queste modifiche e aggiorna il suo numero di revisione interno.

Il tuo chilometraggio può variare, ma spero che lo aiuti.

Modifica: Un altro nome per questo approccio, o una sua variazione, è chiamato accodamento dei messaggi , come menzionato in questo domanda correlata .

    
risposta data 09.03.2016 - 19:59
fonte
0

Il primo problema è usare le date come metodo per sincronizzare i dati. Sono sicuro che non ho ricevuto tutti i dettagli della tua soluzione, ma direi che:

  1. Le date sono generate sui cellulari? In questo caso, sei sicuro che l'app in esecuzione sui cellulari utilizzerà sempre le date corrette? Che dire di un utente malintenzionato che in qualche modo è in grado di modificare la data di sistema sul suo dispositivo mobile? E gli utenti in diversi fusi orari? Come ti ha detto @jeffrey, forse non è l'approccio migliore per fare affidamento sulle date generate sui dispositivi.

  2. Se ho capito bene, usi Controllo di concorrenza ottimistico . Non vedo nulla di intrisamente sbagliato nel tuo approccio.

  3. Questa domanda riguarda l'implementazione del blocco ottimistico in primavera. Forse puoi trovare qualche ispirazione in esso.

risposta data 22.05.2018 - 14:26
fonte

Leggi altre domande sui tag