Aplicações e sistemas reativos – Entrevista com Burr Sutter

Postado por em   ●   2 comentários

Em 2016 tivemos a oportunidade de participar de dois congressos muito importantes, o SpringOne Platform e o JavaOne, e em ambos a palavra “reativo” estava presente.

Nessa conversa com Burr, que é Diretor de Experiência do Usuário da Red Hat, ele faz uma introdução sobre programação e aplicações reativas.

Burr fala também sobre o Vert.x, um framework que te ajuda a criar aplicações reativas para atender milhares de transações por segundo.

Assista o vídeo, comente e compartilhe para seus amigos também aprenderem um pouco mais sobre esse mundo “reativo”! :)

Transcrição

Normandes: Oi. Meu nome é Normandes, da AlgaWorks. Estou aqui no Hotel Hilton em São Francisco, no JavaOne 2016, e estou com Burr Sutter. Muito obrigado por estar aqui conosco. Peço que se apresente.

Burr: Ok, bom, meu nome é Burr, e sei que é um nome incomum, mas é meu nome de verdade. Estou aqui no JavaOne, e falei esta semana sobre microsserviços reativos com Vert.x. Vert.x é uma tecnologia que estou particularmente interessado no momento, mas sou uma pessoa do Java, fui presidente do Grupo de Usuários de Java de Atlanta por vários anos. Fui fundador da DevNexus, uma conferência de desenvolvedores bem grande, também em Atlanta, estou na comunidade Java por mais ou menos 20 anos, e estou nesse meio já faz muito tempo. Também fui desenvolvedor em C# por muito tempo, mas não conte isso para ninguém.

Normandes: Ok, legal. Então, fale sobre reatividade. Por que nós deveríamos estar interessados em aprender sobre sistemas reativos ou programação reativa?

Burr: Então, há uma diferença entre programação reativa e sistemas reativos. No caso da programação reativa, algumas pessoas pensam como um subconjunto da programação funcional, e você consegue aplicar programação reativa em coisas como RxJava por exemplo, e também há fluxos reativos como o Java 8, portanto as pessoas estão vendo isso numa perspectiva de streaming.

Mas, em geral, o que nós estamos vendo quando se trata de reatividade e esse interesse nela, e também este espaço assíncrono orientado a eventos, é que o volume de dados que estamos vendo é incrivelmente alto. E isso não tem relação somente com transações no navegador, pessoas acessando um site e coisas semelhantes. Hoje em dia estamos falando sobre dispositivos móveis, bilhões de dispositivos móveis produzindo transações que alimentam sistemas, e mais além disso, IOT, internet das coisas, produzindo potencialmente trilhões de transações que usam nossos sistemas.

Portanto, quando você começa a lidar com o fluxo de dados em tempo real vindo de todos esses diferentes sensores, dispositivos, dispositivos móveis, navegadores, usuários finais, usuários humanos, você tem que começar a pensar diferente sobre como escalar o problema. E, então, a programação reativa, claro, é uma maneira de escrever o código numa maneira agradável, sucinta e “orientada a fluxo”, se assim preferir – você tem o conceito de observadores e Futures, dependendo em como você olha para esse modelo de programação. Entretanto, sistemas reativos são realmente para manifestos reativos. Em reactivemaniesto.org você encontra coisas como resiliência, elasticidade, orientação a mensagens, tem os princípios chave lá, confiabilidade… Tudo isso para garantir tempo de resposta, garantir o seu uptime, garantir aumento de escala, e ter tudo orientado a mensagens e assíncrono.

Então é só uma maneira diferente de construir sistemas, se você preferir. Mas significa que você pode construir sistemas realmente interessantes com esta técnica e tecnologia.

Normandes: Beleza, entendi. Você comentou sobre Vert.x. Pode falar um pouco mais?

