terça-feira, 12 de maio de 2015

Em sintonia com a realidade



Recentemente, eu postei um artigo intitulado: "Micro serviços imutáveis: A receita dos campeões" ( http://www.obomprogramador.com/2015/05/micro-servicos-imutaveis-receita-dos.html) cujo objetivo era demonstrar que é possível criar outras arquiteturas de apps, mais simples e eficientes, mesmo utilizando Java. 

Aquele artigo, assim como o anterior: "Abra sua mente" (http://www.obomprogramador.com/2015/03/abra-sua-mente.html), servem para fazer você refletir sobre a realidade da TI moderna. Agora, vamos ver o que os líderes de tecnologia falam a respeito disso.





Basfêmia!

- Dispensar um Servidor de aplicação Java EE?

- Gerar um novo servidor a cada build?

- Criar um sistema sem dividir em camadas?


O Mundo mudou, e a TI também. As empresas mais modernas, líderes de tecnologia já estão utilizando ferramentas, protocolos e padrões totalmente diferentes, e nós, aqui... No nosso "feijão com arroz".

Servidor de aplicação


Veja só o que a ThoughtWorks, empresa de Martin Fowler, fala sobre o uso de Servidores de Aplicação (como o JBoss, por exemplo): 

"The rise of containers, phoenix servers and continuous delivery has seen a move away from the usual approach to deploying web applications. Traditionally we have built an artifact and then installed that artifact into an application server. The result was long feedback loops for changes, increased build times and the not insignificant overhead of managing these application servers in production. Many of them are a pain to automate too. Most teams we work with favor bundling an embedded http server within your web application. There are plenty of options available: Jetty, SimpleWeb, Webbit and Owin Self-Host amongst others. Easier automation, easier deployment and a reduction in the amount of infrastructure you have to manage lead us to recommend embedded servers over application servers for future projects."


Traduzindo: 

"O surginento dos Containers (LXC), Phoenix servers (servidores destrutiveis), e Entrega contínua, provocou um movimento para fora da abordagem tradicional de distribuir aplicações web. Tradicionalmente, nós construímos um artefato e depois o instalamos em um Servidor de aplicação. O resultado são longos loops de feedback para alterações, aumento do tempo de construção (dos artefatos), e a não insifgnificante sobrecarga de administrar estes servidores de aplicação em produção. Muitos deles também são dolorosos de se automatizar. Muitas equipes, com as quais trabalhamos, preferem "embutir" um servidor HTTP dentro da aplicação. Há muitas opções disponíveis: Jetty, SimpleWeb, Webbit e Owin self-host, entre outras. Facilidade de automação, de distribuição e a redução na quantidade de infraestrutura a ser gerenciada, nos levam a recomendar o uso de Servidores embutidos, ao invés de Servidores de aplicação em futuros projetos."

Isso diz tudo o que precisa ser dito sobre Servidores de aplicação, não? Criar um big Servidor físico, instalar um baita JBoss nele, e servir várias apps a partir de um único ponto, deixou de ser tecnicamente eficiente. 

E quem foi o responsável por isso? A tecnologia! Hoje, ninguém (a não ser os idiotas ultrapassados) pensa em criar apps sem considerar nuvem. E, como o "peso" de um Servidor Java EE aumenta consideravelmente os custos, as pessoas procuraram soluções mais simples, e mais adequadas ao problema C10k (Ngix, Node.js, Jetty etc).

A ideia é criar e destruir instâncias da nossa app sob demanda, o que é conhecido como "Escalabilidade elástica", diminuindo, desta forma, o custo de hospedagem. Isso não é possível e nem prático com Servidores de aplicação Java EE.

Servidores Fênix


Só mesmo o Martin Fowler para criar termo tão perfeito. Não sei se foi ele mesmo que cunhou esse termo, porém, certamente, o está popularizando. Um servidor fênix é aquele que pode ser facilmente criado e destruído, geralmente, como parte do seu processo de entrega contínua.

Este tipo de servidor pode ser criado facilmente hoje em dia. Especialmente se usarmos IAC - Infrastructure as Code, e Linux Containers - Docker. 

Mas, qual é a vantagem prática disso? Bem, deixemos o próprio Martin Fowler dizer:

"The primary advantage of using phoenix servers is to avoid configuration drift: ad hoc changes to a systems configuration that go unrecorded. Drift is the name of a street that leads to SnowflakeServers, and you don't want to go there without a big plough."


Traduzindo:

"A principal vantagem de usar Servidores fênix é evitar a "Derrapada" de configuração: Alterações "ad-hoc" na configuração dos sistemas, que, geralmente, deixam de ser anotadas. "Derrapada" é o nome da rua que leva aos "Servidores Floco-de-neve", e você não vai querer andar por ela, sem um arado."

Servidores "Floco-de-neve" (SnowFlakeServers) são o resultado do "microgerenciamento" nos Datacenters modernos. Mudanças repentinas, ""quebra-galhos", atualizações manuais, e outras práticas pouco recomendadas, acabam por criar um servidor monstro, o qual não temos como reproduzir.

Em um Servidor fênix, não temos esse problema. Todas as alteações são feitas em codigo-fonte, que depois é utilizado para criar uma nova instância do mesmo Servidor. Com isto, evitamos a "Derrapada" de configuração e temos toda a nossa infraestrutura totalmente reproduzível e documentada.

Particionamento 


Micro serviços são uma nova maneira de dividir a sua aplicação. Muitas pessoas entendem que Micro serviços são uma nova modalidade de SOA. Não poderiam estar mais enganadas.

Ao invés de enxergarmos e desenvolvermos nossa aplicação como um "bolo de noiva", em camadas (Apresentação, lógica e persistência), usamos o particionamento funcional, proposto por Michael Fischer, em seu livro: "The art of scalability". Separamos as lógicas diversas de negócios, e seus dados, em micro aplicações isoladas, que podem ser construídas e atualizadas sem impacto umas nas outras.

E as empacotamos em Servidores fênix.

Eis o que alguns líderes falam sobre o assunto: 

Martin Fowler; "Temos visto muitos projetos usarem este estilo nos últimos anos, e os resultados, até agora, têm sido positivos, de tal forma, que, para muitos de nossos colegas, se tornou o estilo padrão para criar aplicações corporativas" (http://martinfowler.com/articles/microservices.html)

Gary Olliffe (Diretor de pesquisa do Gartner): "Embora não sejam uma panacéiam, eu vejo o potencial dos micro serviços mudarem o modo como criamos, mantemos e operamos aplicações. Quando entregues com disciplina, eles auxiliam as aplicações a serem mais flexíeis, portáveis e adaptativas especialmente se a organização estiver procurando migrar para ambiente de nuvem" (http://blogs.gartner.com/gary-olliffe/2015/01/30/microservices-guts-on-the-outside/)