SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Contos de escalabilidade
na plataforma de vídeos da @globo.com
um timaço
Leandro
Moreira
e mais times
e pessoas...
Daniel
Martins
Flávio
Ribeiro
Juarez
Bochi
Hugo
Roque
Robson
Soares
Rafael
Borsani
Bernardo
Camilo
Lucas
Mundim
vamos falar sobre vídeo ao vivo
vod é outra história
lifelife
passadoagoraao vivo vod
{rtmp} no princípio
encoderh264+aacrtmptcp
h264+aacrtmptcp
player flash
firewall
1935
1º
2º3º
4º
{rtmp} pontos positivos
atraso mínimo (2-5s) funcionava
{rtmp} problema :: instrumentação
{rtmp} problema :: soft. proprietário
01110000 01101001
01101011 01101101
01101001 01101110
00100000 00110011
{rtmp} problema :: escalabilidade
$$$$$
{rtmp} problema :: escalabilidade
FIFA 2010 World Cup AFRICA dados
● ~= 285k usuários simul. *
● bitrate máximo 800 Kbps
*pico
eis que surgem os multi-devices...
hls
h264+aacrtmptcp
h264+aacrtmptcp
h264+aacrtmptcp
hls
{hls} o que é?
240p
480p
720p
stream original
seg1.ts seg2.ts seg3.ts
{hls} como funciona?
/variant.m3u8
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=240
240p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=480
480p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=720
720p.m3u8
/240p.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:5,
seg1.ts
#EXTINF:5,
seg2.ts
#EXTINF:5,
seg3.ts
/480p.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:5,
seg1.ts
#EXTINF:5,
seg2.ts
#EXTINF:5,
seg3.ts
/720p.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:5,
seg1.ts
#EXTINF:5,
seg2.ts
#EXTINF:5,
seg3.ts
{hls} como funciona?
seg1.ts
seg2.ts
seg3.ts
seg4.ts
240p.m3u8
480p.m3u8
720p.m3u8
seg1.ts
seg2.ts
seg3.ts
seg4.ts
seg1.ts
seg2.ts
seg3.ts
seg4.ts
1 - GET /variant.m3u8 (text)
2 - GET /720p.m3u8 (text)
240p.m3u8
variant.m3u8
480p.m3u8 720p.m3u8
3 - GET /seg3.ts (bin)
4 - GET /seg4.ts (bin)
5 - GET /720p.m3u8 (text)
6 - GET /seg5.ts (bin)
7 - GET /seg6.ts (bin)
8 - ...
http
http
seg3.ts
seg4.ts
seg5.ts
seg6.ts
seg3.ts
seg4.ts
seg5.ts
seg6.ts
seg3.ts
seg4.ts
seg5.ts
seg6.ts
{hls} primeira solução
encoderh264+aacrtmptcp
h264+aachttptcp
player flash
2º3º
5º
4º
android
ios
1º
{hls} geração e distribuição
rtmp http
manifest
(m3u8)
video
(ts)
files
location ~ /hls {
root "/vol/hls/";
}
dest = "/vol/hls";
BE FE
{hls} resultado
escalabilidadeporta:80 UX instrumentação
2G
4G
Wifi
1080p
720p
320p
Caching
{hls} intrumentação
Graphite
● status code
● request t.
● cache hit
● cpu usage
● memory
● buffer rate
● bitrate
● ...
time-series data
graph api
http
enqueue
dequeuemetric x t
snmp
metric x t
agents
{hls} sauron
Graphite
FIFA 2014 World Cup Brasil
45:0000:00
2002
45:0000:00
{hls} DVR na prática
/720p.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:5,
seg1.ts
#EXTINF:5,
seg2.ts
#EXTINF:5,
seg3.ts
/720p.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:5,
seg1.ts
#EXTINF:5,
seg2.ts
#EXTINF:5,
seg3.ts
#EXTINF:5,
seg4.ts
#EXTINF:5,
seg5.ts
#EXTINF:5,
seg6.ts
#EXTINF:5,
seg7.ts
#EXTINF:5,
seg8.ts
#EXTINF:5,
seg9.ts
#EXTINF:5,
seg10.ts
ingest
{hls} tolerando o DVR
frontend
encoderh264+aacrtmptcp
h264+aachttptcp
flash player
2º3º
5º
4º
android
ios
1º
{hls} desafios do DVR :: failover
não tinha tolerância a falhas
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:10
#EXTINF:5,
seg10.ts
#EXTINF:5,
seg11.ts
#EXTINF:5,
seg12.ts
#EXTINF:5,
seg13.ts
#EXTINF:5,
seg14.ts
#EXTINF:5,
seg15.ts
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:5,
seg1.ts
{hls} desafios do DVR :: storage
2h * 60m * 60s / 5s * 4.5mb ~= 6.4GB
}1.6MB 1.1MB 0.8MB 0.5MB 0.3MB 0.1MB
4.5MB
por 5s
2 jogos + 4 streams ~= 38.4GB
02:00:0000:00:00
{hls} 38GB cabem na RAM
ingest
frontend
daemon: monitora mudanças nos
arquivos e salva hls
embed-script: busca, cria manifests
e serve hls (chunks)
{hls} eleições 2014
muitos sinais ao vivo
que não cabiam
em
um
nó somente
{hls} do redis para o cassandra
ingest
frontend
daemon: monitora mudanças nos
arquivos e salva hls
embed-script: busca, cria manifests
e serve hls (chunks)
{hls} cluster de cassandra (RF=2)
c1
c2
c3
c4
96 cores 256 GB 4TB
99% read latency < 25ms
99% write latency < 30ms
65 Mbits/s
4 nodes
multi data centers (SP & RJ)
NET
Oi
Tim
SP
BGP announcement
186.192.81.0/24
NET Oi
Tim
RJ
186.192.81.2
BGP announcement
186.192.81.0/24
FIFA 2014 World Cup Brasil dados
● > 500k usuários simul. *
● ~= 125.000 req/s de vídeos *
● > 580 Gbps *
*jogo ARG vs SUI
FIFA 2014 World Cup Brasil dados
● ~= 1600 anos assistídos *
● > 40M visualizações de vídeo *
● ~= med. 6 Gbps, max 19 Gbps **
*soma total **por nó
software livre dessa história
m3u8 parser
cassandra
driver
clappr
evostream
api
live_thumb
nginx-audio-track-module
BemTV
iprange
futuro (na verdade agora)
Perguntas?
OBRIGADO!

