A expansão da internet no Brasil e no mundo traz consigo novas necessidades para quem trabalha com toda a espécie de ferramenta ou equipamento que faz esse grande universo de conteúdo virtual girar. Esse ávido anseio por um mundo mais conectado gera novos desafios para vários campos da computação. Desafios esses que vão desde a necessidade de hardwares cada vez mais potentes até a preocupação cada vez maior com questões relacionadas à segurança e performance. Isso acaba por surtir um impacto direto no desenvolvimento de novas ferramentas para esse mundo mais conectado.
Diante disso, atualmente, uma aplicação serve como uma ferramenta estratégica da empresa, funcionando de maneira similar a um hub de informações e fluxos dentro dela, ou mesmo como um produto final entregue aos seus clientes. Nessa nova realidade, arquitetos e desenvolvedores presenciam uma verdadeira revolução que vem acontecendo em nossa área, impulsionada pelas questões supracitadas que se tornam a cada dia mais críticas.
Escalabilidade e alta disponibilidade, por exemplo, nunca foram itens tão essenciais, exigindo que as equipes de desenvolvimento estejam em constante evolução. Para arquitetos de software e gerentes, no entanto, ainda pesa outro elemento no momento de planejar a solução, o custo. Apesar de ser um fator que deve ser considerado em qualquer empresa em nível global, no Brasil ainda temos a questão da alta do dólar, que atua como um agravante.
Quando falamos em aplicações que possuem um grande fluxo de usuários, como grandes portais, existe a tendência de disponibilizar seus serviços através de servidores localizados em nuvem, como a Amazon ou o Microsoft Azure. Contudo, apesar de grandes empresas fornecedoras de serviços em nuvem já disponibilizarem servidores no Brasil ou pelo menos na América Latina, a contratação desses serviços acaba sendo afetada diretamente pela variação cambial, por ser taxada em dólar. Ainda assim, mesmo sofrendo com aspectos sobre os quais não temos controle, podemos melhorar o custo otimizando código, além de um setup mais refinado da estrutura que funciona como base.
Para tanto, lembre-se que grandes aplicações exigem também uma equipe alinhada. Assim, ferramentas que facilitem a comunicação e a gestão das pessoas ganham importância por organizarem e disseminarem informação de maneira rápida e ágil. O aplicativo Slack é uma solução que aposta fortemente na comunicação, não somente entre pessoas, mas também entre equipes, departamentos, filais e ferramentas, oferecendo integração a uma vasta gama de opções. Nesse contexto, aplicações como o Octopus, Deploybot e Jenkins podem, através dela, manter os interessados informados de um modo mais eficiente e sem a necessidade de criar hooks dentro das mesmas para estabelecer a relação com o Slack, possibilitando uma melhor comunicação sem grande esforço. Desse modo, todos os envolvidos nas diferentes fases do projeto conseguem ser notificados de uma maneira mais rápida e simples.
Nesse cenário, o desenvolvimento também é atingido por tais mudanças, entrando em cena novas ferramentas que oferecem a oportunidade de fazer mais com menos e de forma mais rápida. Várias delas que há poucos anos nem existiam e hoje são referências de mercado, como é o caso do MongoDB; ou você, há seis anos, pensaria em usar uma ferramenta para armazenar seus dados que não adota pelo menos as três formas normais?
No que tange a arquitetura de software, um modelo que vem sendo adotado por grandes portais, inclusive no Brasil, é o modelo de microsserviços. Impulsionada por especialistas como Martin Fowler, a ideia ganha apoiadores a cada dia. Em um modelo monolítico, onde a aplicação é pensada e construída como um bloco único, qualquer necessidade de aumentar a performance precisa ser pensada e realizada de um modo geral, afetando o todo. Por outro lado, quando a aplicação é dividida em microsserviços, só existe a necessidade de escalarmos aqueles que necessitam da performance extra, o que reflete diretamente no custo de alavancar somente uma pequena parte da aplicação.
A ideia de dividir para melhor gerenciar recursos não é algo novo no universo Java. Este já apresenta diferentes soluções preparadas para essa nova maneira de se construir serviços, a exemplo do Spring Boot, uma das mais conhecidas. Tendo em seu core implementações dos containers Tomcat, Jetty e Undertow, oferece uma configuração rápida e simples, bastando poucas linhas para você ter um container web funcional com sua aplicação já embarcada e sem a necessidade de um deploy para tal.
Observando esse novo cenário, a Red Hat também vem buscando inovar. Na versão 9 do WildFly, por exemplo, houve muitas mudanças, como a implementação do Undertow no lugar do Tomcat, buscando assim tornar seu servidor web um container mais flexível, sem deixar de fornecer tudo o que um container full Java EE pode oferecer. Contudo, para abraçar de vez a realidade das aplicações voltadas para microsserviços, foi necessário mais uma vez reinventar o container. A modularização apresentada na versão 7 do JBoss AS foi reestruturada e a maioria dos elementos que eram carregados por padrão na inicialização do container foram removidos. Agora, qualquer elemento que seja necessário para a aplicação precisa ser adicionado manualmente.
O fruto de toda essa reformulação gerou um novo produto, o WildFly Swarm, que promete não ser um novo container, como consta na própria página da ferramenta, e sim uma nova maneira de empacotar e rodar aplicações Java EE, fazendo isso de maneira flexível, por carregar somente o que a aplicação precisa; madura, por respeitar todos os padrões do escopo enterprise do Java; e direta, por carregar seu projeto e o container em um único JAR.
Por que Java e microsserviços são uma boa ideia?
Caso você já tenha trabalhado com outras linguagens ou mesmo acompanha outras tecnologias, sabe que muitas vezes o Java é tido por outras comunidades como uma linguagem na qual não é fácil produzir algo de modo rápido. E a maneira como a linguagem trata seus novos adeptos também não é das mais sutis, exigindo muitas horas de estudo e prática até que você realmente consiga dar frutos de qualidade. Outro aspecto é que, por muitas vezes, um projeto relativamente pequeno pode chegar em poucos ciclos de desenvolvimento à casa de dezenas de dependências, demandando mais do container.
Note que ao falar dessa maneira até podemos ter a impressão de que falta inovação nesse universo. No entanto, observando os últimos anos podemos constatar que o Java tem buscado adotar vários aspectos de outras linguagens, como as expressões lambda, para atualizar seu repertório nativo e das bibliotecas que lhe dão suporte. Dessa maneira, ela consegue melhorar seu relacionamento com os desenvolvedores, pois o desejo da comunidade impulsiona a linguagem, justamente por ser um grupo que vocaliza muito bem seus ...