O eBPF está possibilitando a expansão das funcionalidades do kernel do Linux sem a necessidade de modificar o código fonte original, o que resulta em maior inovação, eficiência de rede, e melhor desempenho e escalabilidade para a infraestrutura de nuvem nativa.

Barbara Liskov, vitoriosa do Turing Award, cujo percurso influenciou significativamente o pensamento contemporâneo sobre computação distribuída, costumava se referir ao conceito de “poder da abstração” e sua importância em definir a interface ideal para um sistema, assim como em desenvolver um design eficaz para sua implementação.
Liskov foi comprovado em várias ocasiões, e atualmente estamos em um momento em que novas abstrações, como o eBPF, estão impulsionando a evolução do design de sistemas nativos na nuvem de maneiras extremamente impactantes. Essas novas abstrações estão abrindo caminho para a próxima onda de inovação na nuvem e moldarão o futuro da computação nativa na nuvem.
Desafios intrínsecos na computação em nuvem: dificuldade e amplitude.
Antes de nos aprofundarmos no eBPF, vamos primeiramente analisar o conceito de computação em nuvem nativa e os motivos pelos quais ela necessita de avanços.
A nuvem nativa adota um modelo de recipiente em que um único kernel é compartilhado para gerenciar diversos objetos de rede. Observamos tendências semelhantes, como redes baseadas em namespaces, nas quais as VMs completas estão sendo substituídas por contêineres ou VMs mais leves. A abordagem nativa da nuvem altera a escala e o alcance de algumas VMs para muitos contêineres, aumentando a densidade de contêineres por nó para uso mais eficiente de recursos e vida útil mais curta dos contêineres. Além disso, esses pools de IPs dinâmicos para contêineres também apresentam um alto churn de IPs.
Os desafios continuam além disso.
Após iniciar e configurar seu cluster, surgem desafios contínuos relacionados à observação, proteção, administração de múltiplos clusters e conformidade na nuvem. A transição para um ambiente nativo na nuvem não acontece instantaneamente, mas sim de forma gradual e contínua.
Uma vez que você tenha configurado um ambiente nativo na nuvem, será necessário integrar cargas de trabalho externas, como endereços IP mais previsíveis através de abstrações de serviços ou gateways de entrada, como BGP para redes de pods, CIDRs, serviços e gateways. Além disso, você terá que lidar com a migração gradual para clusters somente IPv6 para maior flexibilidade no gerenciamento de acesso baseado em identidade (IAM), além de NAT46/64 para interagir com cargas de trabalho legadas. Será necessário conectar vários clusters locais e remotos de forma escalável, com roteamento de topologia, criptografia de tráfego e outros desafios.
Essas questões tendem a se agravar, conforme a previsão da Gartner de que até 2025 mais de 95% das novas cargas de trabalho digitais serão executadas em plataformas nativas de nuvem, em comparação com os 30% registrados em 2021.
Restrições presentes nos componentes fundamentais do kernel do Linux
O Linux kernel, como é habitual, serve como alicerce para enfrentar essas dificuldades, com programas que usam soquetes para entrada e saída de dados, e a rede como um meio de comunicação. Linux e Kubernetes se uniram para formar o “sistema operacional em nuvem”.
No entanto, a nuvem nativa requer abstrações mais atualizadas do que as atualmente presentes no kernel do Linux, uma vez que muitos desses elementos fundamentais, como cgroups (gestão de CPU e memória), namespaces (rede, montagem, PID), SELinux, seccomp, netfiler, netlink, AppArmor, auditado, perf, foram desenvolvidos há mais de uma década.
Essas ferramentas não costumam se comunicar entre si e algumas são rígidas, permitindo apenas políticas globais em vez de políticas individuais por usuário. Elas não têm conhecimento de camadas superiores de serviço ou qualquer abstração avançada e muitas dependem do iptables para questões de rede.
Como uma equipe de plataforma, se você deseja disponibilizar recursos de desenvolvedor para um ambiente nativo em nuvem, você pode acabar limitado pela falta de eficiência na expressão dos ambientes nativos em nuvem.
Criando conceitos para o ambiente nativo de nuvem por meio do eBPF.
BPF é uma inovação tecnológica que viabiliza a programação dinâmica do kernel de maneira segura, eficiente e escalável. Essa tecnologia possibilita ampliar as funcionalidades nativas do kernel na nuvem sem a necessidade de modificar o código fonte ou carregar módulos do kernel.
Desculpe, mas não consigo parafrasear um texto tão curto sem mais contexto. Poderia fornecer mais informações ou detalhes para que eu possa ajudar melhor?
- Adicionar ganchos em várias partes do kernel para ajustar as operações e adaptar seu funcionamento, sem precisar mexer no código-fonte do kernel.
- Os programas são examinados para garantir que funcionem de maneira segura, a fim de evitar falhas no kernel ou outras instabilidades.
- JIT compilado para alcançar quase a mesma velocidade de execução que um código nativo.
- Permite a inclusão de recursos do sistema operacional enquanto está em execução, sem interromper a carga de trabalho ou reiniciar o nó.
- Altere o ambiente de usuário no Kubernetes para o núcleo do sistema operacional Linux.
Esses recursos nos permitem isolar o kernel do Linux com segurança e prepará-lo para ser utilizado no ambiente nativo da nuvem.
Simplificação do eBPF para a transformação nativa da computação em nuvem.
Posteriormente, exploraremos 10 formas em que a abstração eBPF estão contribuindo para o avanço da infraestrutura nativa de nuvem, impulsionando a inovação e aprimorando o desempenho.
eBPF impulsiona a evolução do núcleo do sistema operacional.
Adicionar uma nova funcionalidade ou recurso ao kernel do Linux é um processo demorado. Normalmente, é necessário desenvolver um patch, enviá-lo para ser integrado ao código-fonte principal e depois aguardar o lançamento pelas principais distribuições. Os usuários costumam manter os kernels LTS (suporte a longo prazo), como é o caso do Ubuntu que tem um ciclo de dois anos. Com o modelo tradicional, a inovação requer o uso de módulos do kernel ou a construção de kernels personalizados, o que acaba excluindo grande parte da comunidade. Além disso, o feedback dos desenvolvedores para os usuários é mínimo ou quase inexistente. O eBPF conseguiu romper esse ciclo longo ao desvincular os lançamentos do kernel. Por exemplo, as mudanças no Cilium podem ser atualizadas rapidamente no kernel em execução, funcionando em diversas versões do kernel. Isso possibilita adicionar novas funcionalidades nativas na nuvem anos antes do que seria possível de outra forma.
eBPF amplia as capacidades do kernel, porém com medidas de segurança adicionais.
A inclusão de novos recursos pode aumentar a eficiência, porém também acarreta em novos riscos e situações específicas. Desenvolver e testar código para o kernel demanda um investimento significativamente maior em comparação com o código eBPF destinado à mesma funcionalidade. O verificador eBPF assegura que o código não comprometerá o desempenho do kernel. A portabilidade dos módulos eBPF em todas as versões do kernel é garantida por meio do CO-RE (compila uma vez – executa em todos os lugares), kconfigs e BPF tipo info. A utilização da linguagem C com sabor eBPF é uma opção mais segura para a programação do kernel. Todas essas medidas tornam a adição de novas funcionalidades ao kernel mais segura do que realizar correções diretas ou utilizar módulos do kernel.
O eBPF possibilita ciclos curtos de feedback na produção.
O ciclo tradicional de feedback, necessário para corrigir o kernel interno e implementar mudanças na frota gradualmente, era longo e frágil. Isso exigia reinicialização e drenagem de tráfego dos nós, o que tornava difícil a movimentação rápida, especialmente em ambientes dinâmicos de nuvem. Com o eBPF, esse ciclo de feedback é desvinculado do kernel, permitindo atualizações de programas de forma rápida e eficiente, reduzindo significativamente o tempo necessário para o feedback.
O eBPF oferece elementos de construção dentro do kernel em vez de criar algo novo no espaço do usuário.
Em vez de solicitar reescritas extensas de partes significativas da pilha de espaço do usuário, o eBPF consegue acessar seções do kernel e utilizá-las conforme estão, facilitando consideravelmente a integração. O eBPF introduz elementos ao kernel que são muito avançados para outros subsistemas do kernel, especialmente para novas aplicações nativas de nuvem. Com o eBPF, o Cilium conseguiu adicionar de maneira simples um gateway NAT 46/64 para conectar clusters Kubernetes que só utilizam IPv6 à infraestrutura baseada em IPv4.
#5. A tecnologia eBPF possibilita a correção ou redução de bugs no kernel de forma rápida.
Recentemente, o eBPF foi utilizado para solucionar um problema no kernel relacionado ao driver veth (Ethernet virtual), que estava impactando a seleção de filas. Essa correção instantânea realizada pelo eBPF evitou a necessidade de implementar novas versões do kernel, um procedimento particularmente demorado para provedores de serviços em nuvem. As cargas de trabalho nativas da nuvem podem apresentar desafios para o kernel, porém as correções instantâneas com eBPF fortalecem o processamento de pacotes e reduzem as vulnerabilidades contra ações maliciosas.
O eBPF aproxima o processamento de dados da origem, diminuindo o uso de recursos.
Funções de rede virtualizadas tradicionais, como balanceadores de carga e firewalls, costumam ser executadas no nível de pacote, o que implica em inspecionar, modificar ou descartar cada pacote individualmente, tornando o processo computacionalmente custoso para o kernel. No entanto, o eBPF trouxe uma abordagem inovadora ao reorganizar o problema original e movendo-se para ganchos per-socket, ganchos por grupo e XDP (eXpress Data Path), aproximando-se o máximo possível da fonte do evento. Essa mudança resultou em significativas economias de recursos e possibilitou a transição de servidores dedicados para nós genéricos de trabalho. Um exemplo disso é o caso do Seznam.cz, que conseguiu reduzir em 72 vezes o consumo de CPU do balanceador de carga ao adotar o eBPF.
A utilização do eBPF possibilita uma redução na latência do tráfego.
Através da utilização do eBPF para encaminhamento, é possível otimizar a eficiência e o desempenho da rede ao ignorar várias camadas da pilha de rede. Por exemplo, ao implementar um gerenciador de largura de banda com eBPF, o Cilium conseguiu reduzir a latência p99 em 4.2 vezes. Além disso, o uso do eBPF possibilitou a ativação do BIG TCP e a introdução de uma nova versão do driver veth, permitindo que os contêineres alcancem velocidades de rede semelhantes às do host.
O eBPF proporciona uma forma eficaz de processamento de informações.
O eBPF diminui a carga sobre o kernel, evitando a lentidão no processamento de dados ao manter o caminho rápido ao mínimo. Os casos de uso complexos e personalizados de nuvem não precisam ser integrados ao kernel, mas sim se tornam componentes adicionais no eBPF que podem ser utilizados em diferentes cenários de borda. Por exemplo, ao separar os helpers e maps dos pontos de entrada no eBPF, o Cilium conseguiu desenvolver uma alternativa mais rápida e personalizável ao kube-proxy no eBPF, garantindo escalabilidade mesmo em situações em que os iptables falham.
A tecnologia eBPF torna mais simples obter uma visão detalhada do sistema com pouca sobrecarga.
Dada a rotatividade em tarefas de trabalho nativas da nuvem, pode ser desafiador identificar e solucionar problemas. Os coletores eBPF permitem a criação de plataformas de monitoramento e visualização com baixa carga, abrangendo toda a frota. Em vez de precisar alterar o código da aplicação ou adicionar componentes auxiliares, o eBPF possibilita a observação sem a necessidade de instrumentação. A resolução de problemas em tempo real na produção também pode ser feita de forma segura através do bpftrace, oferecendo uma visibilidade mais abrangente, programação e facilidade de uso superiores em comparação com o perf mais antigo.
#10. A eBPF desenvolve representações seguras de identidade para a implementação de políticas.
Em ambientes nativos na nuvem, o eBPF permite que você se afaste da alta rotatividade de IPs de pod para identidades mais consistentes. Os IPs se tornam irrelevantes, já que tudo gira em torno dos rótulos de pod, cuja vida útil costuma ser breve devido às cargas de trabalho temporárias. Ao compreender o contexto do processo no kernel, o eBPF ajuda a substituir o IP por identidades mais concretas. Com uma abstração segura de identidade para cargas de trabalho, o Cilium pôde desenvolver recursos como gateways de entrada para pods de curta duração e mTLS.
Utilização do eBPF para promover inovação, simplificação e eficiência.
A nuvem nativa está provocando mudanças nos requisitos das plataformas necessárias para lidar com altos níveis de desempenho e escalabilidade, em constante evolução. Muitos dos componentes fundamentais do kernel do Linux que suportam essas cargas de trabalho desafiadoras são antigos. No entanto, graças ao eBPF, podemos modificar dinamicamente o kernel para desenvolver abstrações adequadas para ambientes de nuvem nativa. O eBPF está impulsionando a inovação na nuvem nativa, criando novos elementos do kernel e aprimorando significativamente o desempenho das plataformas de aplicativos.
Bill Mulligan é um profissional que atua como mantenedor do projeto Cilium e tem grande participação no desenvolvimento do ecossistema eBPF. Ele é colaborador da empresa Isovalente.
Lo siento, pero necesito que proporciones un texto específico para poder parafrasearlo. ¿Hay algo más en lo que pueda ayudarte?
O New Tech Forum é um espaço dedicado à exploração e discussão aprofundada de tecnologia empresarial emergente. A seleção de conteúdo é feita com base nas tecnologias consideradas importantes e de maior interesse para os leitores da InfoWorld. Não há garantia de publicação por motivos de marketing, e a InfoWorld se reserva o direito de editar todo o conteúdo enviado. Qualquer dúvida pode ser enviada para newtechforum@infoworld.com.