Post on 06-Aug-2020
Como Kubernetes e Spring Batch processam mais de 12 mil horas de vídeos por mês
QCon SP 2019QCon SP 2019
Gerente de Distribuição de Conteúdo @ Hotmart~10 anos desenvolvendo softwares
euberb@gmail.com
Euber Bispo e Almeida
Hotmart
A Hotmart é a maior empresa especializada na venda e distribuição de produtos digitais da América Latina, líder de mercado desde sua fundação, em 2011.
Em constante processo de internacionalização, a empresa possui escritórios em Belo Horizonte, Madri, Amsterdã, Bogotá e Cidade do México.
Hotmart
+5 MilhõesDE COMPRADORES
+200PAÍSES DIFERENTES
+150 MilPRODUTOS
+2 MilhõesDE USUÁRIOS
Hotmart Club
vídeos processados+ de 760.000
estudantes cadastrados+ de 4.000.000
Player
● Coder-Decoder ou Compressor-Decompressor
● Hardware ou software que comprime (encode) vídeo ou áudio digital e
descomprime (decode) o vídeo/áudio na forma original
● Possui duas funções: Encode e Decode
Codec
● Define a diferença entre dados e metadados coexistentes em um arquivo
● Pode-se inferir um container pela extensão do arquivo
● Possui dados “encoded” (ex. Video H.264 / Áudio HE - AAC)
Container
nomedovideo.webm
CONTAINER WEBM
V - vp9A - opus
nomedovideo.mp4
CONTAINER MPEG-4
V - h264A - aac
● Usuário pode visualizar de forma quase instantânea
● Permite assistir a partir de qualquer seção do vídeo
● Adaptive bitrate streaming
Video Streaming
Transcoder
API
QUEUE
PrepareMedia Transcode
{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }
video.mp41080p
video.mp4720p
Arquitetura em 2016Wildfly
Transcoder
Wildfly
Transcoder
Wildfly
Transcoder
Wildfly
Player API
Amazon S3
RápidoResilienteEscalável
Hotmart Transcoder
API
{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }
API
QUEUE
{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }
API
QUEUE
Manager
{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }
API
QUEUE
Manager PrepareMedia
{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }
API
QUEUE
Manager PrepareMedia
Extract Audio
Extract Video
{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }
API
QUEUE
Manager PrepareMedia
Extract Audio
Extract Video Split
Transcode
video.avi1080p
{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }
Splitvideo.avi1080p
Splitvideo.avi1080p
part-1.avi1080p
part-2.avi1080p
part-3.avi1080p
2 min
utes
Splitvideo.avi1080p
part-1.avi1080p
part-2.avi1080p
part-3.avi1080p
part-1.mp4720p
2 min
utes
part-2.mp4720p
Splitvideo.avi1080p
part-1.avi1080p
part-2.avi1080p
part-3.avi1080p
part-1.mp4720p
2 min
utes
Splitvideo.avi1080p
part-1.avi1080p
part-2.avi1080p
part-3.avi1080p part-1.mp4
720p
part-2.mp4720p
part-3.mp4720p
2 min
utes
part-1.mp41080p
part-2.mp41080p
part-3.mp4 1080p
Splitvideo.avi1080p
part-1.avi1080p
part-2.avi1080p
part-3.avi1080p part-1.mp4
720p
part-2.mp4720p
part-3.mp4720p
2 min
utes
part-1.mp41080p
part-2.mp41080p
part-3.mp4 1080p
Merge video
video.mp4720p
Merge video
video.mp41080p
Tecnologias
É uma ferramenta gratuita desenhada para processamento de vídeo e áudio via linha de comando.
Foi criado em 2000 e, desde então, está em constante desenvolvimento e se tornou a solução referência no que tange processamento de vídeos.
FFmpeg
Docker
O Docker é uma ferramenta open-source de virtualização em nível de sistema operacional, utilizada para implantar sistemas.
É usada para criar/executar contêineres (“máquinas virtuais”). Os contêineres são isolados uns dos outros e incluem seus próprios aplicativos, ferramentas, bibliotecas e arquivos de configuração.
Sistema para automatização, gerenciamento e escala de containers Docker.
Foi desenvolvido pelo Google e agora mantido pela Cloud Native Computing Foundation.
Kubernetes
KubernetesMaster Node
K8s API
Worker Node
App A
App B
Worker Node
App A
App B
kubectl
Ambiente Kubernetes da AWS.
O gerenciamento da Master é feito pela AWS. Esta está disponível em várias zonas de disponibilidade, o que aumenta consideravelmente a resiliência.
O ambiente pode ser criado por script, o que torna mais fácil a manutenção.
É integrado com outras ferramentas da AWS.
EKS - Amazon Elastic Container Service for Kubernetes
Spring Batch
● Start / Stop / Restart
● Retry / Skip
● Gerenciamento de transação
● Processamento baseado em particionamento Fonte: dzone.com
JobLauncher Job Step
JobRepository
Atlassian - Escalator
O Escalator é um escalador horizontal otimizado para o Kubernetes.
Com ele conseguimos configurar uma reserva de CPU e memória para antecipar picos de demanda.
Ele também fornece métricas da situação do cluster.
github.com/atlassian/escalator
Arquitetura em 2019
Arquitetura em 2019
Kubernetes
Master Node
Worker Node
Transcoder Master
Worker Node
Transcoder API
Transcoder Master
Transcoder Worker
Transcoder Worker
Transcoder Worker
Transcoder Worker
Spring Cloud Deployer
Arquitetura em 2019
Kubernetes
Master Node
Worker Node
Transcoder Master
Worker Node
Transcoder API
Transcoder Master
Transcoder Worker
Transcoder Worker
Transcoder Worker
Transcoder Worker
Orquestração dos Workers
Arquitetura em 2019
Kubernetes
Master Node
Worker Node
Transcoder Master
Worker Node
Transcoder API
Transcoder Master
Transcoder Worker
Transcoder Worker
Transcoder Worker
Transcoder Worker
Spring Batch Steps
Split media into chunk Merge media Generate HLS Generate HLS
Master Manifest
Encode chunk in given resolution
Wor
ker
Mas
ter
Exemplos do tempo de processamento:
● Um vídeo de 10 minutos processou em 14 minutos
● Um vídeo de 3 horas processou em 12 minutos● Um vídeo de 6 segundos processou em 1 minuto
e 47 segundos
Transcoder em 2019
Quantidade de mídias por mês
Quantidade de horas de mídia por mês
Monitoramento
Prometheus
Nasceu em 2012 e foi desenvolvido, inicialmente, pela SoundCloud. Ele é um sistema open-source que faz monitoramento e alertas.
Deste de 2016 está com a Cloud Native Computing Foundation.
O Prometheus foi adotado por diversas empresas e tem uma comunidade de desenvolvedores forte.
Guarda suas informações em séries temporais.
Grafana
Mux
Próximos Passos
●
Próximos passos● JobRepository - Tirar a dependência de banco relacional
○ Usar banco em memória em cada container master
● Paralelismo de segmentação do vídeo (HLS)○ Segmentar nos workers
● Melhorar o startup time dos containers
● Usar instâncias spot para reduzir custos
Obrigado!