Sincronizzazione tra due sistemi usando MongoDB come registro delle modifiche

11

Stiamo sviluppando due sistemi correlati. Uno di questi (A) verrà installato sulle macchine dei nostri clienti. Il resto (B) sarà utilizzato dalla mia organizzazione.

Ogni sistema ha il proprio database (relazionale) e i loro schemi differiscono. Tuttavia, entrambi i sistemi devono essere sincronizzati. Inoltre, alcune modifiche in B devono essere esportate in tutti i sistemi di classe A e altre solo in uno specifico.

Alcuni clienti non hanno una connessione a Internet, quindi la sincronizzazione, in alcuni casi, deve essere effettuata tramite lo scambio di file.

Quindi, stiamo pianificando di risolvere questo problema come segue:

  1. Ogni sistema mantiene un log delle modifiche del suo database. Stiamo progettando di implementarlo con MongoDB.
  2. Quando un sistema inizializza un processo di sincronizzazione, recupera tutte le modifiche apportate da un registro. Se il sistema è B, le modifiche recuperate dipendono dalla destinazione. Quindi, il sistema li serializza in formato XML e, infine, li invia (tramite un file o una rete).
  3. Quando l'altro endpoint riceve il changeset, esso non viene serializzato. Quindi, il sistema esegue alcune trasformazioni sui dati, che possono essere necessarie e, infine, registra le modifiche. In questo passaggio, se necessario, il sistema deve risolvere i conflitti che potrebbero esistere.
  4. Infine, il sistema ricevente invia le sue modifiche (e altri prodotti di risoluzione dei conflitti).

Questo approccio è fattibile, scalabile ed elegante? Quali modifiche o aggiunte faresti?

    
posta k91 04.11.2014 - 17:09
fonte

2 risposte

1

Se non lo hai già fatto, potresti trovare interessante leggere su sistemi event-driven, event sourcing ed eventuale coerenza. Il sistema che stai descrivendo ha molti paralleli con questi modelli, che è una buona cosa.

Il tuo approccio sembra buono, in particolare:

  • L'uso di un changelog ordinato significa che il processo di sincronizzazione è in grado di recuperare solo le modifiche apportate dall'ultima modifica vista. Ciò consentirà di ridurre i tempi di elaborazione, facilitando la scalabilità e consentendoti di realizzare la sincronizzazione quasi in tempo reale nei casi in cui è disponibile la connettività Internet.
  • I clienti senza connessione Internet ti costringono a pensare a gestire la sincronizzazione ritardata e fuori dall'ordine ora, piuttosto che fare affidamento sulla sincronizzazione rapida e finire inavvertitamente con problemi di scalabilità.

Senza saperne di più sul modello di dominio, la mia ipotesi è che risolvere i conflitti è la parte che ti causerà più problemi. Passerei un po 'di tempo a pensare a come risolvere ogni tipo di conflitto. In particolare:

  • Alcuni conflitti richiedono la risoluzione dell'utente?
  • Il sistema dei clienti sarà sempre il posto giusto per risolvere i conflitti?
  • È possibile che vi siano conflitti nel sistema B dopo il punto 4 quando il sistema clienti invia le sue modifiche?
risposta data 24.01.2017 - 01:19
fonte
0

Each system maintains a changelog of its database. We are planning to implement it with MongoDB.

Puoi utilizzare un storestore . Ogni aggiornamento ai dati creerà un nuovo evento nel negozio.

When a system initializes a synchronization process, it retrieves all made changes from log. If the system is B, the changes retrieved depend of the destination. Then, the system serializes them in XML format and, finally, sends them (via a file or a network).

È possibile utilizzare qualsiasi meccanismo per inviare eventi, ma sarebbe più semplice utilizzare un bus se possibile dove non si ha a che fare con i file. In genere questi possono essere configurati per contenere i messaggi fino a quando non è disponibile la connettività per inviarli.

When the other endpoint receives the changeset, it unserializes them. Then, the system makes some transformations over the data, which can be necessary, and finally, records the changes. In this step, if it's necessary, the system has to resolve the conflicts which might exist.

Applicare semplicemente gli eventi ai propri oggetti di dominio.

Last, the receiver system send its changes (and other products of conflict resolution).

Utilizza lo stesso approccio.

    
risposta data 27.06.2016 - 08:25
fonte

Leggi altre domande sui tag