CDN NETFLIX

Image: CDN NETFLIX cover - Infra as Code

                       	    NOTA AO LEITOR
Este post foi escrito a partir de artigos, vídeos e posts de blogs
públicos na Internet. Nenhuma informação contida aqui é confidencial
ou classificada como sigilosa por suas fontes, portanto nenhum
segredo comercial foi violado.

O que acontece quando você abre o aplicativo da Netflix, escolhe um vídeo, dá o play e logo em seguida escuta o #TUDUM!!!? Já parou para imaginar? Este post é uma análise técnica da arquitetura de um dos produtos mais queridinhos do mercado que além de proporcionar entretenimento salva muitos pais de não jogarem seus filhos pela janela.

A Netflix é uma empresa que dispensa apresentações, fundada em 97, inicialmente era uma empresa que oferecia um catálogo de filmes no formato de DVDs, utilizando o sistema dos correios como logística de entrega e devolução, em 2007 se tornou uma empresa de streaming de vídeos[1], hoje está presente em diversos países.

Tirando todo glamour do marketing, a Netflix é uma empresa de streaming, que oferece um produto no modelo Video on Demand (VoD)[2], a partir de agora, vamos olhar para o que tem por trás das cortinas vermelhas.

Desafios das empresas de streaming

Da mesma forma que no mundo real o mundo da Internet é regido por algumas leis da Física, no caso da Internet uma lei crucial para qualquer serviços chama-se latência[3]. Toda comunicação na Internet é uma troca de dados entre um ponto A (consumidor de dados) e um ponto B (fornecedor de dados), essa troca de dados tem que ser rápida, quase que instantânea, se não for, uma das possíveis razões é a comunicação entre ponto A e B tenha uma alta latência.

Aplicações de VoD precisam de uma baixa latência na comunicação entre os pontos A e B do contrário a experiência de uso vai ser sofrida, o vídeo vai travar, o vídeo vai bufferizar 🕐 [4], vai funcionar por cinco segundos e vai parar, vai ser uma experiência péssima, por fim, o cliente termina trocando o serviço para o do concorrente, nenhuma empresa quer isso.

Pensando nesses problemas, como os serviços de streaming resolvem essas questões? Como que uma empresa que produz conteúdo nos EUA pode atender um cliente em São Paulo, Manaus ou em Sydney na Austrália com baixa latência? Como pode oferecer a mesma qualidade de serviço em continentes diferentes? A resposta é, utilizando uma Content Delivery Network (CDN) ou simplesmente CDN.

CDN conceitos básicos

O conceito mais básico de funcionamento de uma CDN genérica pode ser visto na Figura 1, uma empresa produz o conteúdo, vamos supor, a última temporada da sua série favorita, coloca em uma infraestrutura principal denominada origin, em seguida replica esse mesmo conteúdo para infraestruturas chamadas de espelhos ou mirros que estão distribuídos pelo mundo, pode ser em São Paulo, Manaus ou em Sydney na Austrália.

O cliente localizado no Ponto A (consumidor de dados) faz o seguinte pedido ao Ponto B (fornecedor de dados), “Gostaria de ver essa série XYZ, Temporada 2 Episódio 1”, o Ponto B ao analisar esse pedido e identifica que o Ponto A tem a procedência de São Paulo, então o Ponto B responde, “OK, a série XYZ, T2E1, está no Ponto C, no meu espelho de São Paulo, vou te redirecionar para lá, divirta-se!!" …eee… #TUDUM!!

Figura 1: CDN básica - Infra as Code

CDN NETFLIX

