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.

  1. Descarrega os ficheiros individuais GZ de S3 para um determinado dia.
  2. Descompacte-os
  3. Transforma o JSON em formato delimitado por tubos
  4. Concatena todos os dados de um dia inteiro em um único arquivo
  5. Comprime esse arquivo
  6. 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!

Sobre o autor
ShareThis

ShareThis has unlocked the power of global digital behavior by synthesizing social share, interest, and intent data since 2007. Impulsionado pelo comportamento do consumidor em mais de três milhões de domínios globais, ShareThis observa acções em tempo real de pessoas reais em destinos digitais reais.

Sobre nós

ShareThis has unlocked the power of global digital behavior by synthesizing social share, interest, and intent data since 2007. Impulsionado pelo comportamento do consumidor em mais de três milhões de domínios globais, ShareThis observa acções em tempo real de pessoas reais em destinos digitais reais.