Muitos de nós temos grandes desafios de construir aplicações resilientes e escaláveis que sustentem milhares e até milhões de usuários. Agora, imagine ter que construir uma arquitetura de front door, que sustente mais de 1/3 de todo o tráfego da internet da América do Norte? Bem, a Netflix fez isso, e fez muito bem.

Nesse post apresentei algumas das tecnologias open source que eles utilizaram em uma palestra que vi no Reinvent realizada por Daniel Jacobson que é VP de Engenharia (Edge e Playback) da Netflix, e Benjamin Schmaus que é Diretor (Edge Systems) da Netflix.

A Netflix  suporta mais de 50 milhões de usuários em mais de 40 países. Veja na imagem abaixo a participação da Netflix do Upstream e Downstream da Internet:

arc317-maintaining-a-resilient-front-door-at-massive-scale-aws-reinvent-2014-3-638

Para cuidar das rotas, a Netflix usa uma combinação do AWS ELB (Elastic Load Balancer) com o Zuul, um software open source desenvolvido pela própria Netflix. As requests passam primeiro pelos ELBs que passam tráfego para instâncias EC2 rodando o Zuul, e ele faz o tratamento das rotas para os diversos serviços que são executados em diversas regiões e AZs da AWS.

O Hystrix, outro projeto open source da Netflix, entre outras coisas, permite que se um serviço falhar, não seja gerado um efeito em cascata que gere falhas no sistema como um todo, tornando assim aplicação indisponível. Com o Hystrix você pode aplicar o padrão de Circuit Breaker, definindo uma abordagem de fallback para cada um dos seus microservices de forma que se um serviço falhar, você pode fazer um tratamento especial para que o sistema continue disponível mesmo sem aquele serviço.

Veja como fica essa arquitetura, que recebe requests de mais de 1000 tipos diferentes de dispositivos como celulares, tablets, vídeo games, e televisores:

arc317-maintaining-a-resilient-front-door-at-massive-scale-aws-reinvent-2014-9-638

Os palestrantes, mostram um cenário em que o serviço de avaliar filmes do Netflix está fora do ar, nesse caso, o Hystrix, percebe a falha e apenas direciona para o fallback, que exibe a avaliação média do filme, em vez de apresentar a avaliação do usuário, de forma a gerar o menor impacto possível na experiência do usuário final.

Hystrix também tem um Dashboard bem legal que permite que você monitore todos os serviços para saber quais estão respondendo bem ou não (circuitos abertos ou fechados), veja:

arc317-maintaining-a-resilient-front-door-at-massive-scale-aws-reinvent-2014-39-638

 

Outro ponto interessante é a utilização de um balanceamento de carga através de previsão em vez de balancear a carga de forma apenas reativa a demanda, como geralmente é feito com o ELB+Autoscaling que a AWS oferece. Através do recurso autoscaling você pode configurar algumas triggers para aumentar ou diminuir a quantidade de máquinas virtuais EC2, de forma a escalar suas aplicações horizontalmente. Essa trigger pode ser algo do tipo:  quando todas as máquinas estiverem com CPU acima de 70% crie outra.

Com o Scryer LogoScryer, outro projeto da Netflix, você pode utilizar dados históricos de demanda do passado para dimensionar a quantidade de instâncias EC2 necessárias para atender a demanda da sua aplicação, e continuar contando com o autoscaling para demandas adaptar em caso de uma demanda inesperada, isso permitirá que você reduza ainda mais a latência geral da sua aplicação e ofereça melhor tempo de resposta para seus usuários.

O Scryer ainda não é Open Source, mas a Netflix está estudando essa possibilidade.

Veja os slides e vídeo da apresentação que a equipe da Netflix realizou no AWS Re:invent 2014 em Las Vegas:

Conclusão

Roteamento é Importante

Se sua aplicação tem alta demanda e requer alta disponibilidade, considere a possibilidade incluir uma camada de roteamento para direcionar e redirecionar as requisições para diferentes regiões, zonas de disponibilidade (AZs) e instâncias. O Zuul é uma ferramenta open source que pode te ajudar com isso.

Resiliência é Importante

Falhas na aplicação e falta de disponibilidade podem causar sérios impactos negativos em seu negócio. Utilize arquitetura de microservices com padrão Circuit Breaker para que quando uma parte do seu sistema falhar o resto continue disponível. O Hystrix é uma ferramenta open source que pode te ajudar com isso.

Escalabilidade é Importante

Esteja preparado para o sucesso! Faça uma gestão eficiente das instâncias que executam sua aplicação para que possam se adaptar ao crescimento e a queda de acessos a sua aplicação sem indisponibilidade ou diminuição do tempo de resposta, e melhor sem gerar custos desnecessários e exorbitantes. Utilize AWS AutoScaling, e uma ferramenta como o Scryer para te ajudar a prever e reagir a variação da demanda.

Não esqueça de deixar um comentário com suas impressões!