Mais conteúdo relacionado

Semelhante a qcon rio 2015 - escalabilidade na plataforma de vídeos ao vivo

Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Rodrigo Campos
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniJoao Galdino Mello de Souza
 
CPUMF: O que é, como implementar, o que inferir por Luiz Carlos Orsoni
CPUMF: O que é, como implementar, o que inferir por Luiz Carlos OrsoniCPUMF: O que é, como implementar, o que inferir por Luiz Carlos Orsoni
CPUMF: O que é, como implementar, o que inferir por Luiz Carlos OrsoniJoao Galdino Mello de Souza
 
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVDesenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVmulder3
 
Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)
Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)
Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)Joao Galdino Mello de Souza
 
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!tdc-globalcode
 
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHPPHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHPAryel Tupinambá
 
Aula 8.2 - Iptables Impasses e Scripts
Aula 8.2 - Iptables Impasses e ScriptsAula 8.2 - Iptables Impasses e Scripts
Aula 8.2 - Iptables Impasses e ScriptsAndrei Carniel
 
TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011Hugo Lavalle
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Embarcados
 
Implantação de sistemas desegurança com linux
Implantação de sistemas desegurança com linuxImplantação de sistemas desegurança com linux
Implantação de sistemas desegurança com linuxSoftD Abreu
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...Sandro Suffert
 
Como clonar h ds e fazer backup sem precisar do ghost
Como clonar h ds e fazer backup sem precisar do ghostComo clonar h ds e fazer backup sem precisar do ghost
Como clonar h ds e fazer backup sem precisar do ghostVanderlei Nascimento
 
Configurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lx
Configurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lxConfigurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lx
Configurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lxjrrsouzaj
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linuxelliando dias
 

Semelhante a qcon rio 2015 - escalabilidade na plataforma de vídeos ao vivo (20)

Quantas Instruções por Ciclo?
Quantas Instruções por Ciclo?Quantas Instruções por Ciclo?
Quantas Instruções por Ciclo?
 
Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!Mistério ou tecnologia? Paralelismo!
Mistério ou tecnologia? Paralelismo!
 
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos OrsoniZ13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
Z13 x zEC12: O que esperar? - por Luiz Carlos Orsoni
 
CPUMF: O que é, como implementar, o que inferir por Luiz Carlos Orsoni
CPUMF: O que é, como implementar, o que inferir por Luiz Carlos OrsoniCPUMF: O que é, como implementar, o que inferir por Luiz Carlos Orsoni
CPUMF: O que é, como implementar, o que inferir por Luiz Carlos Orsoni
 
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVDesenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
 
Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)
Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)
Detalhes internos da z14/Otimização de códigos - por Luiz Carlos Orsoni (MAFFEI)
 
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
 
Do gameboy a zend vm e avante
Do gameboy a zend vm e avanteDo gameboy a zend vm e avante
Do gameboy a zend vm e avante
 
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHPPHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
 
Aula 8.2 - Iptables Impasses e Scripts
Aula 8.2 - Iptables Impasses e ScriptsAula 8.2 - Iptables Impasses e Scripts
Aula 8.2 - Iptables Impasses e Scripts
 
MIPS Pipeline
MIPS Pipeline MIPS Pipeline
MIPS Pipeline
 
Aula 15 processadores
Aula 15 processadoresAula 15 processadores
Aula 15 processadores
 
TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011TV Digital - Entendendo a transmissão de aplicações - TDC2011
TV Digital - Entendendo a transmissão de aplicações - TDC2011
 
Programação para Atari 2600
Programação para Atari 2600Programação para Atari 2600
Programação para Atari 2600
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?
 
Implantação de sistemas desegurança com linux
Implantação de sistemas desegurança com linuxImplantação de sistemas desegurança com linux
Implantação de sistemas desegurança com linux
 
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...Iccyber2012   sandro suffert apura - jacomo picolini teamcymru - desafio fore...
Iccyber2012 sandro suffert apura - jacomo picolini teamcymru - desafio fore...
 
Como clonar h ds e fazer backup sem precisar do ghost
Como clonar h ds e fazer backup sem precisar do ghostComo clonar h ds e fazer backup sem precisar do ghost
Como clonar h ds e fazer backup sem precisar do ghost
 
Configurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lx
Configurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lxConfigurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lx
Configurando ambiente ltsp_4.2_com_mt1000_lx_ta2000lx
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linux
 

qcon rio 2015 - escalabilidade na plataforma de vídeos ao vivo