Para acompanhar o crescente volume de conteúdo de mídia, a plataforma Verizon Media, agora Edgio Media, investiu na expansão da nossa pegada global de cache. Só em 2019, adicionámos mais de 25 Tbps de capacidade, sete POPs globais e perto de 900 ligações de última milha. Embora eficaz para melhorar o desempenho, a capacidade bruta não é suficiente, nem é um modelo de negócio sustentável para satisfazer a crescente procura global de conteúdo em streaming.
Para maximizar a disponibilidade da nossa capacidade de rede, investimos igualmente em tecnologias, processos e ferramentas que mantêm os custos operacionais e de infraestrutura sob controle. A nossa equipa de investigação empurra continuamente o limite das tecnologias de armazenamento em cache, aplicando e refinando processos para dar aos nossos operadores de rede um controlo granular sobre como, quando e onde o conteúdo é armazenado em cache.
Estratégias de Caching Modernas
O objetivo de qualquer estratégia de armazenamento em cache é manter o conteúdo mais popular no cache, removendo de forma rápida e eficiente o conteúdo menos popular. Ao longo dos anos, pesquisadores e desenvolvedores de software desenvolveram inúmeras estratégias destinadas a resolver o desafio do armazenamento em cache. Estes variam de relativamente simples a extremamente complexos. Algumas das estratégias mais populares incluem:
- O menos usado recentemente (LRU)
- Menos frequentemente usado (LFU)
- Primeira entrada, primeira saída (FIFO)
Seria conveniente se houvesse uma única estratégia de armazenamento em cache para governar todas as situações. No entanto, essa solução ainda não foi desenvolvida, e a eficácia de uma estratégia específica pode variar muito dependendo do tamanho do servidor e do disco, padrões de tráfego e outros fatores. Com base em testes extensos, descobrimos que a LRU oferece o melhor compromisso entre a taxa de acerto e a E/S do disco, fornecendo 60% menos gravações do que a FIFO, mantendo altas taxas de acerto. Além disso, para os tamanhos de disco usados na nossa CDN, a LRU funciona a par de políticas mais complexas como a S4LRU (Quadruply-segmentado LRU). Podem obter mais detalhes neste artigo que publicámos no ano passado na Conferência de Medidas Passivas e Activas (PAM), realizada em Porto Varas, no Chile.
Estratégia de Caching em Evolução com o LRU Híbrido
Embora a LRU funcione muito bem para o nosso ambiente, estamos sempre à procura de formas de impulsionar a inovação e melhorar o desempenho do cliente. Isto levou a uma nova capacidade que recentemente adicionamos à nossa plataforma chamada LRU híbrida. Chama-se híbrido porque acrescenta uma camada de abstração em cima da LRU. Se não usarmos a funcionalidade híbrida, o sistema continua a funcionar normalmente, por isso é muito fácil de entender e ativar ou desativar.
O que estamos a fazer com a abordagem híbrida é ajustar o sistema de LRU para nos dar mais controlo sobre conteúdos específicos. Por controlo, queremos dizer ter a capacidade de armazenar explicitamente algum conteúdo por um período mais longo ou mais curto com base em configurações pré-definidas.
Isto é importante devido às mudanças que ocorrem no cenário da transmissão de vídeo, particularmente o rápido crescimento da transmissão ao vivo. Só a nossa rede já hospedou centenas de milhares de eventos ao vivo, muitos dos quais são entregues a milhões de espetadores simultâneos. Apesar da enorme popularidade desses eventos, uma vez que um fluxo de eventos ao vivo é concluído, não é provável que seja transmitido novamente em qualquer volume significativo. Com a LRU híbrida, podemos especificar um período de cache mais curto, libertando valiosos recursos de cache para outros meios e conteúdos.
Estamos a experimentar bloquear determinados conteúdos e a garantir o melhor esforço de que permanecerão na nossa cache. Isso pode ser particularmente útil para transmissões de vídeo ao vivo com prazo de validade limitado, mas pode ainda estar em alta demanda por algumas horas após um evento ao vivo, que se torna um pedaço normal de conteúdo de vídeo sob demanda. Esta funcionalidade também pode ser usada em condições em que um provedor de conteúdo quer explicitamente bloquear algum conteúdo por um período de tempo específico para que ele não atinja seus servidores de origem.
A LRU híbrida também nos permite armazenar algum conteúdo por um longo período de tempo. Isso é útil se a origem estiver localizada em uma parte remota do mundo, por exemplo, o que pode levar a uma baixa qualidade de vida quando a CDN não tiver solicitado conteúdo em seu cache. Nesses casos, uma nova solicitação de cliente acionaria uma falha de cache que a origem precisará preencher, resultando potencialmente em buffer. Envelhecer este conteúdo mais devagar vai ficar no cache por mais tempo e reduzir o número de preenchimentos de origens.
Parâmetros de utilização da LRU híbrida
A LRU híbrida consiste em dois parâmetros sintonizáveis que nos dão a capacidade de atrasar ou acelerar o despejo ou a remoção de conteúdo específico das nossas caches:
- Taxa de envelhecimento
- Tempo para viver (TTL)
O parâmetro Time to Live (TTL) reduz a idade de um item em uma quantidade específica. Funciona dando uma pontuação de despejo extremamente baixa a um item durante a duração definida por esta variável. Isso força um item a ficar no cache por uma duração específica desde que foi acessado pela última vez. O padrão é 0 segundos, o que significa nenhuma preferência especial.
Os gráficos abaixo mostram como estes parâmetros sintonizáveis funcionam para ajustar o tempo de permanência do conteúdo no cache. Considerar estes parâmetros como botões ou botões que podem ser ajustados com precisão para corresponder às exigências de conteúdo é útil. Os gráficos mostram como os objetos envelhecem ao longo do tempo nas caches do servidor enquanto esperam para serem acedidos.
Primeiro, vamos ver a taxa de envelhecimento. Os objetos tradicionais da UERR envelhecem ao mesmo ritmo ao longo do tempo. Mas à medida que aumenta a taxa de envelhecimento, os itens envelhecem mais rapidamente ao longo do tempo. Da mesma forma, quando viramos o botão na direção oposta, os itens envelhecem mais lentamente do que a UERU. Rode o botão o suficiente, e os itens de envelhecimento lento nunca excedem o limite de despejo, como mostra a figura 1. Com esse controle, podemos remover itens mais cedo para libertar espaço ou manter os itens no disco mais tempo, conforme necessário, para reduzir as trações de origem ou por outras razões.
Em contraste com a taxa de envelhecimento, o TTL permite-nos alterar a capacidade de cache de um determinado item. Durante a duração definida usando a função TTL, um item não envelhece enquanto está no disco, por isso é menos provável (mesmo muito improvável) ser despejado. Depois que o TTL expira, o item pode começar a envelhecer tanto da maneira tradicional de usar as UCRs, como com o envelhecimento rápido ou com o envelhecimento lento (dependendo de como o operador o configura). Na figura abaixo, o TTL com envelhecimento lento manteve um item no disco ao ponto de não ultrapassar o limite de despejo de cache. No lado oposto, o TTL assegurou que um fluxo de vídeo ao vivo era armazenado em cache durante, pelo menos, a duração do evento, mas depois disso foi rapidamente removido do disco usando o envelhecimento rápido.
Na maioria dos casos, alterar o valor da taxa de envelhecimento é o método preferido para ajustar o tempo para quando o conteúdo é despejado do cache porque pode facilmente se adaptar à quantidade de tráfego em um disco. O TTL, por outro lado, é mais agressivo e pode efetivamente bloquear uma parte de um disco até que o conteúdo seja lançado. No entanto, como estes exemplos ilustram, os dois controlos podem ser usados em conjunto para alcançar de forma fiável o efeito desejado.
Estratégias de Caching de Avanço
Uma ampla estratégia de armazenamento em cache, como a LRU, é como um grande martelo, tratando todo o conteúdo de forma igual, independentemente do tipo ou tamanho do ficheiro. Se um arquivo não for atingido dentro de um determinado tempo, ele será excluído do cache. Enquanto isso, outros arquivos (como transmissões/eventos de vídeo ao vivo de uma só vez) que dificilmente conseguissem acertos no futuro ficam no cache, ocupando espaço. A LRU híbrida acrescenta um nível de refinamento com a intenção de reduzir a pegada de cache desnecessária e melhorar a taxa de acerto do cache. É como usar um pequeno martelo ou chave de fenda para controlar com mais precisão quais arquivos devem ficar no cache e quais devem ser removidos.
Atualmente, a LRU híbrida é experimental e requer que um operador ajuste os prazos de despejo para o conteúdo. Olhando para o futuro, estamos a investigar se os perfis de pedidos e outros fatores podem ser aproveitados para fazer ajustes automaticamente. Os eventos ao vivo, por exemplo, têm muitos perfis diferentes – milhares de pedidos para os mesmos segmentos de ficheiros que entram ao mesmo tempo – depois ficheiros de vídeo a pedido. Também estamos a tentar fazer ajustes com base no tamanho do ficheiro. Quer manter ficheiros grandes no disco para minimizar o tráfego de rede ou manter ficheiros mais pequenos à mão para otimizar para uma taxa de acerto de cache?
Apesar de estarmos confiantes no desempenho e maturidade do nosso sistema de armazenamento em cache e estratégias, a necessidade de otimizar recursos finitos continua a ser um esforço importante e contínuo.