Tecnologia

Computação Distribuída: do espaço para sua casa

Postado por: em 29/04/2019

Por Sillas Samyr

 

Quando criamos um serviço na web, o que queremos é que ele atenda às pessoas da forma mais eficiente possível, não importa quantas estão acessando. Sejam dezenas, centenas ou milhares. A informação precisa está disponível 24 horas por dia, 7 dias por semana.

 

Como não temos (ainda) um computador com um poder de processamento infinito, gargalos podem acontecer quando o tráfego de informação se torna excessivamente alto. Se o problema é grande demais para uma única máquina resolver, a lentidão aparece.

 

Recentemente, fomos surpreendidos pelos cientistas com uma imagem histórica. Trata-se da primeira imagem de um buraco negro real. Objeto inicialmente idealizado pelo naturalista e geólogo inglês John Michel, ainda no século 18, e que só recentemente foi comprovado a sua existência.

 

Mas o que isso tem a ver com uma aplicação web?

 

Para que a imagem fosse gerada, foram necessários dois anos de processamento e refinamento de dados. Para ser mais exato, 5 petabytes ou 5 milhões de gigabytes de informações.

 

A técnica utilizada para gerar tal imagem, é a mesma do pessoal do LIGO (Laser Interferometer Gravitational-Wave Observatory), o observatório que comprovou a existência das ondas gravitacionais, conceito idealizado pelo matemático e físico teórico francês Henri Poincaré em 1905, e posteriormente predito teoricamente por Albert Einstein em 1916.

 

Recentemente, após a histórica descoberta de tais ondas, o observatório passou por melhorias e ficou muito mais preciso e sensível. Os cientistas, vendo que processar todos os dados que serão gerados será extremamente caro, demorado, e portanto, inviável, resolveram apelar para as “pessoas comuns”.

 

O projeto criado por estes cientistas pretende conectar a maior quantidade de computadores pessoais possível. Cada computador pessoal seria um nó de uma grande rede global que formará um supercomputador capaz de processar todas as informações de que precisam, e sem gastar rios de dinheiro para isso.

 

Os computadores pessoais trabalharão para os cientistas somente quando estiverem ociosos, não atrapalhando a utilização por seus donos. E assim, todos ficariam felizes. Os cientistas teriam os seus resultados, e o cidadão comum estaria contribuindo voluntariamente para o progresso da ciência.

 

Tudo isso pode parecer que veio do futuro, mas na verdade, veio do passado. Todos que já acessaram a internet já utilizaram essa tecnologia, mesmo sem saber. Não, não estou dizendo que alguém está utilizando o seu computador sem que você saiba, e sim que a tecnologia utilizada por estes cientistas, é basicamente a mesma utilizada pelos grandes servidores de internet.

 

O que ela faz é dividir uma grande tarefa que um único computador não pode resolver, em pequenas tarefas menores, e espalhá-las por diversas máquinas conectadas na rede.

 

As máquinas resolvem a parte do problema que lhe foi entregue e devolvem para o servidor principal a parte do resultado. O servidor central terá o trabalho mais simples de juntar as diversas partes da solução e apresentá-lo ao usuário.

 

Para cada área em que essa tecnologia é empregada, temos um nome diferente. Na indústria do cinema, é chamado de “renderfarm”. Na área científica, de “computing grid”. No caso dos servidores web, temos um “servefarm”, que é gerenciado por um balanceador de carga.

 

Ele é o encarregado de separar as requisições entre diversos servidores, de forma que nenhum deles fique sobrecarregado. E assim, entregar para o usuário o site que deseja acessar. Parecendo para ele que só existe um único servidor.

 

Atualmente, geramos muito mais dados do que podemos processar, sejam dados pessoais obtidos de redes sociais, ou mesmo de dados vindos de alguma sonda explorando um planeta distante. Temos aí o conceito de Big Data.

 

Uma das soluções que foram criadas para o tratamento de enormes volumes de dados em um tempo comercialmente viável, é a computação distribuída. Como é genericamente chamado, essa tecnologia encontra-se hoje em um ritmo de crescimento enorme, graças a evolução dos computadores, das tecnologias de redes, da internet das coisas (IoT), e o aumento da banda larga mundial.

 

Assim, tornou-se possível a criação de redes enormes de máquinas relativamente simples, mas que juntas, forma um grande supercomputador.

 

Até hoje, o projeto mais famoso a utilizar a tecnologia foi o [email protected]. Um projeto da University of California, Berkeley, que tem por objetivo primário, a busca por sinais de rádio gerado por vida inteligente de origem extraterrestre.

 

Iniciado pelo projeto SETI (Search for Extraterrestrial Intelligence) em meados da década de 1970, o programa gerou uma quantidade de dados tal que precisou de ajuda para ser analisada.

 

