Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time

O Manifesto Reativo

Organizações que trabalham em diferentes ramos estão independentemente descobrindo padrões para criar sistemas semelhantes. Esses sistemas são mais robustos, mais resilientes, mais flexíveis e melhor posicionados para sustentar as demandas modernas.

Essas transformações estão acontecendo porque os requisitos de sistemas mudaram drasticamente nos últimos anos. Há apenas alguns anos, uma grande aplicação tinha dezenas de servidores, tempo de resposta na casa dos segundos, horas de indisponibilidade para manutenção e gigabytes de dados. Aplicações atuais são entregues em todos os lugares, desde aplicativos móveis até aplicações na nuvem com clusters rodando milhares de processadores multi-core. Geralmente os usuários esperam respostas em milissegundos e 100% de disponibilidade. Dados são mensurados em petabytes. As demandas de hoje simplesmente não são mais atendidas pelas arquiteturas do passado.

Nós acreditamos que é preciso haver uma abordagem consistente para arquitetura de sistemas, e acreditamos que todos os aspectos necessários já são reconhecidos individualmente: nós queremos sistemas Responsivos, Resilientes, Elásticos e Orientados a Mensagens. Nós chamamos isso de Sistemas Reativos.

Sistemas criados como Reativos são muito mais flexíveis, desacoplados e escaláveis. Isso os torna mais fáceis para desenvolver e mais abertos a mudanças. São significativamente mais tolerantes a falhas e quando elas ocorrem são tratadas com elegância ao invés de desastre. Sistemas Reativos são altamente responsivos, dando aos usuários um efetivo feedback interativo.

Sistemas Reativos são:

  • Responsivos: O sistema responde em um tempo razoável, se possível. Responsividade é a pedra fundamental da usabilidade e da utilidade, mas, mais do que isso, responsividade significa que problemas podem ser detectados rapidamente e tratados com a máxima eficácia. Sistemas responsivos têm como objetivo prover tempos de resposta curtos e consistentes, estabelecendo margens de tolerância confiáveis que garantem uma qualidade de serviço consistente. Esse comportamento consistente, por sua vez, simplifica tratamentos de erro, reforça a confiança do usuário final e incentiva interações futuras.
  • Resilientes: O sistema continua responsivo em caso de falha. Isso aplica-se não apenas para sistemas de alta disponibilidade e missão crítica — qualquer sistema que não é resiliente ficará indisponível após uma falha. Resiliência é obtida por meio de replicação, contenção, isolamento e delegação. Falhas são contidas dentro de cada componente, isolando-os uns dos outros e, portanto, garantindo que partes do sistema podem falhar e se recuperar sem comprometer o sistema como um todo. A recuperação de cada componente é delegada a outro componente (externo) e alta disponibilidade é garantida por replicação, quando necessária. Os clientes de cada componente não são sobrecarregados com a responsabilidade do tratamento de falhas.
  • Elásticos: O sistema continua responsivo mesmo sob variações de carga de demanda. Sistemas Reativos podem reagir a mudanças na taxa de solicitações por meio do aumento ou diminuição dos recursos alocados para lidar com essas entradas. Isso requer uma arquitetura que não tenha pontos de contenção ou gargalos, o que permite dividir ou replicar componentes e distribuir a demanda entre eles. Sistemas Reativos suportam algoritmos de escalonagem preditivos e Reativos porque geram métricas de desempenho relevantes e em tempo real. Assim, conseguem elasticidade com baixo custo em hardware e plataformas de software padrões.
  • Orientados a Mensagens: Sistemas Reativos baseiam-se em transferência de mensagens assíncronas para estabelecer fronteiras entre os componentes e garantir baixo acoplamento, isolamento, transparência na localização. Essas fronteiras também provêem meios para delegar o tratamento de erros na forma de mensagens. Utilizar explicitamente a transferência de mensagens permite o gerenciamento de carga, elasticidade e controle de fluxo, por meio da modelagem e monitoramento das filas no sistema e aplicação de contrapressão quando necessária. Roteamento de mensagens com transparência na localização como o meio de comunicação torna possível o gerenciamento de falhas da mesma maneira seja em um cluster ou em um único host. Comunicação não bloqueante permite que os destinatários consumam recursos apenas enquanto estão ativos, o que leva a uma menor sobrecarga no sistema.

Grandes sistemas são compostos por sistemas menores e, portanto, dependem das propriedades Reativas de seus componentes. Isso significa que Sistemas Reativos aplicam princípios arquiteturais que fazem com que essas propriedades sejam utilizadas em todos os níveis da escala, de modo que os componentes sejam combináveis entre si. Os maiores sistemas do mundo são construídos sobre arquiteturas que baseiam-se nessas propriedades e servem as necessidades de bilhões de pessoas diariamente. Está na hora de aplicar esses princípios conscientemente do início ao invés de redescobrí-los todas as vezes que implementamos um novo sistema.

Assine o manifesto reativo