Burr: Claro, Vert.x – cujo website é vertex.io – é um kit de ferramentas de programação muito legal. Na verdade, eles auto-denominam “kit de ferramentas” porque nada mais é do que um arquivo “.jar” que você pode baixar e incluir no seu projeto. Você simplesmente edita o seu classpath e inicia a API, você pode só incluí-lo no seu “pom.xml” caso use Maven e construir o projeto. E então você começa a usá-lo. Você inicia criando uma subclasse, e então inclui a API no seu código.

É muito simples, no Vert.x, de abrir um socket listener para qualquer tipo de protocolo de comunicação. Pode ser um web socket para comunicação com o browser, pode ser simplesmente HTTP, pode ser UDP, TCP, qualquer tipo de listener que você preferir. E então você escreve o código de uma maneira assíncrona. Você simplesmente ouve a certos eventos vindos daquele canal, e então você tem o seu manipulador, que basicamente reage àquele evento. Então, é tudo baseado num ciclo de eventos, tipo Node.js.

Se você estiver familiarizado com Node.js e o modelo de programação dele, é bem similar àquele mundo, mas é tudo feito em Java; mas ainda assim poliglota. Você pode rodar aplicações Javascript-Node Vert.x, aplicações Ruby Vert.x, pode usar Groovy ou Java, eu prefiro Java, obviamente, é um estilo de programação bem divertida, incrivelmente leve, basta adicionar um arquivinho “.jar” nos seus projetos e você pode facilmente construir grandes aplicações de internet a partir disso ou qualquer tipo de aplicação num estilo reativo.

Normandes: Ok, então, falando sobre aplicações, quais tipos de aplicações pode-se criar usando o modelo de programação reativa do Vert.x?

Burr: Uma coisa que apresentamos nas nossas demonstrações no começo desse ano, assim como nas demonstrações que apresentei nesse JavaOne, é um jogo simples. É um jogo em tempo real especificamente para navegadores de celulares. E quando eu digo “tempo real” estou me referindo à algo incrivelmente reativo às interações do usuário. Cada toque no celular é uma transação que percorre na rede local, conexão 3G, 4G ou LTE, para a nuvem, para o Vert.x, que na verdade, comunica-se com vários serviços, e que responde de volta ao usuário em vários casos. Então, à medida que eles estouram balões animados no celular, nós vemos um painel mostrando os resultados em tempo real.

Então, esse conceito de interatividade real e extrema é um excelente exemplo de onde o Vert.x realmente cai muito bem, porque ele permite aquele modelo de programação, que torna tudo muito fácil. É realmente interessante construir aplicativos dessa forma. E na minha outra demonstração, mostrei que se pode ter múltiplas JVMs comunicando entre si através do que chamamos de event bus do Vert.x. E elas ainda se comunicam em tempo real com o navegador, então o browser é também uma peça-chave do modelo. Você vê mensagens sendo produzidas através do cluster de JVMs, e então você vê os dados sendo exibidos no navegador.

Um bom exemplo é o Google Docs. Já viu o Google Docs, aonde 2 ou 3 pessoas podem editar um slide ou planilha ou documento simultaneamente e você vê todas as alterações feitas por eles? Esse tipo de interação de usuário – não estou dizendo que Google Docs é feito com Vert.x – esse tipo de aplicativo é que você pode criar com Vert.x.

Normandes: Ok, então, falando sobre aplicações. Você acredita que é apropriado usar Vert.x, usar o modelo de aplicações reativas, no mundo corporativo? Você acha que podemos usá-lo?

Burr: Então, em se tratando de empresas tradicionais… tudo ainda é baseado na JVM, que, claro, são as coisas que todos conhecemos e amamos, e que pessoas têm usado extensivamente no mundo empresarial, então, a boa notícia é que você simplesmente inclui o tal arquivo “.jar” no seu projeto e pronto. Mas um caso de uso que realmente me vem à cabeça é o mesmo caso de uso que faz as pessoas gostarem de Node.js, que é a habilidade de fazer ressurgir sistemas existentes com uma nova API. Este é um excelente caso de uso porque construir uma RESTful API ou uma API de web socket ou qualquer outro tipo de API de escuta TCP/IP é muito simples com o Vert.x, e então você pode invocar o sistema de back-end. E o mais interessante é que tudo é feito de forma assíncrona. Portanto se você está tentando ser responsivo aos seus usuários – e ser responsivo é um dos aspectos chaves dos sistemas reativos, o manifesto reativo – você pode basicamente responder ao usuário baseando-se em qual requisição pode ser completada naquele dado momento.

