Come verificare la solidità in un servizio che include più punti di errore nel flusso di lavoro, incluso FTP

2

Come parte del mio flusso di lavoro, ho bisogno di fare tutti questi passaggi in un'unica transazione - Ho bisogno di ftp file su 2 diversi server FTP. - C'è anche un foglio di calcolo che viene generato che deve essere FTP. Può essere trasmesso in streaming, invece di scaricare e quindi trasferito al server FTP.

Sto usando le librerie Ruby Net :: SFTP e Net :: FTP per inviare i file.

Vorrei che fosse robusto. Non sono sicuro di dover fare qualcos'altro o di questo è abbastanza buono.

Per essere chiari, questo sta già lavorando in produzione, non sono bloccato, sto solo cercando di scambiare idee di design / architettura su come migliorarlo.

    
posta archie 13.03.2014 - 18:55
fonte

2 risposte

3

Ahh, con FTP, la risposta semplice è - non lo fai.

Quello che puoi fare è recuperare il file che hai inviato al server FTP e controllare che sia uguale al file originale. Se corrispondono, tutto ha funzionato bene come speravi.

Questo diventa complicato se non ti è permesso leggere dal server FTP (come fanno gli acquirenti di carte di credito), la sicurezza è impostata in modo tale che ti sia permesso di scrivere su alcune directory ma non di leggerle. In questi casi, il server tende ad avere un servizio che genera un rapporto di riepilogo del tuo caricamento che puoi recuperare da una directory di sola lettura. Nel caso di acquirenti che non lo fanno, devi solo incrociare le dita e aspettare che si lamentino di solito il giorno successivo.

    
risposta data 13.03.2014 - 19:25
fonte
1

Dipende da cosa intendi per "robusto" ad es. considerando scenari come:

  • PUT non riesce sull'host remoto
  • PUT ha successo ma il file è corrotto in qualche modo
  • L'host è temporaneamente non disponibile
  • L'host è permanentemente non disponibile (ad es. configurazione errata o l'host non è più disponibile)

Puoi codificare tutto questo (o acquistare un software che fornisce garanzie in merito alla consegna), ma se hai il controllo dell'intero flusso di lavoro, potrebbe essere meglio fare in modo che i clienti "tirino" i file piuttosto che avere la spinta degli editori "loro. Il sistema su cui lavoro crea e invia una grande quantità di file, e non abbiamo idea se i client remoti ne abbiano addirittura bisogno. Un modello "pull" ti dice almeno che un sistema da qualche parte sta tentando attivamente di recuperare un determinato file.

Potresti, ad esempio, creare un servizio che accetta richieste di file e costruirle se non sono disponibili, oppure usa una versione esistente / memorizzata nella cache, forse dal filesystem. Un'API REST sarebbe una soluzione naturale per questo, ad es.

link

... creerebbe file12345.csv su richiesta e lo memorizzerà nella cache per le richieste successive (se necessario).

    
risposta data 13.03.2014 - 19:10
fonte

Leggi altre domande sui tag