Para entender um pouco do funcionamento da CDN da Netflix, digo um pouco, pois vamos olhar para alguns poucos aspectos somente, certamente existem muitos outros que vão muito além do escopo deste post. Para saber o básico a gente precisa conhecer minimamente três componentes apresentados na Figura 2 são eles: Netflix APP, Control Plane e o Open Connect Appliances (OCAs) [5].

  • Netflix APP, é um aplicativo instalado no seu celular, na sua TV, tablet ou em qualquer dispositivo suportado, ele é o ponto de interação entre os usuários e a Netflix.
  • Control Plane, é onde a mágica acontece, é uma infraestrutura na AWS, lá acorrem validação de login, senha, cartão de crédito, armazena os metadados dos catálogos de vídeos, seu histórico, sua listas de filmes, perfis da sua conta, guarda os dados sobre os espelho ao redor do mundo e muuuuuuiiiittttooosssss outros serviços.
  • Open Connect Appliances (OCAs), são máquinas construídas com muita CPU, muitos discos SSDs, com uma placa de rede power capaz de servir 100 Gbps e tem a finalidade armazenar os arquivos de vídeos do catálogo [6] e disponibilizar para o usuário, são máquinas que são instaladas fisicamente dentro do provedor do usuário ou em uma infraestrutura fisicamente distante mas logicamente próxima do usuários, é local onde o #TUDUM!!! acontece, esse é o componente que funciona como Ponto C do exemplo anterior.

Figura 2: Elementos da CDN Netflix - Infra as Code

Funcionamento da CDN NETFLIX passo a passo

No artigo Unreeling Netflix: Understanding and Improving Multi-CDN Movie Delivery os autores V. K. Adhikari et al.[7], explicam na Figura 3 passo a passo desde o login a relação entre os componentes Netflix APP, Control Plane, OCAs.

  1. Início da sessão, com a validação de login/senha e validação de pagamento
  2. Identificação do usuário, localização do usuário, início das camadas de proteção do vídeo com Digital Rights Management (DRM), início da conexão com as CDNs.
  3. Início da sessão do player de vídeo e conexão com os sistemas de cache

Figura 3: CDN NETFLIX passo a passo - Infra as Code

A partir desse momento, segundo os autores, o player de vídeo recebe um arquivo tipo XML chamado de manifest (Figura 4) contendo a configuração de três opções de CDNs para o player implementar algo equivalente a um load balancing client side.

Figura 4: Lista de CDN por V. K. Adhikari et al.

Funcionamento da CDN NETFLIX experimento

Tentei reproduzir os experimentos do artigo, e comparar os resultados encontrados com os resultados descritos pelos autores encontrei uma diferença e uma semelhança em relação ao artigo, vejam quais são.

Player e manifesto

No artigo os autores afirmam que o comportamento do player de vídeo chamado de Silverlight é controlado pelas opções contidas em um arquivo XML chamado manifesto com diversas configurações incluindo os metadados dos vídeos (nomes dos vídeos que estão no seu histórico, onde iniciar, código do vídeo, etc..).

Eu tentei reproduzir os procedimentos técnicos descritos pelos autores V. K. Adhikari et al.[7], com o plug-in Tamper Data plug[8], eu não tive sucesso em obter os mesmos resultados, o que já era esperado pois o artigo foi publicado em 2012 e certamente muita coisa mudou nos últimos anos. Resolvi tentar com um outro plug-in chamado Firebug[9], com ele é possível encontrar (Figura 5) algo semelhante, nota-se que o player atual chama-se cadmium-playcore. O arquivo de configuração é no formato JSON, após a tela de login, ao dar o play em um vídeo nota-se essa uma requisição do tipo POST no browser para https://www.netflix.com/nq/cadmium/pbo_manifests/%5E1.0.0/router dentro deste request é possível encontrar muitos metadados dados referentes aos vídeos, id, legendas, app client e servidores de CDNs.

Figura 5: Player e manifesto de configuração - Infra as Code

OCAs

Ainda com o plug-in Firebug[9], a Figura 6 mostra o resultado, consegui notar semelhanças com o que foi descrito no artigo, em relação a ter uma lista de múltiplos destinos para chamar os vídeos, no artigo o player tem a possibilidade de chamar três serviços de CDN (level3, akamai, limelight). Atualmente é possível notar que o player de hoje faz várias chamadas para diferentes OCAs, no Firebug percebe-se que é bastante frequente a comunicação do player com as três OCAs: ipv4-c010-cgh004, ipv4-c008-cgh004 e ipv4-c019-cgh004 o que pode sugerir um mecanismo de load balancing client side descrito no artigo. Vale ressaltar que pode ser uma mera coincidência, pois não achei outros artigos para sustentar essa hipótese.

