terça-feira, 4 de agosto de 2009

Computação distribuída: modelo que combina com tempos atuais

Ola Bacanas, li este artigo e resolvi compartilhar com vcs.

 

por Eric Bruno | InformationWeek EUA

04/08/2009

As empresas enfrentam a pressão para encontrar novas formas para expandir a computação distribuída

Considerando o histórico da computação distribuída, os CIOs devem focar em como as empresas sabiam que este era o momento certo para fazer uma grande aposta de arquitetura na próxima onda tecnológica. Esta experiência poderia ajudar aos CIOs que devem considerar um movimento similar nos dias de hoje.

Voltando no tempo, nos anos 70, por exemplo, a Reuters apresentou o Monitor, por meio do qual os jornalistas introduziam informações via terminais burro e um computador mainframe enviava as informações para os leitores.  No começo dos anos 90, quando entrei na Reuters como desenvolvedor, o assunto era ir mais fundo no conceito de computação distribuída a fim de construir um pioneiro sistema eletrônico para trading, denominado Globex, para a Chicago Mercantile Exchange (CME), desenhado em um mainframe e PCs com base em Windows.

À medida que os custos do Globex cresciam, a CME mudou sua arquitetura para um modelo ainda mais distribuído: um par de computadores de classe mainframe junto com 1,5 mil servidores Linux e Solaris em classe estação de trabalho. Eis que agora surge uma nova questão para a CME: Qual o papel que a cloud computing exerce na Globex e outras plataformas?

Os líderes de TI enfrentam pressões reais na economia de hoje para aumentar os limites das tecnologias como a virtualização e cloud, que expandem modelos de computação distribuída.

As decisões que a CME e Reuters enfrentaram na escolha de qual modelo distribuído adotar - e quando - são muito parecidas com as que as empresas enfrentam hoje. Uma diferença, entretanto, é que as pressões econômicas estão forçando  as companhias a considerar as tecnologias de computação distribuída geralmente emergentes e imaturas. 

O que há de novo

A computação distribuída se refere largamente aos aplicativos que se aderem ao modelo cliente-servidor (client-server), um cluster, uma arquitetura n-tier ou alguma combinação deles. Enquanto há variações nestes modelos de base, o que eles têm em comum é que dividem a computação por meio de múltiplos computadores para alcançar mais disponibilidade e escala de aplicativo.

Grandes websites como eBay utilizam uma combinação desses modelos, com banco de dados e cluster de servidores de aplicativos dentro de cada tier do desenho. Com o aumento do uso do Ajax no nível de browser, muitos sites agregaram um elemento cliente-servidor ao conjunto. Como resultado, aplicativos de larga escala como o Google e Yahoo impulsionam os três modelos de computação.

Os serviços de web levam o modelo distribuído um passo à frente, compartilhando a carga de processamento de dados. Uma vez que os web services estão com base em HTTP, é o caminho direto para a utilização de um serviço único para servidores múltiplos compartilharem  a carga. Este design permite que os desenvolvedores distribuam até mesmo componentes únicos de aplicação, resultando em uma maior escalabilidade, com mais reutilização de código e redução de custos. Graças aos padrões abertos e web services, formatos e protocolos podem ser definidos em XML, C++ ou Java, facilmente implantados em outras plataformas, reduzindo os custos. 

Mas a grande mudança recente para o modelo de computação distribuída é a virtualização, permitindo que a tecnologia da informação divida um servidor físico em múltiplos servidores virtuais. Além dos softwares citados, energia e economia de espaço e utilizar a virtualização para dividir um físico em virtuais ajudam a resolver o problema de se conseguir o máximo de valor dos computadores multicore.

Por exemplo, mesmo os componentes individuais de software ainda não foram escritos para levar vantagem em arquiteturas multicore, os desenvolvedores deveriam ainda considerar a utilização de virtualização para rodar múltiplos componentes de software em um computador físico uma vez que eles estão rodando em computadores separados.  Mantendo a segurança e a robustez do software, enquanto se extrai o máximo de valor dos computadores de capacidade multicore 

Como resultado, componentes de aplicação individual podem executar em servidores múltiplos virtuais, todos rodando em um único servidor físico. Um método é equilibrar aplicativos que se comunicam o quanto possível, eliminando assim latência induzida de rede que pode estar presente se estes aplicativos estiverem separados.

