A Cloudflare está testando uma forma de aumentar a capacidade efetiva de sua rede de cache sem adicionar novo hardware, comprimindo determinados ativos de texto usando o algoritmo Zstandard dentro da infraestrutura baseada em Pingora. O protótipo, que a empresa chamou de Cache Transcoding, tem como objetivo reduzir o espaço ocupado pelos dados nos discos e o volume de dados transferidos entre as camadas de cache e os centros de dados.
Quando uma resposta elegível entra no cache, seus dados são convertidos em uma representação comprimida usando zstd antes de serem gravados no disco. Os ativos permanecem nesse formato enquanto estão no cache e durante a transferência pelo Tiered Cache, sendo descomprimidos antes de serem enviados ao cliente. Assim, o conteúdo do arquivo não é alterado; o Zstandard é um algoritmo de compressão sem perdas que, após a descompressão, restaura cada byte ao seu estado original.
Grande resultado diante de um custo de processamento limitado
Nos testes iniciais, o tamanho dos ativos elegíveis no disco caiu, em média, para cerca de um terço do tamanho original. A taxa de compressão no conjunto de testes controlado foi de 2,834 vezes. Já o custo de codificação foi de 4,31 nanossegundos por byte, ou cerca de 232 megabytes por segundo, pago uma única vez ao preencher o cache. Em contrapartida, o custo de descompressão foi de 1,56 nanossegundo por byte, ou cerca de 641 megabytes por segundo, pago a cada operação de entrega.
O experimento usa o nível 3 do Zstandard, considerado um ponto de equilíbrio entre velocidade de execução e tamanho do resultado. Segundo o modelo da Cloudflare, o aumento no consumo de CPU permaneceu em poucos por cento, dentro das premissas de tráfego e reutilização testadas pela empresa. Além disso, reduzir o tamanho dos dados permite que cada servidor mantenha um número maior de itens e diminui a probabilidade de conteúdo útil ser expulso do cache por consumir mais espaço do que o necessário.
Por que a Cloudflare não comprime tudo?
O mecanismo não tem como alvo todos os tipos de conteúdo. Imagens, vídeos e fontes geralmente já são comprimidos e representaram 21,4% das solicitações na amostra de tráfego, mas corresponderam a 63,3% do total de bytes. Recomprimir esses dados poderia consumir CPU sem proporcionar uma economia significativa.
Por outro lado, HTML, JSON, CSS e JavaScript representaram cerca de 67,3% das solicitações e 22,3% dos bytes. Cerca de 71% dessas respostas de texto chegavam da origem sem Content-Encoding, o que as tornava candidatas à compressão. O protótipo é limitado a respostas 200 OK que não especificam Content-Encoding, possuem um tipo de conteúdo textual compressível e têm um comprimento conhecido de pelo menos 4 KiB.
Solicitações de intervalos parciais, respostas previamente comprimidas pela origem, solicitações de range, corpos com comprimento desconhecido e conteúdo binário são deixados inalterados. A Cloudflare constatou que o limite de 4 KiB exclui um grande número de solicitações pequenas, mas elimina apenas cerca de 1% dos bytes que, de outra forma, seriam elegíveis.
Como o mecanismo funciona entre as camadas de armazenamento?
Quando ocorre uma falha completa no cache, a camada superior busca os dados não comprimidos na origem, depois os comprime uma vez e os armazena no formato zstd. Esse formato comprimido é transferido para a camada inferior, que o mantém e o descomprime apenas no caminho da solicitação destinado ao cliente. Se o item existir somente na camada superior, ele poderá ser transferido para a camada inferior sem retornar à origem.
Quando o item está presente na camada inferior, não há necessidade de nova transferência de rede ou codificação; os dados zstd são lidos do disco, descomprimidos e então encaminhados ao caminho da resposta. O sistema registra nos metadados que o item está armazenado em formato comprimido, impedindo que ele seja comprimido novamente ao transitar entre as camadas de armazenamento.
Leitura da certi.news: o que o experimento realmente comprova?
O experimento mostra que reduzir o tamanho dos dados dentro da própria camada de armazenamento pode ter um efeito cumulativo maior do que melhorar apenas o processo de preenchimento do cache. O custo da compressão é pago quando o item entra, enquanto as economias de armazenamento e largura de banda se repetem sempre que ele é reutilizado. Isso é especialmente relevante para operadores de redes de distribuição em larga escala, nas quais a capacidade local está relacionada ao volume de conteúdo que pode ser mantido, e a transferência de dados entre as camadas está relacionada ao consumo da rede interna.
Entretanto, os resultados não significam que a taxa de 2,8 vezes represente todo o conteúdo da internet ou toda a infraestrutura da Cloudflare. O teste de desempenho baseou-se em mais de um milhão de solicitações por meio de dez servidores de cache, mas usou um conjunto experimental composto por dois itens com cerca de 195 e 272 KiB, que eram claramente compressíveis. A empresa reconhece que é necessário um conjunto mais amplo de tipos e tamanhos de conteúdo antes que a taxa possa ser considerada representativa de toda a frota.
A Cloudflare planeja testar níveis mais altos do zstd, ampliar o escopo de conteúdo e tamanhos, ajustar as condições de elegibilidade e estudar solicitações de range e respostas previamente comprimidas. Portanto, o Cache Transcoding permanece, neste artigo, um protótipo bem-sucedido dentro de condições específicas, e não um anúncio de implementação final para todo o tráfego da Cloudflare.