Introdução
O cloud computing é uma das mais importantes tendências tecnológicas dos próximos tempos. Mas o que é afinal cloud computing? Não existe ainda uma definição clara, se quiser um exemplo disso faça esta pergunta a cinco pessoas ligadas à tecnologia e provavelmente irá obter cinco ou até mais respostas diferentes.
Existem opiniões que dizem que tudo o que está fora da firewall é cloud computing, ou seja, um simples webservice pode ser considerado cloud computing. Esta resposta até faz sentido porque na realidade o processamento desse webservice ocorre fora do nosso computador. No entanto, cloud computing é muito mais do que isso.
Essencialmente trata-se de afastar completamente a computação e os dados dos computadores de secretária e portáteis, e simplesmente mostrar ao utilizador os resultados da computação que ocorre numa localização centralizada (grandes datacenters) e é transmitida via internet para o ecrã do utilizador. Mais ainda, é potenciar a interacção entre o software, que neste paradigma reside na nuvem, através de serviços. Estaremos então a voltar à época dos terminais “estúpidos”? Iremos tentar perceber a resposta a esta pergunta mais à frente neste artigo, mas neste momento torna-se necessário perceber as mudanças que ocorreram no passado para perceber o porquê dessas mudanças no futuro.
Olhando um pouco para a história dos computadores, não propriamente a partir do primeiro computador no sentido do termo (computador humano, pessoa que realizava cálculos numéricos), mas sim a partir do primeiro computador electrónico, vamos tentar perceber as mudanças nas arquitecturas dos sistemas e as razões que levaram a essas mudanças.
História
Os primeiros computadores eram máquinas enormes, muito pesadas e de elevado custo. Sempre que alguém pretendia realizar alguma computação tinha que se deslocar a esse computador, do tamanho de uma sala, para a poder realizar. O que é importante reter é que a computação começou, por razões económicas, com uma arquitectura de centralização da informação.
Mais tarde surgiram os terminais. O uso de terminais já não obrigava a que o operador se deslocasse ao computador para poder realizar operações e permitia ainda que estivessem várias pessoas a usar o computador em regime de partilha de tempo de computação. A arquitectura continua centralizada, todas as operações são realizadas no computador, sendo o terminal apenas um interface para aceder ao computador.
À medida que a Lei de Moore se vai manifestando, o tamanho e custo dos computadores desce e torna-se prática comum a utilização de computadores pessoais visto que já era economicamente viável ter um computador no escritório ou até em casa. Com o uso de computadores pessoais passa-se a utilizar uma arquitectura completamente descentralizada. Neste momento poderia optar-se pelas duas arquitecturas, a centralizada que ainda oferecia um custo mais baixo em termos de custo por utilizador, ou um sistema completamente descentralizado que oferecia uma maior autonomia e melhor interface aos utilizadores.
Posteriormente surge a arquitectura cliente-servidor em que existem computadores em ambos os lados. Algumas partes do programa correm no computador-servidor e outras correm no computador-cliente. Isto causa um aumento da complexidade do software dada a necessidade de comunicação e sincronização entre as partes. Estamos agora numa arquitectura mista.
Entretanto surge o primeiro web browser que apenas mostrava texto e praticamente todo o processamento era realizado no lado do servidor. Voltamos novamente a uma arquitectura completamente centralizada. As capacidades deste tipo de aplicações eram muito limitadas. Os web browsers evoluíram, sendo já é possível correr código de aplicações dentro destes, o que levou e leva a que apareçam cada vez mais aplicações web em detrimento de aplicações desktop.
Esta arquitectura cliente-servidor oferece algumas vantagens tecnológicas que naturalmente se tornam em vantagens económicas. A centralização de todos os dados no servidor é um exemplo disso, que leva a um aumento da segurança e à redução nos custos de manutenção.
Como pudemos observar, certa parte destas mudanças aparecem por razões económicas. Se uma arquitectura diferente apresenta as mesmas funcionalidades a um preço mais reduzido tende a ser cada vez mais adoptada.
Motivação
Chegamos agora à parte mais importante. Com o aparecimento de web browsers com cada vez mais capacidades e cada vez mais cumpridores dos standards, e com as capacidades para acesso à internet que existem, torna-se cada vez mais possível a ideia de afastar completamente a computação e os dados dos computadores pessoais e movê-los para a nuvem.
Na base desta mudança estão, como mencionado anteriormente, a evolução tecnológica que agora existe e novamente as razões económicas, nomeadamente com a redução de custos que essa mudança pode proporcionar. Vamos agora dar uma vista de olhos nas próximas tendências na área das tecnologias de informação para tentar perceber se esta mudança terá ou não condições para acontecer.
Prevê-se que nos próximos anos, três das principais tendências na área das tecnologias de informação sejam a mobilidade, o software como serviço (SaaS) e o hardware como serviço (HaaS).
A mobilidade significa simplesmente que os notebooks vão ficar em casa. Ou seja, vamos passar a levar connosco dispositivos mais leves, mais pequenos e com a mesma eficiência. Esses dispositivos compactos terão preços relativamente baixos e serão munidos de aplicações web.
Software as a Service
Software como serviço significa que muitas das aplicações de negócios serão contratadas no modelo serviço em vez de licença de software. No modelo SaaS a empresa paga na proporção em que usa o software. Essa é uma diferença fundamental em relação ao preço fixo de uma licença. Com o suporte de empresas como Oracle, SAP, Microsoft e de líderes da internet, como Google e Amazon, o modelo de desenvolvimento e distribuição SaaS tende a crescer muito nos próximos anos.
Em vez de instalar software nos seus próprios servidores, as empresas contratam o fornecimento desse software como um serviço. E em vez de pagarem uma licença de software, pagam mensalmente um custo por utilizador ou pelas horas em que os seus colaboradores estiveram a usar a aplicação. A interacção com este software é realizada da mesma forma que se realizam as interacções com as aplicações empresariais modernas, ou seja, através de um web browser. As contas de webmail são um bom exemplo de um software muito utilizado e fornecido como serviço. Hoje em dia, praticamente todas as aplicações podem ser fornecidas como serviço.
Esta ideia não é nova, pois no passado já existiram Application Service Providers. No entanto, esta arquitectura não teve grande sucesso porque esses fornecedores dedicaram servidores e programas a empresas individualmente. O custo de operação e manutenção individual de cada um desses servidores impossibilitou o sucesso desta arquitectura. Os fornecedores de software como serviço trabalham com uma arquitectura diferente: existe apenas uma instância do software que serve os vários clientes. Apesar de cada cliente ter apenas acesso aos seus dados e a uma versão personalizada da aplicação, existe apenas uma instância desse software a correr no servidor. Esta arquitectura tem algumas vantagens tais como a redução de recursos ocupados no servidor e a redução dos custos de manutenção. Cada instância de um software por menor que seja requer logo à cabeça alguma memória e algum processamento. Essa necessidade multiplicada por muitos clientes pode tornar considerável esse custo inicial. A arquitectura de que vos estou a falar reduz substancialmente essa necessidade dado que apenas existe uma instância, embora mais “pesada”, do software. Como já foi referido, a manutenção está, neste caso, muito mais facilitada dado que todas as correcções de erros e novas funcionalidades ficam imediatamente disponíveis para todos os utilizadores.
Os fornecedores disponibilizam ainda formas de os utilizadores poderem personalizar a sua “versão” da aplicação e até a partilha dessas personalizações com outros clientes. A maioria dos clientes deste tipo de fornecedores são pequenas e médias empresas, mas a constante complexidade e custo de manutenção de aplicações internamente faz com que o número de clientes destes fornecedores tenda a aumentar e a expandir-se a empresas de maior dimensão.
Hardware as a Service
Hardware como serviço significa que a adopção de novas tecnologias de informação vai deixar de passar por investir grandes quantias de dinheiro com equipamentos, passando a adquirir a sua infra-estrutura como serviço. A banda larga de alta velocidade vai permitir colocar a infra-estrutura em grandes datacenters com a mesma rapidez de resposta que teria com uma solução local.
A possibilidade de adquirir hardware como serviço já existe há muito tempo através dos fornecedores de alojamento. No entanto esta opção enfrenta alguns problemas complexos tais como a escalabilidade. Normalmente nestes casos é alugado um servidor dedicado o que leva a estarmos limitados à capacidade desse servidor.
Vamos agora pensar do ponto de vista empresarial. Imagine que tem uma empresa e compra um servidor para dar resposta às necessidades da sua empresa. Passado algum tempo a sua empresa está a ter cada vez mais sucesso no mercado, o seu servidor já não dá resposta às necessidades e tem que adquirir outro e depois mais outro… Por alguma razão o país entra em recessão e o seu volume de negócios desce bastante. Ora, para além dos problemas que a recessão lhe está a trazer tem ainda que se preocupar em acabar de pagar os servidores que teve que adquirir e que agora já não lhe fazem a mínima falta.
Outro exemplo da mais-valia que o hardware como serviço trás às empresas é a capacidade de resposta a picos temporários. Imagine que a sua empresa tem que processar um grande volume de dados no final do mês e tal não pode ser feito de outra forma. Provavelmente terá que adquirir tecnologia de servidor que estará a dar rendimento apenas no final de cada mês.
Como já pudemos perceber trata-se de uma arquitectura altamente escalável porque permite aumentar ou diminuir a capacidade do hardware numa questão de minutos. Além disso é muito flexível porque dá a possibilidade aos utilizadores de escolher quais as capacidades que cada instância terá. A fiabilidade é outra grande arma dado que tira partido de infra-estruturas gigantes, como por exemplo a infra-estrutura da Amazon ou da Google. Um dos exemplos mais conhecidos deste tipo de serviço é o Amazon EC2 (Amazon Elastic Compute Cloud).
Desvantagens e/ou Preocupações
Até este momento só vimos vantagens neste paradigma, mas naturalmente também existem desvantagens. Algumas podem parecer desvantagens mas tratam-se apenas, até prova em contrário, de preocupações. O primeiro inconveniente tem logo a ver com a necessidade de conectividade, pois sem conectividade não é possível trabalhar. As ligações com baixa largura de banda também poderão limitar bastante o funcionamento deste tipo de serviço caso a informação a transportar entre as partes seja de elevada dimensão.
Outra das limitações a apontar trata-se da privacidade e de toda a segurança que tem que existir. Existe alguma desconfiança quanto a deixar a cargo de outra empresa a tarefa de guardar dados importantes, quer sejam pessoais ou empresariais. Talvez este tema não se trate de uma desvantagem mas, apenas e só, de uma preocupação. Empresas que forneçam estes serviços vão ter o seu sucesso ou insucesso muito intimamente ligados à sua reputação, e portanto os mecanismos de segurança serão uma das suas principais preocupações.
Outras existirão logo à partida mas que tenderão a desaparecer com a evolução, tais como a menor velocidade, menor capacidade e menos funcionalidades que este tipo de software ainda tem em relação ao software desktop. Existem ainda algumas questões muito importantes por resolver. Quem é o detentor legal da informação e da propriedade intelectual? É quem contrata o serviço ou quem o disponibiliza? É possível que o fornecedor negue ao utilizador acesso à sua própria informação? Estes e outros assuntos ainda estão a ser debatido por empresas, advogados e universidades.
Cloud Platforms
Uma das componentes mais importantes desta tendência é a chegada das plataformas na nuvem. Este tipo de plataformas permite aos programadores desenvolver aplicações que correm na nuvem, usar serviços fornecidos pela nuvem, ou ambos. Para compreender esta importância pense como as aplicações são desenvolvidas actualmente. Quando uma equipa de programadores cria uma aplicação, a maioria das coisas que essa aplicação necessita já existem, desde um sistema operativo que fornece o suporte básico para executar essa aplicação a outros computadores que oferecem serviços como, por exemplo, o armazenamento em base de dados. Se para desenvolver um software tivéssemos que criar toda esta plataforma base existiriam muito menos aplicações nos dias de hoje.
Da mesma forma, se todas as equipas de desenvolvimento que pretendessem criar uma aplicação para correr na nuvem tivessem primeiro que criar a sua própria plataforma também não veríamos muitas aplicações a correr na nuvem. Felizmente, os fornecedores estão cada vez mais a responder a este desafio e já existem algumas plataformas de desenvolvimento na nuvem. Para conseguirmos entender melhor as plataformas na nuvem vamos tentar perceber como é que funcionam as plataformas locais.
As plataformas locais
Independentemente de uma plataforma ser local ou na nuvem, pode ser vista como englobando três componentes: um software base para interagir com o hardware existente, um grupo de serviços fornecido pela infra-estrutura e um conjunto de serviços fornecidos por outras aplicações.
Nos primeiros tempos da computação, a plataforma não era mais do que um conjunto de software base. Quase todas as aplicações utilizam algum software base na máquina onde correm, o que tipicamente inclui algumas funções de suporte, tais como um sistema operativo base, armazenamento standard e bibliotecas de tipos.
Nos anos 80 e 90, com a disseminação da computação distribuída, foram adicionados serviços disponibilizados pela infra-estrutura, com o armazenamento remoto em ficheiros e bases de dados, a integração e a identidade a tornarem-se muito utilizados.
Hoje em dia apesar de as aplicações existirem acima de tudo para fornecer serviços a utilizadores finais, com a chegada das aplicações orientadas para serviços, os serviços fornecidos por outras aplicações locais tornaram-se também parte da plataforma.
Não fazendo directamente parte da plataforma, as ferramentas de desenvolvimento são outra importante parte desta história porque ajudam os programadores a construir aplicações usando as três componentes da plataforma.
As plataformas na nuvem
O modelo de plataforma usado na nuvem é muito semelhante ao modelo que acabámos de ver. No entanto, e dada as suas diferentes características, irá funcionar de forma diferente em cada camada. Percebemos facilmente isso se pensarmos na enorme necessidade de escalabilidade. Enquanto as plataformas locais lidam, no máximo, com aplicações de nível empresarial, as plataformas na nuvem terão que lidar com aplicações de uma escala bem maior, onde o número de utilizadores será também maior.
Vamos agora olhar para a camada base e identificar algumas diferenças estruturais. Começando pelo sistema operativo, serão fornecidas instâncias de sistemas operativos a correr sobre máquinas virtuais. A utilização de máquinas virtuais permite que o utilizador possa escolher as capacidades que quer ter na nuvem e, mais importante ainda, permite expandir muito rapidamente essas capacidades em caso de necessidade. Não se esperam grandes limitações quanto ao sistema operativo a utilizar nas máquinas virtuais, e numa primeira fase será Linux o sistema operativo mais utilizado. No entanto a Microsoft já está a desenvolver a sua plataforma para a nuvem, a plataforma Azure, sendo difícil neste momento prever se conseguirá recuperar as desvantagens que parece ter neste momento em relação a Linux.
As plataformas na nuvem actuais não fornecem as mesmas opções que uma plataforma local. Os programadores estão limitados a poucas, ou até apenas a uma, formas de poder obter suporte local. Relembro que ao estarmos a falar de suporte local estamos a falar de, por exemplo, acesso a um servidor de bases de dados a correr na própria máquina ou de frameworks sobre as quais as aplicações correm. Estas limitações também são, de alguma forma, consequências da necessidade de escalabilidade mas também permitem aos fornecedores focarem-se no desenvolvimento e optimização desse tipo de suporte.
Antes de falarmos sobre as características dos serviços fornecidos pela infra-estrutura na nuvem e por outras aplicações na nuvem é importante perceber a interacção que poderá existir entre as duas plataformas.
As plataformas locais poderão tirar partido dos serviços fornecidos pelas plataformas na nuvem, tal como as plataformas na nuvem poderão tirar partido dos serviços fornecidos pelas plataformas locais. A mudança para plataformas na nuvem será em muitos casos uma mudança progressiva. As aplicações locais vão cada vez mais interoperar com serviços e aplicações que passarão a existir na nuvem até que um dia todas, ou pelo menos a maioria, estarão já a funcionar completamente na nuvem.
Quanto a serviços fornecidos pela infra-estrutura, muitas aplicações locais não tiram partido deste tipo de serviços. Quando falamos de aplicações na nuvem o mesmo poderá acontecer. Dada a normal existência de apenas uma instância na nuvem poderemos ser levados a pensar que funcionalidades como o armazenamento em bases de dados e gestão de identidade passem a ser fornecidos cada vez menos como serviço e passem a fazer parte do próprio software. Isto porque não existe a necessidade de partilhar essa informação com outras instâncias.
Este pode ser um caminho, mas o caminho contrário é ainda mais viável, ou seja, focar o desenvolvimento do software na lógica de negócio e deixar a resolução desse tipo de tarefas a cargo de serviços que ligamos ao nosso software e dos quais tiramos partido. Vamos pensar, por exemplo, no serviço de gestão de identidade. O programador não tem que se preocupar na forma de guardar e verificar a identidade dos seus utilizadores, bastando-lhe apenas saber utilizar um serviço que lhe fornece solução para essa e outras preocupações. É uma mais-valia importante. As plataformas que existem hoje em dia na nuvem têm normalmente um serviço de gestão de identidade associado. Trata-se de uma limitação mas não deixa de ser um serviço muito importante para as aplicações, até porque a interacção com outros fornecedores de identidade é cada vez mais possível.
O serviço de armazenamento de informação na nuvem é um dos mais atractivos, mas mesmo este tem necessariamente que ter uma arquitectura diferente devido às características da nuvem. Isto poderá significar que os programadores poderão tirar partido deste tipo de serviço mas poderá implicar mais algum trabalho no desenvolvimento se o quiserem usar devidamente. Em relação a serviços fornecidos por outras aplicações não parecem existir grandes novidades. No entanto, a cada vez maior adopção de arquitecturas orientadas ao serviço vão potenciar ainda mais a interacção entre as aplicações, sejam elas locais ou residentes na nuvem.
Conclusão
Como se pode constatou anteriormente, as plataformas não mudam muito ao longo do tempo. No entanto, sempre que aparece uma nova plataforma que apresenta reais vantagens em relação às existentes ela tende a ter um impacto muito grande. As plataformas na nuvem ainda não trazem todas as vantagens que as plataformas locais já disponibilizam mas apresentam sérias vantagens competitivas. A adopção destas plataformas fará parte do nosso futuro enquanto programadores ou simples utilizadores de informática. Fica prometido para uma futura edição uma análise mais aprofundada às plataformas existentes.
Referências e Bibliografia
- Wikipedia – Cloud Computing
- HowStuffWorks.com – Cloud Computing
- GigaOM – How cloud and utility computing are different
- Cloud Computing Journal – What is Cloud Computing?
- Linux Magazine – Computing In The Clouds: Setting Expectations
- Chapell & Associates – A Short Introduction to Cloud Platforms
- InfoWorld – What cloud computing really means