Combinar a virtualização com os outros modelos de computação distribuída pode resultar em uma arquitetura escalável e custo-benefício. Mas efetivamente monitorar a virtualização requer uma visão de administrador, um processo que consome tempo que as empresas deveriam tentar reduzir utilizando a gestão de configuração e outras ferramentas de life-cycle.

Ao invés de construir as configurações manualmente, por exemplo, os administradores fazem o link de templates múltiplos contendo o sistema operacional, e construir scripts  e aplicativos para um novo volume de máquina virtual. As empresas que precisam dar uma acelerada no processo também deveriam oferecer aos desenvolvedores as facilidades self-service para submeter e atuar em requerimentos de recursos virtuais, ao invés de processos formais e das demoras naturais. Enquanto a virtualização é o aqui e agora da computação distribuída, a cloud computing é o futuro.

Embora seu impacto total ainda precise ser percebido, está se tornando cada vez mais claro que a computação em nuvem será a opção de entrega de serviço de escolha para os aplicativos distribuídos, graças, em parte, ao CPU, à memória e capacidades de banda. Assim que os fabricantes puderem combinar um alto nível de controle de desenvolvedor, um modelo de custo flexível e razoável, a cloud computing vai mudar a cara da computação distribuída.

Mas quando isto acontecerá com os sistemas empresariais? Alguns dos mais importantes fatores para se notar são decisões do desenho da segurança, proteção de dados, diretrizes de recuperação e arquiteturas de aplicativos. Um exemplo, os desenvolvedores que trabalham com cloud computing precisam entrar na peleja não somente com problemas de segurança dedicados familiares como firewalls e detecção de intrusão, mas com segurança em um ambiente de cloud compartilhado também.

