Infraestrutura elástica utilizando AWS, NodeJs e Terraform

Embora este artigo contenha mais técnices que o habitual, ele demonstra como os paradigmas de desenvolvimento estão sendo alavancados à níveis outrora inalcançados por nossa vã existência.

Qualquer simples mortal

Isso mesmo. Não é necessário ser um cientista amparado por um centro de pesquisa, universidade ou grande corporação. Qualquer desenvolvedor pode ter acesso a centenas de instâncias computacionais gastando menos que R$ 1,00 por hora.

R$ 1,00/h !? Centenas de máquinas !? Tem certeza ?

Absoluta! E vou demonstrar algumas formas de conseguir isso dando o exemplo com uma aplicação REAL, e não um esqueleto ou exercício de estética de código.

Aplicação: Scrapper + Captcha breaker

Exato: preciso acessar um URL, ler uma imagem ou áudio de um captcha, decodificar esse captcha, preencher esse captcha e acessar a página que tem as informações valiosas para a necessidade do negócio.

Passo 1: Fazendo um inventário

Como assim inventário ? Se és desenvolvedor e nunca parou para inventariar tudo que envolve um projeto, provavelmente está ganhando menos do que poderia. Como em um Adventure ou RPG, você tem que levar em conta tudo que tem na sua bag ou chest, o ambiente externo, seus recursos financeiros e estudar as possíveis combinações de elementos para equilibrar seu personagem, neste caso, sua aplicação.

O negócio

Preciso verificar informações de 150.000 empresas em 5 dias. Posso cobrar R$ 0,03 por empresa. Desintegro isso em minha mente da seguinte maneira:

  • 30.000 por dia, 1.250 por hora, 20 por minuto … Isso se eu conseguisse trabalhar 24h por dia.
  • R$ 4.500,00 de faturamento… Será que vale a pena? Vamos calcular isso daqui a pouco.

NodeJS — minhas bibliotecas companheiras

Amazon AWS

  • EC2 fornece instâncias a partir da imagem que eu quiser.. preços a patir de 0,003 USD por hora.
  • S3 permite que eu salve arquivos sem me preocupar com barreiras e provisões físicas, grátis no free tier, muito barato
  • Lambda é demais. Executa código sob demanda, 0,50 USD a cada 1.000.000 de execuções.
  • SQS é um serviço de message queue, perfeito para enfileirar minha demanda, grátis no free tier

2Captcha

Serviço de reconhecimento manual de captchas. Isso mesmo. Pessoas digitando em massa captchas, integração com API, 1 USD a cada 1000 captchas

IBM Watson

Com o serviço text-to-speech eu poderia fazer stream do áudio ou enviar um arquivo para quebrar o captcha de áudio. Grátis no free tier

Nuance Loquendo

Outra opção de ASR(Automatic speech recognition) é o Loquendo, 1000 USD por canal. Bem caro.

Terraform

É legal pacas. Com ele é possível automatizar o gerenciamento de sua infraestrutura na nuvem. Em português claro, apertando ENTER você sobre múltiplas instâncias computacionais a partir de uma imagem, apertando denovo ENTER você pode atualizar ou destruir todas essas instâncias sob sua demanda. Economiza bastante tempo e trabalho manual que inviabilizaria minha ótima idéia que veremos mais a frente.

O Alvo

É o site que vou scrappar, vamos ver os perks dessa cara.

  • Tem alta disponibilidade: isso é ótimo! Posso disparar uma par de requisições ao mesmo tempo.
  • Tem rate limiter integrado com firewall: aí zoa… Vai bloquear meus IP's logo que receber requisições em massa.
  • Captcha de imagem extremamente forte: não dá para contar com essas libs python e matlab com exemplos de processamento de imagem.
  • Captcha de áudio ok: o aúdio não é lá difícil de ser compreendido.

Passo 2: Tomando as melhores decisões

Depois de inventariar quase tudo que veio a mente está na hora de escolher os ingredientes certos e tarçar a receita correta para não ser eliminado no MasterChef©.

