Best practice per il trasferimento dei dati

3

Nella mia azienda abbiamo alcuni fornitori che trasferiamo i dati da e verso. A volte i dati vengono inseriti nel nostro database SQL locale per la reportistica aziendale. Altre volte estraiamo i dati da un fornitore, li trasformiamo e li trasferiamo al server FTP di un altro fornitore.

Il ragazzo che ho sostituito ha un paio di applicazioni SFTP Push / Pull generiche che trasferiscono dati da / verso questi fornitori. Quindi ha altre applicazioni che importano i dati nel database SQL o trasformano i dati e li lascia in una directory da inviare al fornitore.

Ogni tanto avremo problemi con questi processi non trovando il file necessario e devo tornare indietro ed eseguirli manualmente per caricare i dati. Mi sembra che sarebbe più affidabile se questi processi eseguissero le proprie funzioni push / pull FTP in modo da non incorrere in problemi di pianificazione. Esistono pratiche standard che posso implementare che sarebbero più affidabili o devo solo modificare ciò che ho adesso? Tra l'altro, sono in un ambiente Windows / .NET.

    
posta programmer 19.11.2013 - 18:18
fonte

2 risposte

3

Innanzitutto, avere il meccanismo push / pull ftp separato dall'elaborazione core mi sembra un buon design , poiché consentirà di testare separatamente l'elaborazione del core e di collegare facilmente le parti un modo diverso se necessario. Questo è un buon esempio di separazione delle preoccupazioni .

Every once in a while we will have problems with these processes not finding the file needed

Prima di pensare a una soluzione con la possibilità di causare probabilmente più problemi di quanti ne risolverà, assicurati di sapere quale sia la causa principale del problema . È perché il lavoro A (tirando i dati) mette il file in una cartella sbagliata in cui il lavoro B (spingendo i dati del file) non se lo aspetta? Quindi è necessario un modo migliore per passare il percorso del file dal lavoro A al lavoro B in modo affidabile.

Oppure perché a volte il lavoro B inizia troppo presto, prima che l'output del lavoro A sia arrivato completamente? Bene, allora è necessario un meccanismo migliore per attivare l'inizio del lavoro B. Non è possibile inserire A e B in uno script di comando che assicura che B si avvii solo quando A è completo? Forse è necessario implementare un meccanismo di polling nel lavoro B che si assicura che non inizi l'elaborazione fino a quando l'output del lavoro A non è disponibile. Forse è necessario implementare un ciclo attorno al lavoro A per assicurarsi che proverà a scaricare di nuovo un file quando il primo tentativo non è riuscito. Potrebbe essere una buona idea lasciare che il processo ftp scarichi prima tutti i dati in un file temporaneo, e rinominalo come un passaggio finale quando è completo. La ridenominazione è un'operazione atomica sulla maggior parte dei file system, pertanto rende il file visibile solo ai seguenti processi quando è pronto per un'ulteriore elaborazione. Un'altra possibile tecnica è quella di lavorare con alcuni "lock file", proibendo l'accesso condiviso a un file "X" finché esiste "X.lock".

Quindi, IMHO l'architettura che hai descritto non è fragile di per sé, ma devi fornire una ragionevole quantità di sincronizzazione e tolleranza di errore attorno ai tuoi processi.

    
risposta data 19.11.2013 - 22:53
fonte
1

Esistono pratiche standard che posso implementare che sarebbero più affidabili o devo semplicemente modificare ciò che ho ora?

Cambia quello che hai ora. Per questo tipo di cose probabilmente hai alcuni requisiti personalizzati: tentativi, finestre di disponibilità, notifiche, backup, zipping. Se funziona il 90% delle volte, vedi se riesci a ottenere fino al 99% del tempo. Aggiungi un sacco di operazioni di registrazione e gestione delle eccezioni e prendilo da lì. Forse eseguirlo manualmente ogni giorno per 2 settimane per vedere se riesci a farlo fallire.

Devo ancora trovare una grande applicazione che si prenda cura degli elementi SFTP da e verso altri server con l'opzione di impostare finestre di disponibilità, tentativi, notifiche, ecc. Credo che SQL Server possa farlo. AFAIK, non esiste uno "standard". Hmm forse dovrei codificare qualcosa e venderlo:)

    
risposta data 19.11.2013 - 23:56
fonte

Leggi altre domande sui tag