Upgrade to Pro — share decks privately, control downloads, hide ads and more …

qcon rio 15 - escalabilidade na plataforma de v...

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

Escalabilidade na plataforma de vídeos da globo.com, trocando rtmp para hls e todas mudanças necessárias pra enfrentar os usuários para copa do mundo 2014.

Como a apresentação tem animações caso queira ver a palestra animada acesse https://docs.google.com/presentation/d/1dzT0o6l8p9SBo-_gbZv7E5PCtSTiF2LJca2VD-2-KMU/edit?usp=sharing

#qcon #qconrj

Avatar for Leandro Moreira

Leandro Moreira

August 28, 2015

More Decks by Leandro Moreira

Other Decks in Technology

Transcript

  1. 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
  2. vamos falar sobre vídeo ao vivo vod é outra história

    life life passado agora ao vivo vod
  3. {rtmp} no princípio encoder h264+aac rtmp tcp h264+aac rtmp tcp

    player flash firewall 1935 1º 2º 3º 4º
  4. FIFA 2010 World Cup AFRICA dados • ~= 285k usuários

    simul. * • bitrate máximo 800 Kbps *pico
  5. {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
  6. {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
  7. {hls} primeira solução encoder h264+aac rtmp tcp h264+aac http tcp

    player flash 2º 3º 5º 4º android ios 1º
  8. {hls} geração e distribuição rtmp http manifest (m3u8) video (ts)

    files location ~ /hls { root "/vol/hls/"; } dest = "/vol/hls"; BE FE
  9. {hls} intrumentação Graphite • status code • request t. •

    cache hit • cpu usage • memory • buffer rate • bitrate • ... time-series data graph api http enqueue dequeue metric x t snmp metric x t agents
  10. {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
  11. ingest {hls} tolerando o DVR frontend encoder h264+aac rtmp tcp

    h264+aac http tcp flash player 2º 3º 5º 4º android ios 1º
  12. {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
  13. {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:00 00:00:00
  14. {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)
  15. {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)
  16. {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
  17. 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
  18. FIFA 2014 World Cup Brasil dados • > 500k usuários

    simul. * • ~= 125.000 req/s de vídeos * • > 580 Gbps * *jogo ARG vs SUI
  19. 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ó
  20. software livre dessa história m3u8 parser cassandra driver clappr evostream

    api live_thumb nginx-audio-track-module BemTV iprange