Trasformazione dei dati con Python, Docker e Kubernetes
di Andrew Backes e Allen Fung
Recentemente abbiamo creato un'applicazione per trasformare i file di dati per un determinato giorno, concatenarli e caricarli su un server FTP. In particolare, ecco cosa fa l'applicazione.
- Scarica i singoli file GZ da S3 per un determinato giorno.
- Aprite la cerniera
- Trasforma il JSON in formato delimitato da tubi
- Concatenazione di tutti i dati per un giorno intero in un unico file
- Comprime quel file
- Carica via FTP
Ci sono un paio di cose interessanti su questa applicazione. In primo luogo, mentre tradizionalmente abbiamo usato script di shell per questo tipo di applicazioni, questa volta abbiamo scelto Python. Questo linguaggio rende l'applicazione più manutenibile, dal momento che supporta facilmente i test unitari. Python supporta anche uno stile di programmazione più funzionale, che stiamo iniziando ad usare più spesso in tutta l'organizzazione.
Un'altra cosa interessante dell'applicazione è che funziona in un container Docker. Un importante vantaggio dell'utilizzo di Docker è che il nostro ambiente di sviluppo è esattamente lo stesso del nostro ambiente di produzione. Di conseguenza, non ci siamo imbattuti in problemi come versioni Python sbagliate o moduli Python mancanti durante il deployment. Questo ci ha aiutato a completare il deployment iniziale alla produzione in pochi minuti rispetto ai giorni che ci sarebbero voluti nel nostro ambiente legacy.
Per distribuire l'applicazione in un cluster di server, abbiamo usato Kubernetes. In particolare, abbiamo usato il comando "kubectl create". L'input a questo comando è un file YAML, che contiene l'immagine docker, le risorse della CPU e le risorse di memoria da utilizzare. Mentre questa applicazione è progettata per funzionare in un singolo contenitore, Kubernetes rende molto facile la scalabilità in più contenitori in pochi secondi. Ecco un esempio di come fare questo.
$ scala kubectl rc la mia applicazione -repliche=5
Poiché le opzioni delle repliche sono impostate su cinque, significa che stiamo scalando a cinque contenitori. Si noti che abbiamo anche costruito un tooling sopra Kubernetes per aiutare a gestire più cluster. Con questo tooling, specifichiamo la posizione in cui effettuare il deploy e il sistema trova automaticamente le variabili d'ambiente corrette per la posizione specificata.
Come avete visto, Python, Docker e Kubernetes ci aiutano a scrivere codice più pulito e a iterare più velocemente, il che porta a prodotti migliori. In futuro, speriamo di poter trasferire in questo ambiente un numero maggiore di applicazioni legacy. Restate sintonizzati per i post del blog su questo argomento.
Se siete interessati a risolvere problemi come questo ci piacerebbe avervi unisciti al nostro team!