A Netflix realiza centenas de implantações por dia, sem o uso de ferramentas como Chef ou Puppet, sem um departamento de garantia de qualidade e sem engenheiros de liberações. Para conseguir tal feito, a Netflix desenvolveu um PaaS próprio, permitindo que cada equipe realize implantações de suas partes da infraestrutura, sempre que quiserem e quantas vezes for necessário. Durante a QCon Nova York 2013, Jeremy Edberg realizou uma palestra sobre a infraestrutura que a Netflix construiu para suportar esse ritmo acelerado de iterações, utilizando serviços de nuvem da Amazon.
A Netflix usa uma arquitetura orientada a serviços para implementar sua API, que trata a maioria das requisições do site (cerca de 2 bilhões por dia). Nos bastidores, a API é dividida em muitos serviços, com cada serviço gerenciado por um time. Isso permite que os times trabalhem de forma relativamente autônoma e decidam por eles mesmos quando e com qual frequência querem implantar novas funcionalidades.
A Netflix adota fortemente a cultura DevOps. Os desenvolvedores constroem, implantam e operam seus próprios clusters de servidores e têm responsabilidade sobre problemas ocorridos em seus setores. No caso de falha, uma reunião é organizada para investigar a causa raiz, onde são discutidas abordagens para prevenir questões similares no futuro, de modo similar à técnica dos cinco porquês.
Implantações (deployments) na Netflix são completamente automatizadas. Quando um serviço precisa ser implantado, o desenvolvedor primeiro adiciona as alterações a um repositório de código. O código é selecionado pelo Jenkins, que posteriormente realiza a construção de um novo pacote da aplicação. Após isso, uma nova imagem da VM (AMI) é criada a partir de uma imagem base, contendo uma distribuição Linux, além do software que todos os servidores da Netflix executam, incluindo uma JVM e um Tomcat, possivelmente com customizações adicionais feitas pela equipe. Em cima dessa estrutura, o pacote da aplicação é instalado. A partir desse conjunto, uma AMI é produzida e registrada com o sistema.
Para implantar as imagens das VMs na infraestrutura da empresa, a Netflix construiu o Asgard. Através da interface web do Asgard, as imagens das VMs podem ser instanciadas para criar novos clusters EC2. Todo cluster consiste de pelo menos três instâncias EC2 para garantir redundância, espalhadas por múltiplas zonas de disponibilidade. Ao implantar nova versão, o cluster executando a versão anterior é mantido em funcionamento, enquanto a nova é instanciada.
Assim que a nova versão inicializa e se registra utilizando o registro de serviço da Netflix, chamado Eureka, o balanceador de carga direciona todo o tráfego para o novo cluster. O novo cluster é monitorado cuidadosamente e mantido em funcionamento durante a noite. Se tudo ocorrer bem, o cluster antigo é destruído. Se algo der errado, o balanceador de carga é apontado de volta para a versão antiga do cluster.
Falhas acontecem com frequência na infraestrutura da Netflix. O software, portanto, precisa ser capaz de lidar com falhas de hardware, falhas de conectividade na rede, e muitos outros tipos. Mesmo se a falha não ocorrer naturalmente, ela é provocada propositalmente utilizando o Simian Army. O Simian Army consiste de um número de "macacos digitais" que introduzem falhas de forma randômica. Por exemplo, o Chaos Monkey derruba aleatoriamente servidores enquanto o Latency Monkey introduz aleatoriamente latência na rede. Assegurar que as falhas ocorram constantemente torna impossível para o time ignorar problemas e cria uma cultura onde uma das prioridades principais é a resiliência a falhas.
Muitas partes da infraestrutura da Netflix já são open source e estão disponíveis no Github. É objetivo da Netflix, no fim, ter toda sua infraestrutura liberada para que outras companhias se beneficiem dela.
Jeremy Edberg, Reliability Architect da Netflix, estará no QCon São Paulo este ano, apresentando a cultura de DevOps da empresa e as técnicas usadas para manter um dos maiores sites do mundo no ar, 24x7.