Domanda

Ho diciamo 2 (ma che diventeranno di più in futuro) sistemi completamente disaccoppiati:. Sistema di A e B del sistema

Diciamo che ogni pezzo di informazioni su ogni sistema ha un informationID. Non c'è niente di fermare l'informationID per essere lo stesso su sistemi diversi. Quello che identifica univocamente un pezzo di informazione in tutti i sistemi è una coppia Source-informationID.

Diciamo che ho bisogno di esportare un pezzo di informazioni da Sistema A al sistema di B. Allora voglio esportare lo stesso pezzo di informazioni da Sistema B e ri-importarlo nel Sistema A e ho bisogno di essere in grado di riconoscere che è lo stesso pezzo di informazioni.

Qual è il modo migliore di fare questo nell'esperienza delle persone?

Questo è quello che sto pensando di fare:

  1. Imposta un bus di messaggi tra il sistemi con code di messaggi.
  2. endpoint di installazione per ogni sistema che sarà monitorare i cambiamenti e generare comandi avvolto in messaggi che sarà pompato in code (ad esempio quando un pezzo di informazione è creato / cancellato / aggiornato).
  3. Assegna colloca agli endpoint relativo per creare / cancellare / aggiornamento comandi in ordine senza fare affidamento su i nomi di sistema, ma solo su un generale gerarchia - in modo che ogni sistema non ha bisogno di conoscere la altri.
  4. Assegna una soglia su aggiornamento / delete / creare dei comandi per ogni endpoint in modo che non comanda soddisfare il requisito soglia saranno filtrati e non trasformati

Questo non risolverà il fatto che ho ancora bisogno di portare in giro originalSource + originalSourceID però.

Qualsiasi aiuto apprezzato.

È stato utile?

Soluzione

Questo problema è stato affrontato da EAI (Enterprise Application Integration) produttori come Tibco e webMethods (ora parte di Software AG). Non ho mai usato Tibco prima, ma ho usato webMethods per risolvere questo tipo di problemi quindi mi limiterò a concentrarsi su webMethods. Ad esempio, in un'impresa, i dati relativi dipendenti potrebbero risiedere in Active Directory e PeopleSoft. webMethods potrebbe essere utilizzata per garantire modifiche, aggiunte, elimina in un sistema (applicazione) si rifletterà nell'altro in tempo reale. In qualche altra organizzazione, i dati sui dipendenti potrebbe anche essere in un database Oracle o SQL Server. Ancora una volta, non è un problema. Questi strumenti di EAI come webMethods possono parlare con una vasta gamma di back-end. webMethods non è limitata a una sola fonte e un singolo bersaglio, ma perché ha un'architettura publish-subscribe, i dati provenienti da una singola fonte può fluire a obiettivi multipli interessati che sottoscrivono un particolare pezzo di informazione. consegna garantite e potrebbero altre caratteristiche possono essere trovati in questi prodotti. Torna l'esempio dei dipendenti, in ultima analisi, se si fa bene, in qualsiasi momento, tutti i sistemi e le applicazioni in un'impresa possono contenere le stesse informazioni sui dipendenti senza alcuna discrepanza.

Così, invece di fare programmazione in C # o Java, vi ritroverete a fare programmazione webMethods, che è molto simile a un linguaggio 4GL. Lo chiamo programmazione perché ci sono ancora logica coinvolti, cappio, se poi altro, filiali, variabili, pacchetti, ecc ma è molto procedimento orientati, cioè il concetto di OOP affatto.

Questi strumenti di EAI sono costruiti con finalità limitate in mente e uno degli scopi è quello di sincronizzare i dati tra sistemi diversi in un'impresa facile. E fanno il loro lavoro molto bene.

Lo svantaggio è che questi strumenti costano un sacco di soldi. Le aziende hanno spesso una strategia a lungo termine prima di investire in questi strumenti.

Altri suggerimenti

Come qualcuno già scritto, questo suona come un tipico problema di EAI. Anche se gli strumenti di EAI usato per essere costosi, ora c'è una vasta scelta di strumenti gratuiti, open-source. Qui di seguito un elenco di quelli che mi piacciono di più

  1. OpenESB
  2. Mule
  3. Apache ServiceMix
  4. Apache Camel

Il mio preferito è OpenESB, lo so che la cosa migliore, è un IDE completo (Netbeans), supporto opzionale da un grande fornitore e un enorme quantità di componenti aggiuntivi . Per la sua semplicità ed efficacia io poi amo Apache Camel, ma si può provare alcuni di quelli e decidere quale funziona meglio per voi. Poi si può anche decidere di acquistare servizi di supporto per tutti coloro.

Stiamo facendo più o meno esattamente il tipo di A -> B -> Una cosa che si descrivono. Abbiamo inizialmente preso in considerazione cercando di avere tutte le A, B, C etcs essendo coetanei, ma che era troppo difficile, quindi ora designare una come master, e gli altri schiavi. E 'ancora abbastanza facile da ottenere roba da uno slave a un altro, ma tramite il master.

E 'tutto fatto su servizi web - set di dati andare su e giù da slave a master e viceversa, e lo schiavo viene eseguito l'esportazione su se stessa, e invita l'importazione sul master. E poi dice al padrone di fare un export, e viene eseguito l'importazione su se stessa.

Quindi, il codice è identico su ogni sistema. E 'solo gli schiavi che chiamano casa.

I processi di esportazione e importazione raccontano gli oggetti di business rilevanti per fare tutto il loro elenco e roba risparmio, dal momento che già sanno come creare un'istanza e si persistono da DataRow.

Non è un'architettura molti-decine di transazioni al secondo, ma funziona, e può ottenere la sincronizzazione tempo quasi reale.

Non abbiamo migliorato sulla sorgente / Id unicità, tra l'altro:)

Questo è estremamente semplificata se si assegna ogni pezzo di informazioni un GUID. Se avete bisogno di tenere traccia di sorgente e altri ID, va bene, ma le informazioni shuold sempre viaggiare con il suo GUID assegnato.

Quando una macchina che vede pezzo di informazione ancora una volta, vedrà il GUID e associare con i dati esistenti, e poi si può decidere cosa fare. Ma si sa già che è lo stesso pezzo di dati - solo meglio viaggiato

.

Tenga presente che GUID vengono creati in modo tale che ogni macchina creerà un proprio e non lo faranno conflitto (per tutti i fini pratici) con i GUID creati su un'altra macchina, o la stessa macchina in un diverso tempo.

Questa è una delle più grandi ragioni GUID sono stati creati.

-Adam

A meno che non v'è una certa limitazione specifica nella progettazione del sistema prevenire questo, io suggerirei di factoring le informazioni condivise / condivisibili in un DB separato che gli altri due possono sia di riferimento o semplicemente replicare a livello locale. Quindi non è necessario la chiave a doppio elemento né alcuna elaborato aggeggio ESB ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top