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

Post on 06-Aug-2020

5 views 0 download

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

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

Fonte: flussonic.com

● 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

HTTP Live Streaming (HLS)

Fonte: zencoder.com

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

hotmart.dev/qcon

Obrigado!