Desenvolvimento

15 mai, 2017

Evolução da utilização de contêineres no Netflix

Publicidade

Não é apenas você que utiliza Docker, os engenheiros da Netflix também. Segundo o time de engenharia de Netflix, os contêineres já estão agregando valor à sua plataforma de nuvem comprovadamente disponível e globalmente alocada nas máquinas virtuais Amazon EC2.  Este artigo é um pouco mais avançado, aqui o escopo passará pelo Titus: fundação da infraestrutura da Netflix para aplicações baseadas em contêineres. O Titus proporciona para a Netflix gerenciamento de recursos e escala de clusters, assim como execução de contêineres com uma profunda integração com o Amazon EC2 e habilitação da infraestrutura comum da Netflix.

Neste mês a Netflix atingiu um novo nível de escala, passando um milhão de contêineres executados semanalmente. Além disso, o Titus agora suporta serviços que fazem parte da experiência dos usuários dos serviços de streaming.

História do crescimento dos contêineres

A Netflix se beneficiou muito das máquinas virtuais da Amazon (EC2). Além das máquinas virtuais, eles também investiram em cargas de trabalho baseadas em contêineres. Segundo eles, os benefícios, a agitação e o crescimento observado pelos desenvolvedores foi surpreendente.

Enquanto o EC2 suportava agendamentos avançados de serviços, isso não ajudava os usuários de lotes. Na Netflix existe um conjunto significativo de usuários que executam tarefas com um gatilho baseado em tempo ou eventos que precisam analisar dados, realizar cálculos e então emitir resultados para os serviços, usuários e relatórios da Netflix. São executadas cargas de trabalho como modelos de treinamento de aprendizado de máquina, codificação de mídia, testes de integração contínua, big data, e tarefas de análise de instalações CDN várias vezes ao dia. Era necessário oferecer um planejador de recursos para as aplicações alocadas em contêineres independentemente do tipo de carga de trabalho que poderiam ser controlados pelos planejadores de carga de trabalho de nível superior. O Titus serve como a combinação de uma unidade de instalação comum (imagem do Docker) com um sistema genérico de planejamento de lotes de tarefas. A adoção do Titus ajudou a Netflix a expandir o suporte ao crescente lote de casos de uso.

Com o Titus, os usuários de lotes são capazes de montar infraestruturas sofisticadas de maneira muito rápida devido apenas a necessidade de especificar os recursos necessários. Os usuários não precisam mais lidar com a escolha e manutenção dos tamanhos das instâncias AWS EC2 que nem sempre se adequam perfeitamente a suas cargas de trabalho. Os usuários confiam no Titus para tratar as instancias maiores de maneira eficiente em várias cargas de trabalho. Os usuários criam os códigos localmente e então planejam imediatamente a execução escalonada no Titus. Utilizando contêineres, o Titus executa as aplicações em lote deixando que o usuário especifique exatamente qual código e dependências são necessárias. Por exemplo, para aprendizado de máquina existem usuários executando um misto de aplicações Java, R, Python, e scripts Bash.

Além dos lotes, foi possível observar uma oportunidade de trazer os benefícios do gerenciamento de recursos mais simples e a experiência do desenvolvimento local para outras cargas de trabalho. Ao trabalhar com as equipes de Edge, UI e engenharia de dispositivos, eles observaram que os usuários de serviços seriam o próximo público. Hoje, eles estão realizando o processo de reconstrução da maneira como eles instalam as lógicas específicas para os aparelhos no lado do servidor em sua camada de API aprimorando os servidores NodeJS “single core” otimizados. Seus engenheiros de UI e dispositivos queriam uma experiência de desenvolvimento melhor, incluindo um ambiente simples de testes local que fosse compatível com a implantação para a produção.

Agora os desenvolvedores são capazes de disponibilizar novas versões dos aplicativos mais rápido do que antes, o que alavanca as imagens em camadas do Docker e as máquinas virtuais pré provisionadas prontas para a implantação nos contêineres. Isso sem contar a melhoria no ambiente de testes.

As implantações utilizando o Titus podem ser feitas um em ou dois minutos contra os 10 minutos que eram necessários antes, quando era utilizadas máquinas virtuais.

