PaaS, Cloud Computing, Virtualização e o Futuro parte 1

Nestes últimos anos a tecnologia evoluiu muito, principalmente pela necessidade cada vez maior de termos sistemas escaláveis e com um menor custo de operação. Quando estamos desenvolvendo software em média estamos falando só de 20% do tempo de vida da aplicação, ou seja, a maior fatia da aplicação ela vai estar em produção.

Com a tecnologia atual ainda é muito forte a necessidade de se ter uma boa arquitetura e pensar muito em como desenvolver aplicações, isto envolve pessoas + ferramentas e Processo acredito que isso não vai mudar, mas podemos ter facilidades que hoje não se utilizadas ou não estão acessíveis a todos.

Teoricamente plataformas como a da Sun(Java) e a da Microsoft(.net) já nos provem diversas facilidades as mesmas que não existiam quando se programava em C ou até mesmo Clipper. Ja foi um grande salto de paradigma da programação estruturada para a OO e para as plataformas de Java e .net porem ainda falta muito.



Cada vez mais as aplicações ficam mais complexas, mais usuário simultâneos, mais transações, volume de dados maior, acesso a disco, latência de rede, etc... Dependendo da aplicação, dos requisitos é necessário investir muito em arquitetura de software e quando falo em arquitetura de software falo tanto sobre o design, as boas práticas o "como" fazer as coisas e principalmente a infra-estrutura de aplicação e como a aplicação vai ser escalar ou não.

Como os sistemas iniciam

Inicio de tudo

Muitos e muitos sistemas começam muito pequenos, as vezes até mesmo por pessoas que não são da TI, mas que tem afinidade com alguma forma de desenvolvimento como VBA, Excel ou até mesmo PHP. Nestes casos também é não existir um processo de desenvolvimento ou até mesmo a utilização de práticas da engenharia de software atuais.

O que acontece é que estes "sisteminhas" acabam crescem do forma desordenada e cada vez mais a manutenção fica complicada, custosa e dolorosa, porem o que é feito é simplesmente migrar o sistema para um tecnologia mais moderna como .net ou Java.

Pouco é investido em escalabilidade, para muitas pessoas uma arquitetura que não escala não é arquitetura, se pararmos para pensar vamos ver que existe muito sentido nesta frase. Pois bem esses tempos eu vi uma aplicação chamada de legado que era escrita em C#, logo pensei como uma aplicação C# pode ser legado?

Isso ocorre por que o sistema foi só digamos assim reescrito em outra linguagem mas os problemas de performance e escalabilidade ainda estão lá. O que deve ser feito é tratar a escalabilidade e a performance como requisitos não funcionais sérios que devem ser fortemente considerados no desenvolvimento de soluções.

Pensando em Escalabilidade...

Elasticidade?

Por incrível que pareça ainda vejo que o mercado tem que aprender muito sobre esta questão. São pouquíssimos os sistemas que vi a preocupação com a operação e o crescimento do mesmo, isso vai muito além do Capacity Planning.

Escalabilidade pode ser interpretada de diversas formas, não existe certo ou errado dependo do contexto e do sistema, mas escalabilidade por ser quanto:
  • Número de usuários simultâneos
  • Volume de dados
  • Concorrência dos dados
  • I/O (acesso ao disco)
  • Tolerância a falhas (resiliência)
Na prática pode ser todos estes atributos, logo o seu sistema tem que poder aguentar o aumento disso tudo ou de alguns destes itens, como você sabe isso? Requisitos e uma boa conversa entre o Arquiteto ou os Arquitetos com o pessoal de negócio e requisitos.

Somente este pensamento em escalabilidade e a criação de arquiteturas robustas pode ajudar a levar as soluções de tecnologia ao próximo nível. Tudo tem que ser construído e envolve tanto arquitetura de software como infra, ou seja, na prática podemos estalar falando de várias coisas como particionamento horizontal de dados, load balance, patterns de arquitetura e design, entre outras coisas.

Dentre estas outras coisas quero destacar PaaS, Cloud Computing e Virtualização. Precisamos de alguma forma deixar nossas aplicações mais escaláveis, esta mesma não será mais um escolha dependendo da progressão de crescimento da sua organização.

Muitas empresas não crescem e sim "incham", sendo que isso além de doloroso pode ser fatal para sua organização. Não existe bala de prata, mas podemos ter ganhos consideráveis e é desta forma que as coisas evoluem.

Outra necessidade que anda lado-a-lado com a escalabilidade é a questão da operação, temos que pensar mais na operação que de certa forma ainda está muito "deslocada" do desenvolvimento. Os método de desenvolvimento de software que temos em sua grande maioria foca no desenvolvimento, depois que o sistema esta em produção e acabou o projeto acaba o método e isso é um problema. Existem algumas coisas como iTIL e EUP mas ainda é pouco.

Logo chegamos a necessidade de atender ao crescimento exponencial das empresas de forma que não seja tão custoso manter os sistemas e que os mesmos possam escalar apénas comprando hardware. No próximo post vou continuar neste assunto e mostrar a relação de PaaS, Cloud Computing e Virtualização com todas essas questões e como eles podem ajudar nisso.

Abraços e até a próxima.

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java