Figura 6: Manifesto de configuração - Infra as Code

Conclusão

E aí? Deu pra dar uma espiada no que tem por trás das cortinas vermelhas?! Arquiteturas de CDNs e serviços de CDNs públicas existem desde que a Internet passou a ser mais imagens do que texto, recentemente o perfil de uso tem mudado significativamente é o que aponta a Sandvine em The Global Internet Phenomena Report January 2022 no seu relatório anual Figura 7, um perfil de consumo de vídeo cada vez maior do que imagens.

Figura 7: por Sandvine The Global Internet Phenomena Report January 2022

A CDN da Netflix é uma CDN privada, o que quer dizer ela tem condições de controlar o desempenho e comportamento de cada componente da estrutura, e, mais importante de tudo, ela sabe a quantidade de usuários que têm, em conjunto o marketing dá para ter uma certa previsibilidade de oferta e demanda de conteúdo, por exemplo, se uma temporada nova de uma determinada série for começar no fim dos mês, isto é um evento com data prevista, certo? Algumas semanas antes, as máquinas de cache (OCAs) espalhadas pelo mundo recebem os vídeos da nova temporada e os deixam “escondidos”, no dia da estréia, é só virar uma “chave” e deixar o conteúdo visível. É a situação perfeita na busca de um serviço de qualidade, conhecer a sua quantidade de usuários e controlar a sua demanda por conteúdo.

Acho que a partir de agora, toda vez que você ouvir o #TUDUM!! vai se lembrar de todos os caminhos percorrido pelo seu play !! :)

Abraços!

Vida longa e próspera a todos!!

Recomendações

Para conhecer mais aqui vão algumas dicas:

  • Designing Netflix’s Content Delivery System: Sambismo 2014

  • Scaling the Netflix Global CDN, lessons learned from Terabit Zero

DICA RÁPIDA DE LIVRO

Estou lendo atualmente o livro Pipeline de liderança: O desenvolvimento de líderes como diferencial competitivo

Referências

  1. Dica de livro Pipeline de liderança: O desenvolvimento de líderes como diferencial competitivo
  2. https://en.wikipedia.org/wiki/Netflix
  3. https://en.wikipedia.org/wiki/Video_on_demand
  4. https://en.wikipedia.org/wiki/Latency_(engineering)
  5. https://pt.wikipedia.org/wiki/Buffer_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)
  6. https://openconnect.netflix.com/pt_pt/appliances/
  7. https://openconnect.netflix.com/deploymentguide.pdf
  8. Unreeling netflix: Understanding and improving multi-CDN movie delivery, https://ieeexplore.ieee.org/document/6195531
  9. Tamper Data - https://addons.mozilla.org/en-US/firefox/addon/tamper-data-for-ff-quantum/
  10. Firebug - https://developer.mozilla.org/en-US/docs/Tools
  11. Sandvine Phenomena Reports 2019 - https://www.sandvine.com/hubfs/Sandvine_Redesign_2019/Downloads/2022/Phenomena%20Reports/GIPR%202022/Sandvine%20GIPR%20January%202022.pdf?hsCtaTracking=18fff708-438e-4e16-809d-34c3c89f4957%7C067d9d28-ef90-4645-9d46-c70d10279247
  12. https://netflixtechblog.com/serving-100-gbps-from-an-open-connect-appliance-cdb51dda3b99


Eu adoraria ouvir suas outras histórias e situações semelhantes ao que acabei de escrever neste post, você pode me encontrar em @infraascode_br ou linkedin.com/in/leonardoml/ .

Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!


--- --- IMPORTANTE --- ---
As opiniões aqui expressas são pessoais e de responsabilidade única e exclusiva do autor, elas não refletem necessariamente a posição das empresas que eu trabalho(ei) e/ou presto(ei) serviço.