A questão base para essas melhorias é a velocidade de inovação dos desenvolvedores

Tanto os usuários de lotes quando os usuários de serviços agora podem experimentar localmente e testar mais rapidamente. Eles também podem implantar em produção com muito mais confiança do que antes. Essa velocidade dita o quão rápido as funcionalidades podem ser entregues para os clientes da Netflix e essa é a razão para os contêineres serem tão importantes para a Netflix.

Detalhes do Titus

Aqui será apresentada uma visão geral de como a execução do planejamento e execução dos contêineres do Titus suporta os serviços e os requisitos para as tarefas em lote conforme apresentado no diagrama abaixo:

O Titus trata o planejamento das aplicações combinando os recursos necessários com os recursos computacionais disponíveis.

“O Titus suporta tanto as tarefas de serviços que são executados ‘para sempre’ quanto as tarefas de lotes que são executadas ‘até serem completadas'”

As tarefas de serviços reiniciam as instâncias que falharem e são auto escalonadas para manter um nível de troca de carga. Para as tarefas de lotes são feitas novas tentativas de acordo com a política e continuam sendo executadas até serem completadas.

O Titus fornece múltiplos SLAs para o planejamento de recursos. Ele oferece capacidade sob demanda para lotes ad hoc e serviços internos não críticos, auto escalonando a capacidade no EC2 baseado nas necessidades atuais. Ele também oferece capacidade garantida pré provisionada para os usuários que estiverem enfrentando cargas de trabalho e lotes mais críticos. O planejador executa a limpeza para melhorar tanto a eficiência em máquinas virtuais maiores quanto evitar pontos fracos na confiabilidade das máquinas virtuais e zonas disponíveis. A base para esse planejamento é uma biblioteca open source chamada Fenzo.

A execução dos contêineres do Titus, que é executado nas máquinas virtuais EC2, integra o AWS e a infraestrutura da Netflix. É esperado que os usuários utilizem tanto as máquinas virtuais quanto os contêineres por um longo tempo então, os engenheiros decidiram que gostariam que a plataforma da nuvem e as experiências operacionais fossem as mais similares possível. A escolha do AWS foi feita com base na necessidade de alavancagem dos serviços EC2 existentes. Lá eles utilizam a Nuvem Virtual Privada (VPC, do inglês Virtual Private Cloud) para IPs roteáveis ao invés da cobertura de uma rede separada. Eles alavancaram as Interfaces de Rede Elastic (ENI, do inglês Elastic Network Interface) para garantir que todos os contêineres tinham os grupos de segurança específicos das aplicações. O Titus fornece um proxy de metadados que habilita os contêineres para ter uma vista específica de seu ambiente assim como das credenciais IAM. Os contêineres não enxergam os metadados do hospedeiro (ex.: IP, Nome do Host, Identificação da Instância). Então, eles implementaram o isolamento “Multi-tenant” (Processador, Memória Disco, Rede e Segurança) utilizando uma combinação de Linux, Docker e sua própria tecnologia de isolamento.

Para os contêineres terem sucesso na Netflix, era necessário integrar perfeitamente eles às suas ferramentas de desenvolvimento e infraestrutura operacional.

Por exemplo, a Netflix já tinha uma solução para entrega continua, o Spinnaker. Enquanto foi possível implementar as atualizações e outros conceitos CI/CD em seu planejador, delegar essa funcionalidade para o Spinnaker permitia que seus usuários tivessem uma ferramenta de implementações consistente tanto para as máquinas virtuais quanto para os contêineres. Outro exemplo é o serviço para serviços de comunicação. Eles evitavam reimplementar o serviço de descoberta e o serviço de balanceamento de carga. Em cada um desses exemplos, a chave para o sucesso do Titus foi decidir o que ele faria ou não faria, influenciando o valor total do que as outras equipes fornecem.

