O que é
Ferramenta de análise de redes que compara a visibilidade de rotas BGP entre múltiplos Pontos de Troca de Tráfego (IXs) — por exemplo, diferentes praças do IX.br, além de alguns IXs internacionais para comparação. Responde a perguntas como: quais prefixos anunciados em um IX também aparecem em outro? Quantos mantêm o mesmo caminho de AS nos dois locais? Como essa cobertura varia entre CDNs, provedores de acesso, bancos e órgãos de governo?
O objetivo prático por trás da análise é mostrar que, na maioria dos casos, não vale a pena um provedor investir em conectividade física de longa distância até um IX distante (por exemplo, ligar um cabo até o IX de São Paulo quando se está em Fortaleza) porque grande parte dos prefixos e redes disponíveis em um IX principal já está replicada nos IXs regionais. O resultado é um dashboard histórico que ajuda times de rede a tomar essa decisão com dados reais, entendendo a redundância de conectividade entre localidades.
Desafio
Os dados vêm do RouteViews (University of Oregon), que coleta snapshots (RIBs) de roteadores em diversos pontos do mundo — mas nem todos os IXs têm cobertura completa: há datas e horários com falhas específicas de captura, dependendo do roteador de origem. Os arquivos vinham com dados faltando, formatação inconsistente entre snapshots e um volume absurdo de informação para processar. O maior desafio técnico foi encontrar uma forma de processar esse volume com o mínimo possível de I/O de disco e a maior velocidade possível, já que o gargalo real não era CPU, era leitura/escrita.
Solução
- Binário em Rust que baixa automaticamente os snapshots (RIBs) do RouteViews, testando múltiplos dias em paralelo até localizar um arquivo válido, e aplica filtros configuráveis de inclusão/exclusão sobre AS-PATH e comunidades BGP.
- Uso de Apache Parquet como formato intermediário — arquivos colunares, imutáveis e com resumo estatístico embutido, escolhidos por reduzirem drasticamente o volume de I/O de disco comparado a alternativas como SQLite.
- Uso de Apache Arrow para trafegar os dados diretamente em memória (RAM) entre as etapas do pipeline, evitando serialização/desserialização desnecessária em disco.
- DuckDB embarcado para comparar pares de IXs — overlap de prefixos, consistência de caminho de AS e métricas por categoria de rede — processando as dimensões global, IPv4 e IPv6 em paralelo, tudo via SQL direto sobre os arquivos Parquet.
- Scripts em Python que leem os resultados finais e geram um dashboard HTML autocontido com gráficos interativos, servido por um pequeno servidor Flask.
Resultado
Pipeline completo — da coleta de dados brutos até a visualização final — capaz de processar grandes volumes de dados BGP de forma eficiente em disco e memória, entregando visibilidade histórica sobre a redundância de conectividade entre IXs brasileiros e internacionais.
Stack técnica
- Rust (tokio, reqwest, rayon, DuckDB embarcado)
- Python (pandas, matplotlib, Flask)
- Apache Parquet como formato intermediário
- Apache Arrow para transporte de dados em memória
- Google Charts para o dashboard
Destaques técnicos
- Download automático e resiliente de RIBs BGP históricas do RouteViews, testando múltiplos dias até achar um snapshot válido
- Tratamento de dados incompletos e com formatação inconsistente entre diferentes coletas/roteadores
- Uso de Parquet + Arrow para minimizar I/O de disco e maximizar velocidade de processamento em grande volume
- Motor de filtros configurável com lógica AND/OR sobre comunidades BGP e AS-PATH
- Comparação de overlap de rotas feita inteiramente em SQL sobre arquivos Parquet, via DuckDB embarcado
- Processamento paralelo nativo em Rust das três dimensões de análise (global, IPv4, IPv6)
- Classificação de redes por categoria de negócio (CDN, ISP, financeiro, governo) para segmentar a análise