Contesto
Sto per iniziare un nuovo progetto per la mia azienda 1 che l'architettura comprenderà diversi elementi. Ci sono 2 applicazioni mobili (Android e iOS), una web API (Java) e un ETL (decidendo ancora se utilizzare NodeJS o Java).
Il sistema dovrebbe estrarre i dati da diversi repository OpenData (web APIS), trasformare ciascun set di dati in un modello di dati univoco e consolidare i dati.
Il modello risultante è il modello che deve essere pubblicato tramite l'API Web e quello che viene utilizzato dalle app mobili. Inoltre, l'API web fornirà funzionalità simili a quelle che troviamo nei social network (Mi piace, Preferiti, link di condivisione, suggerimenti, ecc.)
Il sistema verrà distribuito come contenitori Docker. Probabilmente in una piattaforma cloud pubblica.
Motivazioni
Ho costruito sistemi simili prima e mi sono reso conto che costruisco sempre l'ETL con un linguaggio di programmazione di alto livello (principalmente in Java). Sono consapevole della debolezza di Java per quanto riguarda la serializzazione / deserializzazione e gestione della memoria. Sono giunto alla conclusione che Java è diventato il mio Golden Hammer e talvolta potrebbe essere eccessivo (o inadeguato).
Ho iniziato a considerare altri linguaggi come NodeJS perché è molto efficace nell'esecuzione di I / O e trasformazione dei dati (JSON). Il tipo di ETL che ho in mente può sfruttare queste funzionalità e facilitare l'implementazione.
Tuttavia, ho eseguito recentemente i compiti di DevOps e mi sono innamorato dello scripting di shell di Linux. Complessivamente con comandi come wget
, awk
, grep
, sed
e jq
. Sono anche riuscito a creare un ETL con questi 4 comandi senza bisogno di un altro linguaggio di programmazione. Ho trovato il livello O.S per essere abbastanza comodo, veloce ed efficiente.
Di conseguenza, ho iniziato a giocare con l'idea di sfruttare le potenzialità di O.S e di costruire il prossimo ETL che si estende più estesamente sul livello O.S.
Domanda
Dato che non ho mai costruito qualcosa di simile, le mie domande sono
-
Quali sono i rischi (almeno quelli più rilevanti) di fare affidamento sul livello O.S (comandi e shell) come piattaforma di programmazione?
-
Di cosa dovrei essere a conoscenza?
-
Sono solo io o di solito non sfruttiamo le funzionalità sottostanti di O.S? Se sì, perché? 2
Nota
L'idea sarebbe di implementare un'applicazione web leggera in cui gli utenti possano programmare dinamiche (e) xtractions, (t) ransformations e (l) oads, digitando il codice dello shell shell in aree di testo. Trasforma queste aree di testo in file eseguibili sh
ed eseguili in un dato ordine. Se hai familiarità con Jenkins, probabilmente sai cosa intendo.
L'estrazione può essere gestita con wget
, trasformazione con jq, awk and sed
e il caricamento, beh, spero che Ubuntu abbia un cli di MongoDB. In caso contrario, potrei risolvere quella parte con Java o NodeJS.
1: Dove interpreto il ruolo di un ingegnere senior del software. Ma per questo progetto, mi aspetto che io sia l'architetto. Penso di poterlo fare, ma non ho mai giocato completamente questo ruolo prima di
2: Mi chiedo se questa domanda sia (in qualche modo) simile all'eterna discussione sul fatto che mettere la logica di business nel database sia malvagio.