Utilizar sistemas existentes traz o preço de aumentar esses sistemas para trabalhar com os contêineres além das máquinas virtuais. Além dos exemplos acima, também era necessário aumentar sua telemetria, regulação automática de performance, sistemas de verificação de saúde, automação do caos (chaos automation), controle de tráfego, suporte a falhas regionais, gerenciamento furtivo e acesso interativo ao sistema. Um custo adicional é que conectar cada um desses sistemas da Netflix também tornou mais difícil alavancar outras soluções open source para contêineres que ofereçam mais do que a plataforma de tempo de execução do contêiner.

Executar uma plataforma de contêineres em uma escala do nível da Netflix (com essa diversidade de cargas de trabalho) não é nada simples. Isso também traz desafios em todas as camadas do sistema. Eles trataram os problemas de escalabilidade e confiabilidade no software específico do Titus da mesma maneira que os sistemas open source dos dependem (Motor do Docker, Distribuição do Docker, Apache Mesos, Snap e Linux). O sistema foi projetado para falhas em todos os níveis, incluindo reconciliação, para levar à consistência entre os estados distribuídos que existem entre suas camadas de gerenciamento de recursos e o runtime do contêiner. Medindo os objetivos de nível de serviço claramente (latência no início da execução do contêiner, porcentagem de contêineres que travam devido à problemas com o Titus, e disponibilidade geral dos APIs do sistema), eles aprenderam a balancear seu investimento entre confiabilidade e funcionalidade.

Um ponto chave onde os contêineres ajudam os engenheiros a se tornarem mais produtivos é através das ferramentas de desenvolvimento. A equipe de desenvolvimento das ferramentas de produtividade para os desenvolvedores criou uma ferramenta de desenvolvimento chamada Newt (Netflix Workflow Toolkit). O Newt ajuda a simplificar o desenvolvimento dos contêineres tanto de maneira iterativa local quanto com o Titus. Ter um ambiente de contêineres consistente entre o Newt e o Titus ajuda os desenvolvedores implantarem com segurança.

Utilização atual do Titus

A Netflix executa muitas pilhas entre diversas contas de teste e produção entre as três regiões da Amazon que executam seus serviços.

Quando eles iniciaram o Titus em dezembro de 2015, foram lançados alguns milhares de contêineres por semana entre muitas cargas de trabalho. Na semana passada eles lançaram mais de um milhão de contêineres. Esses contêineres representaram centenas de cargas de trabalho. Esse aumento de 1000x na utilização dos contêineres aconteceu no período de um ano, e o crescimento não parece estar reduzindo a velocidade.

Eles executa um pico de 500 r3.8xl instâncias para suportar seus usuários de lotes. Isso representa 16000 núcleos de processamento com 120TB de memória. Eles também adicionaram suporte para GPUs como um tipo de recurso utilizando p2.8xl instâncias para executar aprendizado profundo com redes neurais e mini lotes.

No começo de 2017, sua equipe de processamento de streaming como serviço decidiu aprimorar o Titus para habilitar o gerenciamento de clusters mais simples e mais rápido para seu sistema baseado em Flink. Essa utilização resultou em mais de 10000 tarefas de serviços de contêineres que tem uma execução longa e reimplantação conforme as tarefas de processamento de streaming são alteradas. Esses e outros serviços utilizam milhares de instâncias m4x4xl.

Mesmo que os casos de uso acima sejam críticos para seus negócios, problemas com esses contêineres não impactam os clientes da Netflix imediatamente. Isso mudou quando o Titus recentemente começou a executar serviços que satisfazem as necessidades dos clientes da Netflix.

O suporte aos serviços voltados para os clientes deve ser tratado de maneira séria. Nos últimos 6 meses, a Netflix passou duplicando o tráfego entre as máquinas virtuais e os contêineres. Utilizaram esse tráfego duplicado para aprender como operar os contêineres e validar suas checklists de preparação. Essa diligencia deu a confiança necessária para seguir em frente e realizar esta mudança tão grande em sua infraestrutura.

A equipe Titus

Um dos aspectos chave para o sucesso do Titus na Netflix foi a experiência e crescimento da equipe de desenvolvimento do Titus. Seus usuários de contêineres confiam na equipe para manter o Titus operacional e inovar com suas necessidades.

 

***

Fonte: https://medium.com/netflix-techblog/the-evolution-of-container-usage-at-netflix-3abfc096781b