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. Isso envolve
pessoas + ferramentas e processos. Acredito que isso não vai mudar, mas
podemos ter facilidades que hoje não são utilizadas, ou não estão
acessíveis a todos.
Teoricamente, plataformas como a da Sun (Java)
e a da Microsoft (.net) já nos provêm diversas facilidades que
não existiam quando se programava em C ou até mesmo Clipper. Já foi um
grande salto de paradigma da programação estruturada para a OO e para
as plataformas de Java e .net, porém 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 se a
aplicação vai ser escalar ou não.
Como os sistemas iniciam
Muitos
e muitos sistemas começam muito pequenos, às vezes até mesmo por
pessoas que não são da TI, mas que têm afinidade com alguma forma de
desenvolvimento como VBA, Excel ou até mesmo PHP.
Nestes casos também não existe um processo de desenvolvimento ou a utilização de práticas da engenharia de software atuais.
O
que acontece é que estes “sisteminhas” acabam crescendo de forma
desordenada e cada vez mais a manutenção fica complicada, custosa e
dolorosa, porém o que é feito é simplesmente migrar o sistema para uma
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 porque 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…
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 em 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 pode 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 desses itens. Como
você sabe isso? Requisitos e uma boa conversa entre o Arquiteto, ou os
Arquitetos, e 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; isso 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étodos de desenvolvimento de software que temos
em sua grande maioria foca no desenvolvimento. Depois que o sistema
está 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 à 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 apenas comprando hardware. No próximo artigo 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.







