Como entrar na Internet inteira em alguns minutos

Dirceu Jr.
2 min readOct 16, 2022

--

Ok, talvez não inteira, mas em muitas páginas em bem pouco tempo.

A arquitetura apresentada aqui foi inspirada em ideias do magnífico livro Web Data Mining.

Web Data Mining
Web Data Mining

Eu tive a oportunidade perfeita de utilizar essa arquitetura em um projeto real (BuzzVolume) logo após ler o livro, em 2009. Apesar da maior parte do livro ser mais difícil, essa é relativamente fácil...

O BuzzVolume foi um serviço que organizava em listas de assuntos e popularidade os links compartilhados no Twitter.

Nós (eu e o Maurício) acessávamos a API em tempo real do Twitter (Firehose API) e filtrávamos tweets contendo "http" ou "https" ou seja, tweets com links!

Para resolver os redirecionamentos e capturar título e conteúdo principal do documento era necessário acessar cada URL.

URL (Uniform Resource Locator), é um termo técnico que foi traduzido para a língua portuguesa como “localizador uniforme de recursos”. É o endereço eletrônico...

Acessar um endereço por vez seria inviável. Não seria possível continuar recebendo os próximos tweets se parasse e esperasse a resposta de cada requisição HTTP.

Uma requisição HTTP é relativamente lenta e imprevisível. A arquitetura necessária para esse tipo de tarefa envolve processamento assíncrono e paralelo.

À medida que os links chegavam, nós os adicionávamos em uma fila em base de dados/estruturas chave-valor (na época usamos o Tokyo Cabinet mas o equivalente atual é o Redis). Assim um outro processo desacoplado (assíncronismo) tratava de realmente fazer a requisição HTTP.

Dessa forma foi possível abrir vários processos consumidores (paralelismo) para se manter a par da demanda.

Mas para realmente acessar a Internet inteira (ou talvez todos os imóveis de todas imobiliárias) os processos precisam consumir pouca memória (para permitir abrir vários) ou eles precisam serem capazes de paralelizar melhor o trabalho.

No ecossistema da linguagem Ruby, existe a ótima biblioteca typhoeus. É realmente como seus criadores descrevem: Uma versão moderna do código da besta mítica com 100 cabeças de serpente.

Outras linguagens possuem seus equivalentes (bibliotecas que encapsulem a libcurl ou padrões de processos leves).

Ah, você pode economizar tempo e bytes implementando reconhecer e aceitar "gzip". E se fizer muitas requisições para o mesmo domínio pode fazer cache do DNS.

Espero ter inspirado você a escrever algo poderoso!

--

--

Dirceu Jr.
Dirceu Jr.

Written by Dirceu Jr.

software developer, tech enthusiast, applied artificial intelligence student 👨‍💻 developer of 🌐 http://coora-ai.com 🧭 http://igapo.tech

No responses yet