ATENÇÃO: Esta documentação está deprecated, desde que adotamos SSL na entrega de vídeos. Estamos
mantendo-a no ar somente por razões históricas. NÃO FUNCIONA. Está em nosso roadmap a criação
de um novo projeto focado em oferecer cache em provedores, stay tunned :-)
#Introdução
A documentação a seguir descreve o que fazer para cachear vídeos ao vivo da Globo.com.
A entrega de vídeo ao vivo da Globo.com usa o protocolo HLS de acordo com a RFC-2616 do HTTP 1.1: seções 13 e 14. Portanto, basta que seu servidor de proxy seja compatível com o padrão para que o cache seja efetivo.
Cache é o mecanismo para armazenamento temporário de objetos, neste caso, pedaços de vídeos. Uma definição mais formal e completa sobre web-caching pode ser encontrada na wikipedia.
Web cache é um armazenamento temporário no disco rígido de páginas web, imagens e outros documentos utilizando técnicas de cache para reduzir o uso largura de banda disponível, aumentar a velocidade do acesso, entre outras vantagens.
#Motivações para uso
A correta utilização de um cache resulta em:
- Economia de banda para ambos lados. [1]
- Dimuição do atraso percebido. [1]
- Melhoria da experiência do usuário, principalmente em momentos de pico.
#Funcionamento
Basicamente, quando um usuário atrás de um proxy configurado acessa um vídeo, ele realiza várias requisições http, possibilitando ao proxy armazenar respostas para requisições idênticas, evitando o tráfego de saída para um arquivo anteriormente requisitado.
Um possível fluxo para exemplificar o funcionamento (USR1 e USR2 são dois usuários distintos na rede, PROXY um servidor proxy):
1. USR1 solicita vídeo 23.ts ao PROXY
2. PROXY ainda não tem cache para objeto 23.ts
3. PROXY solicita vídeo 23.ts a GLOBO.COM
4. PROXY armazena resposta da globo e atende USR1
5. USR2 solicita pedaço de vídeo 23.ts ao PROXY
6. PROXY responde diretamente ao USR2
#Implementação
Para implementar um proxy você pode instalar o Squid. Instruções de instalação podem ser encontradas em seu site oficial.
Na instalação padrão, o Squid2 já faz caching baseado no cabeçalho das respostas, o que já atende aos vídeos ao vivo da Globo.com. Um exemplo de resposta pode ser visto abaixo:
< HTTP/1.0 200 OK
< Server: nginx
< Date: Fri, 15 Aug 2014 19:06:01 GMT
< Content-Type: video/mp2t
< Content-Length: 122200
< Expires: Fri, 15 Aug 2014 22:06:01 GMT
< Cache-Control: public, max-age=10800
< Via: 1.0 localhost (squid/3.1.19)
< Connection: keep-alive
Neste caso, o Squid vai seguir as regras do cabeçalho Cache-Control:public, max-age=10800 que informa que este recurso pode ser cacheado e por quanto tempo.
Uma observação importante é que nem todos os vídeos ao vivo da Globo.com são cacheáveis.
##Considerações
###O que deve ser cacheado?
As respostas do domínio *.glbvid.com e com extensão ts, mas sempre respeitando os cabeçalhos.
###O que não deve ser cacheado?
Os arquivos terminados com a extensão m3u8 e bin. Fazer caching desses arquivos pode degradar a experiência do usuário.
Execute os seguintes comandos:
$ git clone https://github.com/globocom/Globo-Live-Cache
$ cd Globo-Live-Cache
$ vagrant upO comando vagrant up vai provisionar uma máquina virtual devidamente configurada com Squid3.
Nesta configuracão, todos os usuários tem acesso irrestrito.
Depois, configure seu browser para apontar para o proxy 192.168.33.10:3128. Caso queira verificar seu funcionamento:
$ vagrant ssh
vagrant@precise32: $ sudo tail -f /var/log/squid3/*logVale ressaltar que é possível exportar a máquina virtual do Vagrant para provedores cloud, como por exemplo: Amazon EC2 e Digital Ocean.
#Conclusão
Em testes realizados, percebemos que quando 10 usuários utilizam o proxy para acessar vídeos ao vivo da Globo.com, o ganho é de aproximadamente 90% de banda sobre vídeos. Aumentando o número de usuários para 1000, o ganho chega a 99,9%. Assim, se considerarmos um arquivo de vídeo no bitrate mais alto, o ganho pode ser em torno de 1Gb por pedaço de vídeo.
Os números acima são estimativas feitas a partir de testes com ab simulando usuários simultâneos com conexões para o maior bitrate.
- [1]: Wikipedia - Web cache
- [2]: *Instalação padrão do squid3, considerando as devidas permissões
