Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge...

59

Transcript of Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge...

Page 1: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution
Page 2: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Como Kubernetes e Spring Batch processam mais de 12 mil horas de vídeos por mês

QCon SP 2019QCon SP 2019

Page 3: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Gerente de Distribuição de Conteúdo @ Hotmart~10 anos desenvolvendo softwares

[email protected]

Euber Bispo e Almeida

Page 4: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution
Page 5: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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.

Page 6: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Hotmart

+5 MilhõesDE COMPRADORES

+200PAÍSES DIFERENTES

+150 MilPRODUTOS

+2 MilhõesDE USUÁRIOS

Page 7: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution
Page 8: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Hotmart Club

vídeos processados+ de 760.000

estudantes cadastrados+ de 4.000.000

Page 9: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Player

Page 10: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

● 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

Page 11: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Fonte: flussonic.com

Page 12: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

● 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

Page 13: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

● 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

Page 14: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

HTTP Live Streaming (HLS)

Fonte: zencoder.com

Page 15: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Transcoder

Page 16: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

API

QUEUE

PrepareMedia Transcode

{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }

video.mp41080p

video.mp4720p

Page 17: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Arquitetura em 2016Wildfly

Transcoder

Wildfly

Transcoder

Wildfly

Transcoder

Wildfly

Player API

Amazon S3

Page 18: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution
Page 19: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution
Page 20: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

RápidoResilienteEscalável

Hotmart Transcoder

Page 21: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

API

{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }

Page 22: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

API

QUEUE

{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }

Page 23: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

API

QUEUE

Manager

{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }

Page 24: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

API

QUEUE

Manager PrepareMedia

{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }

Page 25: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

API

QUEUE

Manager PrepareMedia

Extract Audio

Extract Video

{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }

Page 26: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

API

QUEUE

Manager PrepareMedia

Extract Audio

Extract Video Split

Transcode

video.avi1080p

{ input : avi resolution: [1080,720] output: [ mp4, vp9 ] }

Page 27: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Splitvideo.avi1080p

Page 28: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Splitvideo.avi1080p

part-1.avi1080p

part-2.avi1080p

part-3.avi1080p

2 min

utes

Page 29: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Splitvideo.avi1080p

part-1.avi1080p

part-2.avi1080p

part-3.avi1080p

part-1.mp4720p

2 min

utes

Page 30: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

part-2.mp4720p

Splitvideo.avi1080p

part-1.avi1080p

part-2.avi1080p

part-3.avi1080p

part-1.mp4720p

2 min

utes

Page 31: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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

Page 32: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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

Page 33: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Tecnologias

Page 34: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

É 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

Page 35: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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.

Page 36: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Sistema para automatização, gerenciamento e escala de containers Docker.

Foi desenvolvido pelo Google e agora mantido pela Cloud Native Computing Foundation.

Kubernetes

Page 37: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

KubernetesMaster Node

K8s API

Worker Node

App A

App B

Worker Node

App A

App B

kubectl

Page 38: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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

Page 39: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Spring Batch

● Start / Stop / Restart

● Retry / Skip

● Gerenciamento de transação

● Processamento baseado em particionamento Fonte: dzone.com

JobLauncher Job Step

JobRepository

Page 40: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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

Page 41: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution
Page 42: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Arquitetura em 2019

Page 43: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Arquitetura em 2019

Kubernetes

Master Node

Worker Node

Transcoder Master

Worker Node

Transcoder API

Transcoder Master

Transcoder Worker

Transcoder Worker

Transcoder Worker

Transcoder Worker

Page 44: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Spring Cloud Deployer

Page 45: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Arquitetura em 2019

Kubernetes

Master Node

Worker Node

Transcoder Master

Worker Node

Transcoder API

Transcoder Master

Transcoder Worker

Transcoder Worker

Transcoder Worker

Transcoder Worker

Page 46: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Orquestração dos Workers

Page 47: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Arquitetura em 2019

Kubernetes

Master Node

Worker Node

Transcoder Master

Worker Node

Transcoder API

Transcoder Master

Transcoder Worker

Transcoder Worker

Transcoder Worker

Transcoder Worker

Page 48: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Spring Batch Steps

Split media into chunk Merge media Generate HLS Generate HLS

Master Manifest

Encode chunk in given resolution

Wor

ker

Mas

ter

Page 49: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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

Page 50: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Quantidade de mídias por mês

Page 51: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Quantidade de horas de mídia por mês

Page 52: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Monitoramento

Page 53: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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.

Page 54: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Grafana

Page 55: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Mux

Page 56: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Próximos Passos

Page 57: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

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

Page 58: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

hotmart.dev/qcon

Page 59: Batch processam mais de Como Kubernetes e Spring · Spring Batch Steps Split media into chunk Merge media Generate HLS Generate HLS Master Manifest Encode chunk in given resolution

Obrigado!