Arquitetura escolhida

Computação

Poderia usar o lambda, sairia até de graça, mas não conseguiria agilidade nem controle nas mudanças de IP quando o mesmo for bloqueado.

Ai entre o EC2 com Terraform. Posso preparar uma imagem com minha aplicação deployada, e subir diversas instâncias sob demanda.

20 scraps por minuto = 20 instâncias t2.nano cada uma com seu IP. Isso custo 7.2 USD por estes 5 dias. Entendeu perfeitamente? R$ 25,00 de custo com computação. Tá bom demais.

R$ 4.500,00 - R$ 25,00 = R$ 4.475,00

Banco de dados/Fila

Amazon SQS é perfeito e baratissímo. Depois que eu enviar meu primeiro milhão de solicitações(que é grátis), pago 0,00000050 USD nas subsequentes. Vamos supor 150.000 * 0,00000050 USD = 0,15 USD, arredondando R$ 0,60, já o armazenamento no S3, fica em 1,5 USD

R$ 4.475,00 - R$ 6,60 = R$ 4.468,40

Quebrando o captcha

Desisti rapidamente da possibilidade de utilizar áudio neste caso. O IBM Watson erra muito em português, e soluções como o Loquendo são muito caras.

Vamos lá pagar xinglings para digitar manualmente 150.000 captchas 24 horas por dia. 150.000 * 0,001 = 150 USD, arredondando R$ 600,00

R$ 4.468,40 - R$ 600,00 = R$ 3.868,40

O tempo

O maior custo de toda a operação. Meu tempo ou o tempo de outro desenvolvedor custará, afinal, não existe almoço grátis e não estudamos e nos aperfeiçoamos para viver de migalhas e queremos um longa vida sustentável para que possamos nos dedicar a aprender com projetos como esse. 20h * R$ 100,00 = R$ 2.000,00

R$ 3.868,40 - R$ 2000,00 = R$ 1.868,40

O Lucro financeiro: R$ 1.868,40

Aí está o $$$$. Bem legal, não dá pra ficar rico mas ajuda a financiar parte de um smartphone, notebook, viagem, guitarra ou violão. No meu caso atual, um muro de arrimo ou escada.

O Lucro do aprendizado

O XP adquirido durante esse processo poder valer muito mais $$$ e oportunidades no futuro. Eu faria tudo novamente se tivesse tempo sobrando, mesmo sem lucro financeiro.

Proporcionalidade de custos

Perceba que os custo da amazon são bastante acessíveis.

Risco

Qualquer negócio envolve risco. Posso tomar calote do cliente, posso não conseguir performar o trabalho. A Amazon pode cair, e o 2captcha pode fechar a qualquer momento. Ao entrar em um negócio é preciso avaliar todos os riscos, até mesmo o de não receber nada ou ser processado por mau uso de recursos computacionais :>

Passo 3: Hands on

Overview da aplicação em NodeJs

Concorrência

Ao subir a primeira instancia do scrapper, pude determinar a velocidade máxima que cada worker poderia operar sem levantar suspeitas que não era um humano de verdade: 1 (uma) consulta a cada 30 segundos.

Terraform

Com apenas alguns comandos de apply e destroy, pude subir múltiplas instâncias. A cada vez que um IP era bloqueado a instância era terminada automaticamente pela aplicação, então eu poderia até automatizar o processo de subir uma instância ao detectar que outra havia caído.

Surpreendentemente não foi necessário lidar com quedas significativas, pois ao respeitar o limite de 30 segundo por empresa por worker pude operar 24h sem levantar suspeitas.

A vantagem do EC2 é que o IP é dinâmico para cada instância, e não seguem uma faixa de lease facilmente detectável.

Aftermath

Pude realizar este trabalho de acordo com minha expectativa de lucro e de quebra utilizar tecnologias combinadas de uma forma inédita em minha experiência.

E você, faria de forma diferente? A Beth Faria :>