Un progetto in cui sono coinvolto ha subito un cambiamento nel campo di applicazione, e prima che iniziassi a provare a inventare una soluzione homegrown, mi chiedo se c'è qualcosa là fuori - qualche struttura, per esempio - che mi eviterà di dover progettare e eseguire il debug del mio codice personale. Lasciatemi provare a spiegare i dettagli nel modo più semplice possibile.
Progetto originale
Questo è un progetto di migrazione dei dati, un ETL. Originariamente, esistevano più database di origine, più motori ETL (che consentivano il failover) e 1 unico database di data warehouse. Il data warehouse avrebbe mantenuto i dati delle singole fonti dritte, e sarebbe stato replicato, dietro le quinte: il mio ETL avrebbe dovuto solo preoccuparsi di scrivere nel data warehouse. Avevo un piano per questo.
Modifica del progetto
Ora, il cliente è preoccupato di mescolare i singoli dati di origine in un singolo data warehouse. Vogliono magazzini di dati separati. Questo sarebbe abbastanza semplice, ma per il fatto che vogliono ancora che i motori ETL funzionino secondo l'accordo originale. Lascia che te lo spieghi.
I requisiti del progetto (in poche parole)
Immaginiamo quanto segue:
- 4 database di origine
- 4 motori ETL
- 4 data warehouse (che possono essere ciascuno su un server separato)
Considerato quanto sopra, i motori ETL dovrebbero essere in grado di lavorare round-robin, un singolo motore ETL che preleva da uno qualsiasi dei 4 database di origine e scrive nel data warehouse appropriato. Se 1 o più database di origine diminuiscono, o 1 o più motori ETL diminuiscono, o 1 o più data warehouse diminuiscono, il processo ETL dovrebbe continuare, allegramente, eseguendo ETL dove può essere fatto.
Il mio problema
Se esistesse 1 data warehouse, potrei coordinarlo; se i motori ETL avessero solo una singola origine dati e una coppia di data warehouse a cui erano assegnati, potrei gestirlo; ma ora le cose si sono complicate. Non sono davvero ottimista sui framework - o forse, forse sui concetti - che gestiscono qualcosa di simile. Forse c'è un nome in uno scenario come questo (ed è un problema ben noto), ma non conosco nemmeno il nome.
Tecnologie utilizzate
Nota: disponiamo già di un prototipo funzionante, consegnato e testato dal cliente, che esegue l'ETL su 1 fonte e 1 destinazione. Ecco cosa stiamo usando:
- Jython (Python, in esecuzione sulla JVM) per l'ETL
- Microsoft SQL Server per i database di origine
- MySQL per i database del data warehouse
La mia domanda (di nuovo)
Esiste una sorta di framework che coordina un processo come questo, in cui i motori ETL possono servire tutte le coppie di destinazione-destinazione, fornire il failover e tuttavia non si calpesteranno l'un l'altro, o è qualcosa che ho per programmare me stesso.
In chiusura, spero che quanto sopra sia chiaro. Se posso fare qualsiasi cosa per chiarire quanto sopra, per favore chiedi. Grazie.