Essa palestra apresenta a plataforma de vídeos do UOL, projetada para atender à grande audiência de todo o portal, bem como seus parceiros, com baixo custo e alta disponibilidade. Descrevemos a abordagem técnica utilizada para desenvolver um servidor HTTP específico para vídeos em download progressivo: o “Balaio”.
Contamos o histórico tecnológico da plataforma desde 2007: quais soluções de mercado eram anteriormente adotadas, os pontos fortes e fracos de cada solução – e os principais motivos que nos levaram a desenvolver uma aplicação internamente, reduzindo e especializando o escopo de uma tarefa conhecida que é servir arquivos por HTTP.
São também explicadas a estratégia de balanceamento de carga, a distribuição lógica e física das aplicações, as técnicas para caching de objetos, os motivos para se ter adotado Java e os frameworks utilizados, além dos resultados alcançados.
Plataforma de vídeos do UOL : Desenvolvimento de Cache+Proxy de alta performancePlataforma videosuol mais
1.
2. Plataforma de vídeos UOLMais
Load Balacing + Proxy + Cache de Arquivos
George Vieira Jr – gvieira@uolinc.com
3. Plataforma de Vídeos UOLMais 22/04/2012
Agenda
•O que é o UOLMais
•Problemas do passado
•Soluções avaliadas
•Premissas e desafios para o sistema
•Solução UOL
●
Resultados
●
Croupier
●
Balaio
4. Plataforma de Vídeos UOLMais 22/04/2012
UOLMais
• Plataforma de conteúdo multimídia do UOL
●
Vídeo, Fotos, Áudio, Slides, Texto
• mais.uol.com.br
●
Administração/visualização do conteúdo
●
Usuários comuns (assinantes e visitantes)
●
Usuários editoriais (internos e parceiros)
• tvuol.uol.com.br
●
Conteúdo editorial do UOL
• Parceiros UOL
●
band.com.br, folha.com, TV Caras, TV Trama, etc.
7. Plataforma de Vídeos UOLMais 22/04/2012
Características do Sistema
•Variações de tamanhos de arquivos de 5 MB a 4 GB
•Perfil de clientes por tipo de mídia
●
Banda dos usuários heterogênea
●
Conexões de longa duração em um protocolo sem suporte inerente a
falhas de conexão
•Acesso em grande parte do acervo diariamente
•Longtail
•Thundering herd
- Vídeos repentinamente populares
•Interface com o storage é HTTP / DAV
9. Plataforma de Vídeos UOLMais 22/04/2012
Problemas – Longtail
•Longtail acentuado
●
64% das mídias são chamadas apenas 1 vez por dia
●
73% dos requests se concentram nas 350 mídias mais vistas.
73%
27%
10. Plataforma de Vídeos UOLMais 22/04/2012
0
10000
20000
30000
40000
50000
60000
70000
80000
90000
Quantidade de Requests
Meses
QuantidadedeMídias
Problemas – Imprevisibilidade sazonal
11. Plataforma de Vídeos UOLMais 22/04/2012
Soluções Avaliadas
●
Disk Cache grava em hash
Nginx
●
Seek não funciona com proxy
●
Arquivo precisa ser copiado inteiro antes de ser lido
Lighttpd
●
Seek não funciona com proxy
●
Apresentou degradação na taxa de transferência com proxy
●
Content-Lenght falhava com proxy
•Bom
●
Boa experiência com cache de imagens
●
Na versão 3 só faz 1 fetch com backend
Varnish
•Ruim
●
Não performa em disco
●
Vídeos entram todos em arquivos binários (heap)
12. Plataforma de Vídeos UOLMais 22/04/2012
Premissas e Desafios
•Não deixar vídeo “quente” sair do cache
•Aliviar carga no storage (uso máximo 60% capacidade)
•Seek
•Vídeos HD (720p, 1080p)
•Melhorar experiência do usuário
•Concluir os pontos acima com o menor custo possível
•Cache eficiente (hit-rate)
13. Plataforma de Vídeos UOLMais 22/04/2012
Solução UOL
Por que não agrupar as boas
características de cada solução em
uma única?
14. Plataforma de Vídeos UOLMais 22/04/2012
Resultados
•Queda de IO nos storages
Início da migração ->
(Fevereiro 2012)
Hoje ->
Resultados
15. Plataforma de Vídeos UOLMais 22/04/2012
Resultados
•Hit Rate Alto
Antes da migração ->
(Agosto 2011)
Hoje ->
Resultados
16. Plataforma de Vídeos UOLMais 22/04/2012
Resultados
•Clientes
●
Assistem a todos os tipos de mídia com qualidade
•Produção
●
Melhor aproveitamento dos hardwares
●
Redução de incidentes (~2.000 mensais para 0)
●
Crescimento de tráfego em mais de 120%
●
Melhor uso da capacidade de storage
●
Flexibilidade para lidar em tempo real com
balanceamento e thundering herd
Resultados
17. Plataforma de Vídeos UOLMais 22/04/2012
Olhando debaixo do capô
Revelando a “mágica”
19. Plataforma de Vídeos UOLMais 22/04/2012
Storage 1
(Spare)
Cenário Inicial
browser
Squid 1 Squid 2 Squid 3
...
DNS
Storage 1 Storage 2 Storage N
storage.mais.uol.com.br
Autorização
e distribuição
round robin DNS Request pelo id da midia
* Tradução de mídia por file
* Validação de visibilidade
* Distribuição e esparsamento
no file system
Proxy reverso dos files
nos storagesStorage 2
(Spare)
Storage N
(Spare)
20. Plataforma de Vídeos UOLMais 22/04/2012
Croupier – Mudança na arquitetura
browser
Cache 1 Cache 2 Cache N
...
API do player requisita
qual servidor de cache
a mídia se encontra.
Croupier
Usando a regra de distribuição,
informa diretamente o domínio
do servidor a ser acessado.
videoN.mais.uol.com.br
Storage 1
(Spare)
Storage 1 Storage 2 Storage N
Storage 2
(Spare)
Storage N
(Spare)
Autorização
e distribuição
21. Plataforma de Vídeos UOLMais 22/04/2012
Regra de distribuição
• Permite configurar distribuição da carga por máquina (nó)
• Busca estatísticas de carga de cada servidor
• Permite segmentar tipo de vídeo x hardware específico
●
Máquinas com muita capacidade de disco, recebem cache
heterogêneo
●
Máquinas capacidade de CPU recebem “seek” e “SSL”
●
Máquinas com muita RAM e rede 10G recebem os vídeos
“bombados”
• Capacidade de reação
●
Vídeos populares se espalham em vários nós
●
Vídeos longtail são estimulados a ir sempre no mesmo nó
●
Remoção de servidores em estado crítico
24. Plataforma de Vídeos UOLMais 22/04/2012
-Problema do “cobertor curto” com as demais soluções tentadas
●
Experiência para combinar o que funciona em 1 único server
-Limite de banda de cada máquina (1Gb)
●
Limite de download por cliente / evasive.
●
Bloqueio de user-agents / referers.
-Aumento da média de tamanho individual dos vídeos (vídeos HD)
-Balanceamento / Monitoração.
-Regras específicas para lidar com longtail e thundering herd.
●
Níveis de cache conforme a audiência do vídeo.
-Minimização de chamadas de fetch para o backend
●
Segmentação de arquivos
●
Fetch “colapsado” / download preventivo do segmento.
-Foco em vídeos (conexões longas e arquivos grandes)
-Ponto fraco do Java (CPU + GC) não exerce fator limitante (zero-copy).
-Toda arquitetura da aplicação é assíncrona: Java NIO.2 + Netty.
25. Plataforma de Vídeos UOLMais 22/04/2012
Balaio – Níveis de cache
Old
Young
Popular
HD
RAMDISK
RAMDISK
video.mp4.seg1
video.mp4.seg1 1 hit
x hits
y hits
26. Plataforma de Vídeos UOLMais 22/04/2012
Internet
Balaio – Segmentação de arquivos
video.mp4
file server
(apache)
video.mp4.seg1
balaio
video.mp4.seg2
video.mp4.segN
HTTP GET video.mp4
HTTP GET
(Range-Request)
27. Plataforma de Vídeos UOLMais 22/04/2012
Balaio – Screenshot
Balaio – Interface de monitoração (por máquina)
28. Plataforma de Vídeos UOLMais 22/04/2012
Balaio – Screenshot
Balaio – Vantagens
• Requests de cliente “colapsados” pro backend
• “Seek” com custo de processamento muito baixo
●
Primeiro acesso cria tabela de keyframes
●
Demais acessos remontam header e custo de CPU é o custo de um
http range-request
• Redirect (HTTP 302) pra outro server, em caso de servidor
em estado critico, ou servidor vir direto via Round-Robin
DNS
• Baixa latência – novo paradigma + arquivos pequenos
• Alta escalabilidade horizontal
• Quanto maior o thundering heard, melhor
• Controle de banda adaptativo por bitrate