Com a crescente demanda de aplicações extremamente rápidas e disponíveis programação reativa está se tornando um tópico cada vez mais popular e relevante dentre os círculos de desenvolvimento de software.

Atul Shukla e Revanth Talari da USEReady fizeram uma apresentação fantástica sobre esse assunto no AWS Reinvent 2014, mostrando como podemos converter uma aplicação com uma arquitetura não-reativa para uma arquitetura reativa. Nesse artigo vou apresentar alguns dos conceitos chave da apresentação.

Uma aplicação não reativa, geralmente é Sincrona,  Acoplada, Bloqueante e Puxada, veja na imagem:

nao-reativa

 

Uma aplicação reativa, em contrapartida, como você leu no artigo anterior é:

1. Responsiva

Empurrada em vez de puxada, a aplicação faz pushes para o client em tempo real.

Para alcançar esse objetivo os palestrantes utilizaram instâncias EC2 na AWS como servidores WebSocket e o serviço de notificações da AWS, o SNS, para fazer pushing e atualizar os demais clients.

Para os Websockets, utilizaram SockJS tanto no client HTML5 (browser), como no server com NodeJS.

responsiva

 

arc206-architecting-reactive-applications-on-aws-aws-reinvent-2014-32-638

2. Resiliente

A aplicação deve continuar funcionando mesmo que alguns componentes falhem, veja na animação abaixo para compreender melhor:

resilient

Para tornar a aplicação resiliente, criaram instâncias que executam a aplicação simultaneamente em diversos Datacenters (Availability Zones), com Route 53 para fazer tratar o DNS.

3. Elástica

A aplicação deverá escalar de acordo com a demanda, quando aumentar a demanda, utiliza mais instâncias de servidores, e quando a demanda diminui reduz a quantidade de instâncias, veja a animação para compreender melhor:

elastico

 

Para tornar a aplicação elástica, os palestrantes utilizaram o ELB (Elastic Load Balancer) para fazer o balanceamento de carga entre as instâncias EC2,  Autoscaling para aumentar e diminuir a quantidade de instâncias EC2. Utilizaram também o Elastic Beanstalk para fazer deploy das aplicações nas instâncias, e DynamoDB como um banco de dados extremamente rápido e de baixa latência.

4. Guiada por Mensagens

Os componentes são desacoplados e colaboram através da troca de mensagens.

Para isso os palestrantes utilizam os serviços SQS (Simple Queue Service) para enviar mensagens e SWF (Simple Workflow Service) para criar tarefas para processar e retransmitir as mensagens.

message

Arquitetura Reativa

Convertendo nosso modelo inicial para o modelo reativo, teremos algo assim:

modelo-reativo

Resumindo, no modelo de arquitetura final, nós recebemos mensagens dos clients HTML que são enviados para uma fila SQS, que é enviada para um worker do SWF que grava a mensagem no DynamoDB e envia também para uma nova fila do SQS, então, outro worker do SWF puxa as mensagens e notifica os demais clients HTML sobre a nova mensagem através de um push pelo SNS. Genial!

arc206-architecting-reactive-applications-on-aws-aws-reinvent-2014-49-638

 

A Palestra

Veja o vídeo e acompanhe os slides da palestra, se quiser aprender com os próprios palestrantes:

[slideshare id=41673462&doc=arc206-141117155257-conversion-gate02]

Conclusão

Arquiteturas reativas permitem aplicações mais disponíveis, mais rápidas e mais confiáveis! Com a ajuda de ferramentas como WebSockets, DynamoDB, EC2, Autoscaling e Serviços de Mensagens (SQS, SNS, SWF) podemos construir aplicações reativas com esforço relativamente baixo.

 

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