Até hoje, qualquer pessoa pode doar o poder de processamento do seu computador pessoal para processar os sinais dos rádios-telescópios do programa. Com o sucesso da empreitada, como informamos antes, o LIGO também lançou a sua campanha de contribuição popular, chamada de [email protected], juntando-se assim, a dezenas de outras campanhas das mais diversas áreas do conhecimento.

 

Áreas do conhecimento:

[email protected] – Busca por sinais de rádio alienírgena

[email protected] – Biologia

[email protected] – Astrofísica

[email protected] – Astrofísica

Rede mundial do LHC (large Hadron Collider)

 

Computação distribuída resolve todos os problemas de processamento?

 

Para que um determinado problema seja resolvido utilizando essa técnica, é necessário observar três pontos principais:

 

1 – O meu problema é grande o suficiente?

É preciso verificar se o seu problema é realmente grande, que justifique a implantação de uma rede de máquinas conectadas. Sejam máquinas locais, servidores na nuvem, ou espalhadas pelo mundo.

Problemas pequenos não irão tirar proveito da tecnologia, pois deve-se considerar o tempo para que cada máquina seja previamente preparada para receber o problema, depois é preciso considerar o tempo para que cada informação trafegue pela rede, e por fim, o tempo necessário para juntar todos os resultados e retorná-los para o usuário.

 

Mas, o que seria então um problema pequeno ou grande?

Para exemplificar: suponha que você solicitou um relatório em que precise fazer uma consulta a um banco de dados que demore cerca de 20 minutos para retornar o resultado.

Pode parecer um longo tempo. Mas se esse relatório é recolhido uma vez a cada mês, ou mesmo, uma vez ao ano, talvez não valha o investimento. Por outro lado, se eu preciso processar milhares de imagens a procura de um certo padrão, aí sim, é um bom exemplo de um problema grande.

Um exemplo mais prático e real ocorre toda vez que fazemos uma compra com cartão de crédito em uma loja virtual. Para saber se o cartão utilizado é seguro, é preciso consultar uma grande base de dados com diversos tipos de informações de uso daquele cartão. O problema é que o comprador não vai esperar muito tempo pela resposta, então é necessário utilizar a computação distribuída para entregar o resultado rapidamente e o cliente poder concluir a sua compra com segurança.

 

2 – O meu problema pode ser dividido?

Para que a programação distribuída funcione, é necessário quebrar um problema maior em diversos problemas menores, para que possam ser entregues para as máquinas participantes.

Cada parte menor do problema, precisa ser independente de todas as outras, ou seja: um pedaço do problema não pode depender do resultado de outro pedaço para ser concluído.

Da mesma forma, a solução de uma parte do problema, não pode interferir na solução de outro. Se o que queremos não puder satisfazer algum desses pontos, perderemos todas as vantagens.

 

3 –  O meu problema é urgente?

Voltando ao problema do relatório do ponto 1. Se eu preciso gerá-lo uma vez ao ano, ou mesmo ao mês, esperar por sua conclusão pode não ser tão grave se apenas uma pessoa irá acessá-lo, mesmo que seja um incômodo.

Existem soluções melhores e mais baratas no mercado que podem amenizar o tempo de espera nestes casos. Por exemplo: utilizar banco de dados não relacionais, ou mesmo a indexação dos dados, entre outras.

Porém, o jogo vira, se esse mesmo relatório é acessado por centenas de clientes diariamente, e que não gostam muito de esperar.

 

***

Observando esses três fatores decisivos, podemos utilizar as tecnologias disponíveis atualmente para a implantação de grandes máquinas, do tamanho do problema que precisamos resolver.

Companhias como a Amazon AWS e a Google oferecem soluções para diferentes tipos de problemas.

A Amazon disponibiliza na sua plataforma AWS o HPC (High Performance Computer), da mesma forma, a Google também disponibiliza o HPC em sua GoogleCloud.

Porém, se pretende montar a própria infraestrutura para a criação de uma super máquina utilizando a computação paralela, um ponto inicial seria entender sobre as tecnologias mais utilizadas, Começando, por exemplo com o Hadoop, o Spark e o ecossistema envolvido.

Cada tecnologia foi criada para resolver um tipo de problema. A utilização de cada uma deve ser muito bem analisada para se evitar gastos desnecessários. Mas quando bem aplicadas, podem transformar um grande problema insolúvel, em pequenos problemas fáceis de resolver.

Links interessantes:

A computação distribuída está em constante crescimento, e ficar de olho nas novas tendências pode significar a diferença entre o sucesso e fracasso. Continue acompanhando o Blog da Rits para fique por dentro de tudo.

A Rits é uma empresa focada no desenvolvimento do sistema recorrência, outsourcing de e consultoria de TI, para empresas de diversos setores.