Transformação de Dados com Python, Docker, e Kubernetes
por Andrew Backes e Allen Fung
Recentemente criamos uma aplicação para transformar arquivos de dados para um determinado dia, concatená-los e carregá-los para um servidor FTP. Especificamente, aqui está o que a aplicação faz.
- Descarrega os ficheiros individuais GZ de S3 para um determinado dia.
- Descompacte-os
- Transforma o JSON em formato delimitado por tubos
- Concatena todos os dados de um dia inteiro em um único arquivo
- Comprime esse arquivo
- Carrega-o via FTP
Há algumas coisas interessantes sobre esta aplicação. Primeiro, embora tradicionalmente tenhamos usado scripts shell para este tipo de aplicações, desta vez escolhemos Python. Esta linguagem torna a aplicação mais fácil de manter, uma vez que ela suporta facilmente testes unitários. Python também suporta um estilo mais funcional de programação, que estamos começando a usar com mais frequência em toda a organização.
Outra coisa interessante sobre a aplicação é que ela funciona em um container Docker. Um benefício importante da utilização do Docker é que o nosso ambiente de desenvolvimento é exactamente o mesmo que o nosso ambiente de produção. Como resultado, não encontramos problemas como versões Python erradas ou módulos Python ausentes durante a implementação. Isso nos ajudou a completar o deployment inicial para produção em poucos minutos, em comparação com os dias que levaria em nosso ambiente legado.
Para implantar a aplicação num cluster de servidores, utilizámos Kubernetes. Especificamente, utilizámos o comando "kubectl create". A entrada para este comando é um arquivo YAML, que contém a imagem da doca, recursos da CPU e recursos de memória para usar. Enquanto este aplicativo é projetado para ser executado em um único recipiente, Kubernetes torna muito fácil de escalar para vários recipientes em segundos. Aqui está um exemplo de como fazer isso.
$ kubectl scale rc my-application -replicas=5
Como as opções de réplicas estão definidas para cinco, isso significa que estamos a escalar para cinco contentores. Note que também construímos ferramentas em cima de Kubernetes para ajudar a gerir vários clusters. Com este ferramental, especificamos o local para implantar e o sistema encontra automaticamente as variáveis de ambiente corretas para o local especificado.
Como você viu, Python, Docker e Kubernetes nos ajudam a escrever código mais limpo e a iterar mais rápido, o que leva a produtos melhores. No futuro, esperamos fazer a transição de mais aplicações legadas para este ambiente. Fique atento a posts no blog sobre isso.
Se você está interessado em resolver problemas como este, gostaríamos de ter você junte-se à nossa equipa!