Imagine precisar consertar um avião… em pleno voo. É exatamente esse dilema que o GitHub vivia toda vez que precisava atualizar ou corrigir o próprio site — que, ironicamente, hospeda o código-fonte usado no processo de deploy. Para eliminar esse “nó górdio” de dependências circulares, a plataforma acionou o eBPF, tecnologia do kernel Linux capaz de inspecionar e alterar pacotes de rede em tempo real, sem impactar a performance do sistema.
O que é o problema (e por que ele atinge todo mundo)
Antes de qualquer lançamento, os engenheiros do GitHub executam scripts que buscam binários, verificam versões de serviços internos e baixam ferramentas de repositórios públicos — tudo isso a partir do próprio github.com. Se o site cai por conta de um bug em produção, esses scripts simplesmente não rodam, atrasando a correção e aumentando o tempo de indisponibilidade.
Esse efeito dominó é conhecido como dependência circular. Pode parecer um caso isolado do GitHub, mas qualquer empresa com pipelines que consultam serviços internos (Artefatory, Docker Registry, S3 privado etc.) está sujeita ao mesmo risco.
Por que o eBPF virou a arma secreta
Existiam soluções antigas — como bloquear todo o tráfego para domínios críticos ou criar réplicas em redes separadas —, mas elas geravam mais bola de neve do que ganhos. Com eBPF, o GitHub conseguiu:
- Monitorar chamadas de rede de maneira granular (pacote a pacote);
- Interceptar pedidos DNS e conexões suspeitas on-the-fly;
- Bloquear apenas o que ameaça a estabilidade, mantendo o restante do serviço ativo;
- Identificar qual processo ou comando disparou a requisição, facilitando o debug.
Como funciona na prática
O GitHub criou um cGroup exclusivo para o script de deploy. Dentro dele, dois mini-programas eBPF entram em ação:
- CGROUP_SOCK_ADDR – redireciona toda consulta DNS para um proxy local, onde é aplicada a lista de bloqueio dinâmica;
- CGROUP_SKB – analisa pacotes de saída e impede conexões a IPs/domínios proibidos, registrando PID e comando responsável.
Esse combo gera relatórios em tempo real, com dados como: WARN DNS BLOCKED domain=github.com pid=266767 cmd="curl github.com". Assim, o time sabe exatamente qual trecho de código introduziu a falha.
Ganhos imediatos e indiretos
Estabilidade: Deploys agora ocorrem mesmo se partes do GitHub estiverem fora do ar, reduzindo o MTTR (tempo médio de recuperação).
Segurança: Os mesmos ganchos eBPF podem limitar consumo de CPU e RAM do script, evitando que uma automação “fora da curva” derrube a instância.
Adoção futura: Ferramentas como cilium/ebpf e bpftrace democratizam a escrita de programas eBPF, permitindo que qualquer equipe replique o modelo.
Por que você deveria ligar para isso
Se você é devops, SRE ou mantém ambientes críticos, colocar eBPF no radar significa:
Imagem: Internet
- Menos uso de firewalls externos e mais lógica dentro do próprio host, reduzindo latência;
- Observabilidade profunda sem precisar recompilar o kernel ou reiniciar serviços;
- Possibilidade de criar políticas de rede “cirúrgicas”, algo impossível com iptables tradicional.
Para quem desenvolve jogos ou aplicações de alto desempenho, vale conferir se seu processador (especialmente linhas mais novas de AMD Ryzen e Intel Core) já roda distribuições atualizadas do Linux com suporte pleno a eBPF — isso abre espaço para otimizações em tempo real que vão além da segurança, incluindo monitoramento de latência e tunning de pacotes UDP.
Próximos passos para experimentar
Curtiu a ideia e quer testar agora mesmo?
- Instale uma distro recente (Ubuntu 24.04 LTS ou Fedora 40) — todas vêm com kernel 6.x pronto para eBPF.
- Clone o repositório
cilium/ebpfe rode os exemplos de packet counter em Go. - Use
bpftracepara inspecionar chamadas de sistema sem alterar uma linha do seu app.
Aliás, para quem prefere economizar tempo, já existem placas de rede com offload para eXpress Data Path (XDP) compatíveis com eBPF, como modelos recentes da Intel e Mellanox — uma compra bem-vinda se o seu ambiente precisa de inspeção acima de 100 Gbps.
No fim das contas, a lição do GitHub é clara: se você quer seus serviços no ar 24/7, trate dependências circulares como bugs críticos e coloque eBPF no seu arsenal antes que o próximo incidente aconteça.
Com informações de GitHub Engineering Blog