Então, aqui vai um ótimo exemplo, e ele é verídico para alguns dos clientes de varejo que tenho conversado. Se você pensar no aplicativo móvel e no que ele representa, você vê o preço do item, a imagem dele, tipo quando você está comprando online você nota a quantidade de estrelas, se são 4 ou 5, você pode ver uma descrição, pode ver ofertas recomendadas, e, se progrediu na compra você vê o carrinho de compras e as informações dele. Então, tudo isso pode ser chamadas individuais ao sistema. No caso do Vert.x, ele pode responder todas essas chamadas individualmente e de modo assíncrono, preenchendo a página, baseando-se em quando cada resposta fica pronta. No caso de um estoque, quando se tem um campo que mostra ou usa a quantidade em estoque, essa informação pode ter de ser buscada lá num servidor matriz distante e separado, especialmente numa empresa grande de varejo, por exemplo. E você poderia gerenciar isso. Você poderia ter uma API disponibilizada pela Vert.x, que então faria a requisição, pegaria o dado sem bloquear nenhuma thread, sem fazer ninguém esperar, e também ser impedir a página de renderizar, se você quiser. Ele então responderia quando o dado ficasse disponível.

Então, você pode resolver casos de uso bem interessantes com ele e ainda torná-lo perfeitamente aplicável no meio corporativo. Se você quiser só aplicações web básicas, também é possível. Não não precisa ser todo chique, “assíncrono em tempo real” e tal. Você pode até fazer o usuário esperar também, se quiser.

Normandes: Muito bacana. Então, vocês viram que é incrível, né? Vocês podem criar várias aplicações excelentes. Você pode contar, então, para nossa audiência, onde eles podem encontrar mais informações, onde eles podem aprender sobre Vert.x, sobre sistemas e aplicações reativas?

Burr: Claro, vocês podem começar certamente por vertx.io, este site em específico, ou mesmo pesquisar por “vert.x”. Há, na verdade, dois “vert.xs” no mundo, que eu tenha notado. Há o nosso, que é a tecnologia Java, e há também alguma coisa referente a bolsas e roupas, então, não tem nada relacionado com roupas. Tem a ver com Java. Esta é a primeira coisa. E, então, visite o site, e veja também a apresentação que acabei de dar essa semana, em bit.ly/reactivemsa, sobre arquitetura de microsserviços. O link vai te levar aos slides que também têm links para várias demonstrações de exemplos, e também vai te dar uma visão geral sobre microsserviços, reatividade e Vert.x, e então você pode se aprofundar a partir daí.

Normandes: Muito bom. Então, muito obrigado pelo seu tempo. Obrigado à você e à todos que estão assistindo, por favor, curta esse vídeo, comente se tiver dúvidas… muito obrigado. Compartilhe com seus amigos. Tchau!

Instrutor da AlgaWorks. Graduado em Engenharia Elétrica pela Universidade Federal de Uberlândia e detentor das certificações LPIC-1, SCJP e SCWCD. Palestrante internacional, autor e co-autor de livros e instrutor de cursos de Java, JPA, TDD, Design Patterns, Spring, etc.

2 comentários sobre “Aplicações e sistemas reativos – Entrevista com Burr Sutter

  1. Elias Neto -

    Normandes, dá uma olhada no endereço do website. Acho que o correto é: http://vertx.io/

  2. Paulo André Vicente Fernandes -

    Parabéns, conteúdo muito bacana!

Deixe um comentário