O que é programação reativa? \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 14 Horas 

 02 Min 

 11 Seg 

   Tempo restante da oferta: 14 02 11 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) O que é programação reativa?  [ Arquitetura de Software ](https://www.treinaweb.com.br/blog/categoria/arquitetura-de-software) 

# O que é programação reativa?

 Confira neste artigo o que vem a ser programação reativa, um princípio de desenvolvimento de software que vem ganhando espaço entre os desenvolvedores.

 [ Marylene Guedes ](https://www.treinaweb.com.br/blog/autor/marylene-guedes) 6 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/03/o-que-e-programacao-reativa.png)  

Programação reativa é um modelo ou um paradigma de programação criado inicialmente pela Microsoft que é orientado a fluxo de dados e propagações de estados.

Estes fluxos de dados (que também são chamados de streams) são em grande parte assíncronos, ou seja, as operações são independentes umas das outras e não precisam ser executadas em uma sequência específica.

Todas as ações quando falamos sobre programação reativa são transmitidas e detectadas por um fluxo de dados, como eventos, mensagens, chamadas e até mesmo as falhas. Aplicações reativas, então, são constituídas por reações a alterações nestes fluxos de dados.

### Vantagens e desvantagens da programação reativa

O paradigma reativo possui alguns conceitos, como a assincronia, a utilização de processos não-bloqueantes e orientação a mensagens e eventos. Estes conceitos trazem algumas vantagens de maneira natural.

Aplicações reativas tendem a ser mais escaláveis, pois todos os processos são fundamentados em cima de eventos não-bloqueantes. A execução de tarefas bloqueantes geralmente tem a tendência de criar bloqueios de recursos computacionais (como memória e processador), o que pode atrapalhar na escalabilidade da aplicação.

A programação reativa tem justamente como uma das principais premissas lidar com processos que não sobrecarreguem ou bloqueiem a utilização desses recursos computacionais.

Existem várias estratégias computacionais para a criação de processos não-bloqueantes, como a utilização de sub-rotinas (como as goroutines no Go ou as coroutines no Kotlin).

Essa abordagem também acaba trazendo por decorrência uma utilização mais eficiente dos recursos computacionais e uma responsividade naturalmente maior da aplicação (a aplicação tende a cair em menos situações em que a mesma trava ou oferece respostas lentas).

A programação reativa também oferece mecanismos mais flexíveis e robustos para lidar com situações de erro. Mecanismos naturais para a programação reativa (como a utilização de backpressure para controlar o fluxo de dados nos streams de dados de acordo com os consumidores) e o fato de que até mesmo as notificações de erro serem constituídas por eventos emitidos dentro de streams fazem com que o tratamento de erros seja mais eficiente do que em abordagens mais “tradicionais”.

[  ![RxJS - Programação reativa](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/reactivex.svg)   Curso RxJS - Programação reativa Conhecer o curso ](https://www.treinaweb.com.br/curso/programacao-reativa-com-rxjs)

Porém, também existem desvantagens quando utilizamos o paradigma reativo. Uma delas é a curva de aprendizado: escrever aplicações baseando-se em fluxos de dados assíncronos é algo geralmente bem complicado no começo, pois é uma linha de pensamento com a qual a maioria das pessoas não está habituada inicialmente.

Isso certamente leva até mesmo à escrita de código com uma qualidade não tão boa, até que os conceitos da programação reativa sejam plenamente absorvidos. Outra desvantagem muito notável do paradigma reativo é o processo de logging, depuração e instrumentação.

Como, dentro de aplicações reativas, acabamos tendo inúmeros sub-processos sendo executados de maneira assíncrona e ao mesmo tempo, lidar com o log e o tracing dos eventos na aplicação pode se tornar confuso e um grande desafio, já que não temos operações sendo executadas de maneira sequencial.

Uma boa parte das ferramentas de instrumentação no mercado (como o NewRelic, Scout e Sentry) não oferecem ainda mecanismos plenamente robustos para instrumentação e monitoramento. Isso não quer dizer que os mecanismos existentes sejam ruins, mas eles ainda não apresentam o mesmo nível de maturidade que é oferecida em outras abordagens que não a reativa.

### Os pilares das aplicações reativas

Em 2014, um grupo de desenvolvedores criou a segunda versão de um documento que define o que faz com que aplicações sejam consideradas reativas. Esse documento é conhecido como [Manifesto Reativo](https://www.reactivemanifesto.org/ "Manifesto Reativo").

Segundo a versão mais recente do Manifesto Reativo, existem 4 pilares que orientam como os sistemas reativos devem ser. São eles:

###### Responsividade (responsiveness)

Aplicações reativas precisam ser muito responsivas, oferecendo um feedback rápido para seus usuários sobre as ações que estes desempenham. Por exemplo: se você está em um e-commerce e clica para ir para o carrinho para fechar a compra, o e-commerce não pode demorar para ir para a página do carrinho ou, caso seja necessário demorar um pouco mais, algum feedback precisa ser dado para o usuário. Para ser responsivo, um sistema deve oferecer interações ricas em tempo real com os usuários, estabelecendo uma margem de tolerância que garantam uma qualidade de serviço. Esse comportamento transmite confiança ao usuário final, além de simplificar o tratamento de erros.

###### Resiliência (resilience)

Aplicações reativas devem reagir e se recuperar de falhas de software, hardware e conectividade, além de serem capazes de “lidar” com o componente que apresenta o comportamento incorreto. Para isso, existem algumas estratégias que podem ser adotadas, como mecanismos de replicação (onde uma aplicação possui uma cópia principal funcional e réplicas “adormecidas” que podem ser instantaneamente acionadas caso a cópia principal comece a falhar), mecanismos de contenção (como uma aplicação que é capaz de “segurar” as requisições realizadas para que sejam processadas novamente quando ela se recuperar de um episódio de falha), mecanismos de isolamento (como em uma aplicação que exibe um feedback de indisponibilidade de uma funcionalidade quando esta começa a apresentar um índice alto de falhas ao invés de permitir aos usuários continuar acessando o processo que está com problemas) e mecanismos de delegação (quando uma aplicação consegue utilizar mecanismos de fallback para ações defeituosas). Qualquer sistema que não esteja resiliente naturalmente não será responsivo após uma falha.

###### Elasticidade (elasticity)

A elasticidade de um sistema é verificada quando ele se mantém responsivo e resiliente, mesmo com altas variações de carga. O sistema irá reagir a grandes cargas, aumentando ou diminuindo os recursos alocados para servir estes mesmos acessos. Por exemplo: uma aplicação que é executada em um servidor com 4GB de memória precisa ser capaz de aumentar a quantidade de memória disponível ou ativar novas réplicas auxiliares quando ela sofrer um pico de acessos simultâneos. Mais que isso, a aplicação precisa ser capaz de voltar à configuração inicial quando este pico de acessos passar, evitando custos desnecessários. Se a aplicação consegue aumentar a quantidade de recursos consumidos em situações de carga, mas não consegue voltar às configurações originais quando estes picos passam, a aplicação não pode ser considerada elástica. E mais importante: esse processo de elasticidade precisa ser muito rápido e automático, garantindo que a aplicação continue responsiva e resiliente.

###### Guiado por mensagens (message driven)

Uma arquitetura orientada por mensagens é a base das aplicações reativas. Um sistema orientado por mensagem reage aos eventos em vez de compor aplicações por múltiplas threads síncronas, onde os sistemas são compostos de gerenciadores de eventos assíncronos e não bloqueantes. Isso quer dizer que, em uma aplicação reativa, ao invés de você ter chamadas explícitas entre componentes (um controller e um repository, por exemplo), você tem na verdade mensagens trocadas de maneira assíncrona entre estes dois componentes. Estas mensagens geralmente são trafegadas entre um meio transparente entre os componentes, como um barramento de eventos (event bus), e acabam constituindo justamente os data streams, citados no início deste artigo.

- [ #vantagens ](https://www.treinaweb.com.br/blog/tag/vantagens)
- [ #desvantagens ](https://www.treinaweb.com.br/blog/tag/desvantagens)
- [ #pilares ](https://www.treinaweb.com.br/blog/tag/pilares)
- [ #programação reativa ](https://www.treinaweb.com.br/blog/tag/programacao-reativa)
- [ #responsividade ](https://www.treinaweb.com.br/blog/tag/responsividade)
- [ #elasticidade ](https://www.treinaweb.com.br/blog/tag/elasticidade)
- [ #resiliencia ](https://www.treinaweb.com.br/blog/tag/resiliencia)
- [ #mensagens ](https://www.treinaweb.com.br/blog/tag/mensagens)

Autor

 ![Marylene Guedes](//secure.gravatar.com/avatar/5b0ba52b3705f298802db58782656bbc?d=mm)

## Marylene Guedes

 Responsável pelo sucesso do cliente na TreinaWeb. Graduada em Gestão de Tecnologia da Informação pela FATEC Guaratinguetá, além de estudante de UX/UI. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/marylene-guedes)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/06/VUE-400x280.png)  [ Desenvolvimento Front-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-front-end) 

     6 anos atrás

    ##  [ O que é o Vue.js? ](https://www.treinaweb.com.br/blog/o-que-e-o-vue-js) 

     Atualmente, graças à popularização do JavaScript, existe uma grande variedade de frameworks front-end para diferentes propósitos. Neste artigo, será abordado o Vue.js, um dos frameworks JavaScript SPA da atualidade.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/spring-framework-400x280.png)  [ Java ](https://www.treinaweb.com.br/blog/categoria/java) 

     6 anos atrás

    ##  [ O que é Spring Framework? ](https://www.treinaweb.com.br/blog/o-que-e-spring-framework) 

     Confira neste artigo o Spring framework: um ecossistema de desenvolvimento para facilitar a criação de aplicações Java.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/06/javascript-generators-e-onde-usa-los-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     10 anos atrás

    ##  [ JavaScript Generators e onde usá-los ](https://www.treinaweb.com.br/blog/javascript-generators-e-onde-usa-los) 

     Veja como e onde podemos aproveitar os Generators no JavaScript para melhorar o nosso código.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/javascript_generators-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     10 anos atrás

    ##  [ JavaScript Assíncrono com Generators ](https://www.treinaweb.com.br/blog/javascript-assincrono-com-generators) 

     Generators são uma funcionalidade que veio no ES2015 para nos auxiliar no desenvolvimento de código assíncrono.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/functional-400x280.png)  [ PHP ](https://www.treinaweb.com.br/blog/categoria/php) 

     10 anos atrás

    ##  [ Imutabilidade de objetos no PHP ](https://www.treinaweb.com.br/blog/imutabilidade-de-objetos-no-php) 

     Imutabilidade é uma característica forte nas linguagens funcionais, onde a alteração de estado não é frequente e, quando ela acontece, é controlada. Veja como podemos ter objetos imutáveis no PHP.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/12/10103951/capa-5-linguagens-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     7 anos atrás

    ##  [ 5 linguagens de programação promissoras para se estudar em 2020 ](https://www.treinaweb.com.br/blog/5-linguagens-de-programacao-promissoras-para-se-estudar-em-2020) 

     Nada melhor do que finalizar o ano de 2019 já sabendo quais as linguagens devem se destacar no próximo ano. Que tal aproveitar e traçar uma meta de estudos envolvendo as linguagens mais promissoras para 2020?

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/novos-recursos-do-ecmascript-2022-400x280.png)  [ Javascript ](https://www.treinaweb.com.br/blog/categoria/javascript) 

     4 anos atrás

    ##  [ Novos recursos do ECMAScript 2022 ](https://www.treinaweb.com.br/blog/novos-recursos-do-ecmascript-2022) 

     Novos recursos do ECMAScript 2022 que é a décima terceira edição da especificação que vai padronizar tudo no mundo do JavaScript.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/CAPA-ERROR-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     6 anos atrás

    ##  [ O que é AOP - Programação Orientada a Aspectos? ](https://www.treinaweb.com.br/blog/o-que-e-aop-programacao-orientada-a-aspectos) 

     Conheça a programação orientada a aspectos e o por que utilizá-la.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/08/o-que-e-a-linguagem-de-programacao-ruby-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ O que é a Linguagem de Programação Ruby? ](https://www.treinaweb.com.br/blog/o-que-e-a-linguagem-de-programacao-ruby) 

     Veja neste artigo o que é a linguagem de programação Ruby.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/07/JULIA-1-400x280.png)  [ Desenvolvimento Back-end ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento-back-end) 

     6 anos atrás

    ##  [ O que é a Linguagem de Programação Julia? ](https://www.treinaweb.com.br/blog/o-que-e-a-linguagem-de-programacao-julia) 

     Veja neste artigo o que é a Linguagem de Programação Julia.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/10/22104451/LOGICA-PROGRAMACAO-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     8 anos atrás

    ##  [ O que é de fato a lógica de programação? ](https://www.treinaweb.com.br/blog/o-que-e-de-fato-a-logica-de-programacao) 

     O termo pode parecer confuso ou muito genérico, principalmente para quem é iniciante. Mas o que é, afinal, a tal lógica de programação?

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/07/o-que-preciso-conhecer-antes-de-iniciar-os-estudos-em-uma-linguagem-de-programacao-400x280.png)  [ Carreira ](https://www.treinaweb.com.br/blog/categoria/carreira) 

     4 anos atrás

    ##  [ O que preciso conhecer antes de iniciar estudos em uma linguagem de programação? ](https://www.treinaweb.com.br/blog/o-que-preciso-conhecer-antes-de-iniciar-estudos-em-uma-linguagem-de-programacao) 

     Essa é uma pergunta muito comum para quem deseja iniciar na área de programação. Por mais que desejamos já começar com uma linguagem e ver tudo acontecendo na tela, é necessário construir uma base antes. Por isso, existem alguns passos importantes antes mesmo de escolher uma linguagem de programação para estudar e é isso que veremos neste artigo.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **14h 02min 11s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
