Best practice per l'accesso ai dati da un sistema ERP legacy esterno

2

Ho un problema architettonico e sarei lieto di ricevere qualche consulenza :). L'applicazione che sto sviluppando (chiamiamola sistema A) è responsabile della gestione dei gruppi di lavoro, dove questi gruppi hanno un leader, un insieme di membri, ruoli, categorie ecc.

Le informazioni sulle persone che diventeranno membri del gruppo provengono da un'altra applicazione (sistema B), che è legacy, è stata sviluppata da un'azienda esterna e non verrà sostituita in qualsiasi momento. Questo sistema conserva i record di tutti i dipendenti della mia azienda (circa 300.000+) ed è un giorno al mese molto impegnato a elaborare la fattura di pagamento di questi dipendenti. Il sistema A può ottenere le informazioni sui dipendenti tramite i servizi Web SOAP sviluppati dal sistema B, ma questi servizi Web sono lenti e non molto scalabili.

Il problema è che alcune operazioni nel sistema A (come l'interrogazione dei dipendenti che non appartengono a nessun gruppo) devono controllare ogni dipendente disponibile nel Sistema B. Pertanto, al fine di evitare i colli di bottiglia delle prestazioni legati all'ottenimento diretto di questi dati dai servizi web di B, ho pensato alle seguenti soluzioni:

  1. Le operazioni lente verrebbero eseguite in background da un thread parallelo ogni due ore e i risultati verrebbero memorizzati nella cache. Questo riduce il numero di volte che A avrebbe bisogno di accedere ai servizi web di B, ma ogni query eseguita sul sistema A sarebbe, nel peggiore dei casi, due ore non aggiornate.

  2. Una volta al giorno, durante le ore non impegnative (cioè mezzanotte), un lavoro interrogherebbe il sistema B per i dati dei dipendenti e memorizzerà sul database del sistema A. Ciò eviterebbe di interrogare i servizi Web di B ogni volta che erano necessarie le stesse informazioni e, poiché il numero di dipendenti di B non aveva bisogno di essere aggiornato rapidamente, un solo giorno di ritardo non sarebbe un problema. Il problema in questo caso è la duplicazione dei dati su due sistemi.

  3. Concedere l'accesso diretto al database di B al sistema A. Ciò eliminerebbe qualsiasi ritardo correlato alla comunicazione remota e aprirà le porte a molte ottimizzazioni del database. Il problema di questa soluzione è l'elevato accoppiamento tra due sistemi (non molto simile a SOA) e le operazioni sul sistema A aumenterebbero il carico di prestazioni sul sistema B.

Apprezzerei le opinioni su queste tre soluzioni, se qualcuno avesse riscontrato lo stesso problema e sarei pronto per una quarta soluzione.

    
posta dliber 05.11.2014 - 14:16
fonte

1 risposta

1

1 naturalmente sarebbe molto probabilmente l'opzione più semplice da implementare.

2 è una pratica ragionevolmente comune per aiutare ad affrontare i sistemi lenti o difficili da gestire. E alla tua destra duplica i dati, quindi dovresti avere il criterio che System B è l'autorità e A dovrebbe essere usato come "di sola lettura".

Personalmente opterei per l'opzione 3, con lievi modifiche. Sostituirei le chiamate del servizio Web con un'interfaccia (dll) diretta al sistema B e fare in modo che il sistema A effettui chiamate. Quindi, mantenendo i sistemi separati, ma offrendo una finestra migliore nel sistema e un maggiore controllo.

    
risposta data 05.11.2014 - 16:16
fonte

Leggi altre domande sui tag