Resumo:
A Cloudflare reduziu recentemente significativamente a memória cache usada pelo seu resolvedor DNS público 1.1.1.1, liberando aproximadamente 100 TB de memória em toda a rede. Essa otimização não envolve a substituição do hardware do servidor ou a remoção de módulos de memória, mas é obtida melhorando o método de armazenamento de software para armazenar dados DNS em cache.

Este trabalho gira principalmente em torno do Big Pineapple. Big Pineapple é a plataforma de cache da Cloudflare que oferece suporte ao resolvedor 1.1.1.1, firewall DNS e muitos outros serviços DNS. O engenheiro de sistema da Cloudflare, Sebastiaan Neuteboom, apresentou em um blog técnico cinco ajustes na base de código Rust que reduziram o espaço ocupado por um único registro de cache DNS típico de 953 bytes para 420 bytes.
A velocidade otimizada de execução do sistema também foi melhorada. Cloudflare disse que a taxa de transferência de inserção de cache aumentou de 625.000 itens por segundo para 893.000 itens por segundo, e a latência de consulta caiu de 828 nanossegundos para 670 nanossegundos. Ao longo da implantação, de meados de maio ao início de julho, o uso de memória do 99º percentil por instância caiu de 9,3 GB para 5,3 GB.
A Cloudflare afirma que a Big Pineapple armazena em cache mais de 250 bilhões de registros DNS o tempo todo. Em uma escala tão grande, mesmo uma pequena quantidade de memória desperdiçada por registro representa uma quantidade significativa. A empresa estima que para cada byte desnecessário ocupado em uma entrada de cache, todo o cluster de servidores consome mais de 250 GB de memória adicional.
Uma das mudanças importantes envolve os tipos Vec e String no Rust. Esses contêineres são projetados para expansão dinâmica, portanto, além dos dados reais, informações adicionais, como capacidade, são salvas. No entanto, o registro DNS não precisa ser expandido após ser inserido no cache. A Cloudflare então substituiu essas estruturas por fatias em caixa de tamanho fixo, removendo metadados que não eram mais úteis. Segundo a empresa, só esse ajuste economizou mais de 15 TB de memória.
Os engenheiros também redesenharam a forma como as respostas do DNS são organizadas na memória. Anteriormente, a Big Pineapple salvava três conjuntos de listas de registros para cada resposta; o novo design coloca todos os registros no mesmo buffer e, em seguida, usa um deslocamento de dois bytes para identificar a localização de cada registro.
O cache agora também não retém mais os nomes dos proprietários quando eles são simplesmente duplicatas do nome de domínio que está sendo consultado, mas é reconstruído quando a resposta é retornada. Além disso, o sistema salva dados de registro usando bytes brutos de formato de linha DNS com um prefixo de comprimento, resolvendo o problema de desperdício de espaço em designs anteriores. Anteriormente, um registro IPv4 A, que ocupava apenas 4 bytes, ocupava 144 bytes, assim como o relativamente raro registro NAPTR, o maior tipo de registro DNS armazenado em cache pela Cloudflare. A mudança para um formato de dados brutos de comprimento variável elimina a necessidade de registros mais curtos para reservar o mesmo espaço que os registros mais longos.
Os 100 TB de memória recuperados pela Cloudflare em todo o cluster de servidores equivalem aproximadamente à capacidade de memória de 130 servidores da 13ª geração. Cada um desses servidores está equipado com 768 GB de memória DDR5-6400. A Cloudflare considerou uma configuração de memória de 1152 GB para esta geração de servidores, mas desistiu após avaliar o custo da memória de maior capacidade.
Com esse espaço de memória, a Cloudflare planeja expandir o tamanho do cache DNS. Espera-se que manter mais registros localmente melhore as taxas de acerto do cache e reduza o tráfego de solicitações para servidores DNS autorizados.
Esta não é a primeira vez que a Cloudflare realiza otimização de eficiência de memória em larga escala. No ano passado, a empresa também reescreveu a camada FL2 responsável pelo processamento de solicitações em código Rust. Com o aumento dos preços da memória de servidor, desbloquear o potencial da infraestrutura existente através da otimização de software pode ser mais econômico do que simplesmente adicionar hardware.
Comentários