Transformación de datos con Python, Docker y Kubernetes
por Andrew Backes y Allen Fung
Recientemente creamos una aplicación para transformar los archivos de datos para un día determinado, concatenarlos y subirlos a un servidor FTP. Específicamente, esto es lo que hace la aplicación.
- Descarga los archivos gz individuales de S3 para un día determinado.
- Los descomprime
- Transforma el JSON en formato delimitado por tubería
- Concatena todos los datos de un día entero en un archivo
- Comprime ese archivo
- Lo sube a través de FTP
Hay un par de cosas interesantes acerca de esta aplicación. En primer lugar, mientras que tradicionalmente hemos utilizado scripts de Shell para este tipo de aplicaciones, elegimos Python esta vez. Esta lengua hace el uso más mantenible, puesto que apoya fácilmente la prueba de la unidad. Python también soporta un estilo de programación más funcional, que estamos comenzando a utilizar más a menudo en toda la organización.
Otra cosa interesante acerca de la aplicación es que se ejecuta en un contenedor Docker. Un beneficio importante de utilizar Docker es que nuestro entorno de desarrollo es exactamente el mismo que nuestro entorno de producción. Como resultado, no nos encontramos con problemas como las versiones erróneas de Python o los módulos de Python perdidos durante la implementación. Esto nos ayudó a completar el despliegue inicial a la producción en pocos minutos en comparación con los días que habría tomado en nuestro entorno heredado.
Para implementar la aplicación en un clúster de servidores, utilizamos Kubernetes. En concreto, usamos el comando "kubectl Create". La entrada a este comando es un archivo YAML, que contiene la imagen del Docker, los recursos de la CPU y los recursos de memoria que se usarán. Mientras que esta aplicación está diseñada para funcionar en un solo contenedor, Kubernetes hace que sea muy fácil de escalar a varios contenedores en segundos. Aquí hay un ejemplo de cómo hacer esto.
$ kubectl escala RC mi-aplicación – réplicas = 5
Dado que las opciones de réplicas se establecen en cinco, significa que vamos a escalar a cinco contenedores. Tenga en cuenta que también hemos construido herramientas en la parte superior de Kubernetes para ayudar a administrar múltiples clusters. Con esta herramienta, especificamos la ubicación a desplegar y el sistema encuentra automáticamente las variables de entorno correctas para la ubicación especificada.
Como has visto, Python, Docker y Kubernetes nos ayudan a escribir código limpiador y iterar más rápido, lo que lleva a mejores productos. En el futuro, esperamos la transición de más aplicaciones heredadas a este entorno. Estad atentos a los mensajes de blog sobre esto.
Si usted está interesado en resolver problemas como este nos encantaría tenerte ¡ Únase a nuestro equipo!