← projetos

projeto

IXSonar — Análise de Visibilidade BGP entre Pontos de Troca de Tráfego

em Sage Networks

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

Este site usa cookies essenciais (tema, preferências) e, com sua permissão, cookies de análise (Google Analytics) para entender como o site é usado. saiba mais