O pesado dessas áreas está sendo feito por grupos como o Cloud Security Alliance, que lançou seu guia de segurança para as áreas críticas com foco em computação em nuvem (do original em inglês: Cloud Computing "Security Guidance for Critical Areas of Focus in Cloud Computing), um documento de melhores práticas que oferece diretrizes para cloud computing em empresas.

Talvez o mais importante, como com outros modelos de computação distribuída, a cloud computing não é uma proposta radical de sim ou nada. Modelos híbridos de implantações de recursos cloud/dedicados pode ser o caso para aplicativos com padrões de utilização com gargalo (bursty).

Estudos de casos

Com o Globex, quando a Chicago Mercantile Exchange (CME) distribuiu a arquitetura a partir de um mainframe central para um par de computadores mainframes junto com servidores de estação de trabalho Linux e Solaris, ela era capaz de lidar com mais de 2 milhões de pedidos de transações diariamente, com tempo de resposta reduzido a 150 milissegundos ou menos. Para manter uma vantagem em termos de custo, o tempo de resposta do consumidor e a confiabilidade geral, a CME se baseia intensamente em software de código aberto e de baixo custo, com poderosos servidores x86.

A CME também utiliza o software de gestão de configuração ZENworks da Novell para gerenciamento de aplicativo distribuído e um passo em direção a apresentação da virtualização dentro da arquitetura. 

O que vem a seguir? Como um monte de empresas, a CME tem um olho na cloud computing, mas não tem um plano detalhado que esteja pronto para compartilhar uma vez que, como em um monte de empresas, está dando passos pequenos enquanto espera que os padrões de cloud amadureçam.

Outro projeto de computação distribuída que vale a pena examinar é do eBay. Embora os usuários vendam milhões de dólares de bens por meio do sistema diariamente, o produto eBay é um website que deve ser mantido com a melhor arquitetura de software possível. Esta arquitetura cresceu para se tornar um desenho three-tier com lógica de negócios, código de apresentação e código de banco de dados separados em diferentes tiers físicos.

Com o passar do tempo, os servidores têm sido continuamente adicionados a cada tier, incluindo o banco de dados, que foi particionado e distribuído entre muitos servidores em múltiplas locações geográficas.

O tier de aplicativo foi reescrito em Java para capacitar ainda mais a computação distribuída. Conjunto inteiro de características - pesquisa, índice, gestão de gerenciamento, billing e detecção de fraudes - foram retirados do aplicativo central e estão em pools de servidores separados.

A arquitetura mudou para o nível de distribuição de forma que o eBay possa manter o crescimento no número de usuários e leilões ativos. Como a CME, o eBay não disse como vai utilizar os recursos de cloud, mas é membro fundador do Cloud Security Alliance.

Enquanto as empresas consideram mudar de cloud distribuída para recursos de cloud, Ted Schadler, da Forrester Research, avisa que vai lançar os projetos pilotos que são marcos para a mensuração de uso, renegociação de preços e aumento de treinamento de empregados.

Design e Construção

A computação em nuvem é a promessa de amanhã, mas a maior ganho atual vem dos aumentos de níveis de velocidade e paralelo de servidores de baixo custo que permitem a redução de custos e atender aumento de demanda. Não há mágica nisto; maiores demandas têm acontecido nas tecnologias de comunicação e de redes. Estas demandas estão sendo atendidas com os avanços de software na forma de buses (barramentos) de serviço empresarial, web services e ferramentas de virtualização para construir aplicativos altamente escaláveis com base nas metodologias de desenho de computação distribuída disponíveis, muitos como código aberto. 

Mas o código aberto não é uma panacéia quando o assunto é construção de sistemas distribuídos. Enquanto livremente disponível, o software de código aberto pode cortar custos de licenciamento, pode também direcionar custos de staff por causa das habilidades especiais e conhecimento adquirido para trabalhar em um ambiente onde suporte técnico formal pode não estar disponível. Um exemplo de como os desenvolvedores podem utilizar o código aberto para expandir a computação distribuída está detalhado a seguir.

Os servidores de aplicativos de código aberto como o GlassFish da Sun e o Sun Cloud Computer Service permitem que usuários escrevam e integrem os componentes em Java, Python e Ruby. A Sun - pelo menos antes de sua aquisição pela Oracle - disse que seu Sun Cloud poderia ser um cloud público para desenvolvedores. Para maior atratividade dos desenvolvedores, a Sun também está promovendo um conjunto com base em API aberto REST, publicado sob licença da Creative Commons license, permitindo que qualquer pessoa possa usá-lo sem qualquer custo. Os desenvolvedores podem utilizar os aplicativos imediatamente para o Sun Cloud, impulsionando as imagens da maquina virtual do software de código aberto da Sun.

Digamos que seu desenvolvedor queira construir um aplicativo utilizando um set de web services feitos em Ruby, lógica de aplicativo em Java e PHP, lógica de apresentação em Paginas JavaServer e rodar em OpenSolaris (ou Linux). Para agregar tanto o desktop quanto o suporte de dispositivo móvel, eles escrevem um aplicativo em JavaFX como camada de apresentação alternativa. Com uma combinação de XML e um enterprise service bus, eles podem, com confiança, juntar todos esses componentes em uma aplicação escalável que rode em servidores x86.

Para ilustrar, a seguinte amostra de aplicação - um portal de pesquisa de uma empresa para bancos investidores - combina HTML, um Web Service XML, Ajax/JavaScript e JavaFX (código fonte que implementa este aplicativo está disponível na informationweek.com1231/ddj/code.htm.)

A aplicação consiste em três web services:

- Stock quotes, um serviço de base em rest que retorna os dados em xml.

- Data Requestor, um componente que utiliza um broker de mensagem ou ESB para requerer e distribuir dados financeiros críticos.

- Stock Viewer, um aplicativo JavaFX que utiliza os outros componentes para mostrar os últimos dados para uma dado símbolo de estoque. A chave para esta arquitetura é que não somente ela é distribuída pelo desenho, mas também baseada tanto nos padrões quanto nos códigos abertos. Graças, em parte, ao XML e ao http, o resultado é independência de plataforma e linguagem para cada componente em cada tier. 

Se as empresas estão implementando serviços de missão crítica com base em aplicativos que vão para servidores virtuais no mundo todo ou fazendo o protótipo de um simples aplicativo com base em web services e widgets como esse, a tecnologia por trás é fundamentalmente a mesma. É claro, a escala e complexidade são diferentes. Mas com os avanços na CPU, memória e capacidades de banda, a promessa da computação distribuída está no caminho de se tornar realidade.

abs.

Nenhum comentário:

Postar um comentário