Pesquisar este blog

terça-feira, 10 de maio de 2016

Cluster de Computadores e Computação em Grade/Grid

Cluster de Computadores e Computação em Grade/Grid

Neste post será mostrada a teoria dos sistemas de cluster de computadores, assim como um exemplo dele, o cluster Beowulf, além da teoria da computação em Grade ou Grid.

Cluster de Computadores

Um cluster de computadores é um sistema que consiste em vários computadores conectados de forma que eles trabalhem como se fossem apenas um sistema.
Existem dois tipos de conexões entre os componentes de um sistema de cluster, as do tipo altamente acopladas, quando há um alto conhecimento entre cada um dos componentes deste sistema e as conexões abstratas, quando os componentes não sabem quase nada um do outro.
Em um Cluster os computadores são usualmente conectados por uma rede local (LAN Local Area Network) e cada nó (servidor) possui o seu hardware prórprio, assim como uma instância do Sistema Operacional. Geralmente os nós possuem o mesmo sistema operacional (versão e tipo), assim como o mesmo hardware, porém em alguns casos, como o OSCAR (Open Source Cluster Application Resources) eles podem variar.
Os clusters ficaram populares quando os preços dos microcomputadores cairam e a performance dos seus processadores aumentaram. Em um certo ponto da história ficou mais barato criar um cluster local, conectando-se várias máquinas comuns em uma rede de alta velocidade, do que comprar um supercomputador. Os clusters são utilizados para rodar um programa de alta intensidade computacional em paralelo usando várias máquinas.
Pode-se criar um cluster usando apenas dois computadores, assim como através da utilização de um supercomputador. Um dos primeiros clusters de baixo custo, também conhecido como Stone Supercomputer foi realizado na década de 90. Este cluster foi implementado utilizando-se um toolkit do Linux chamado Parallel Virtual Machines e a Message Passing Interface provando que era possível construir uma máquina de alta performance a um baixo custo.
Enquanto a arquitetura de cluster pode ser utilizada para construir um cluster com poucas máquinas simples, ela também pode ser utilizada para se construir computadores de alta performance. A TOP500 é uma organização que divulga a cada 6 meses um ranking com os 500 computadores mais poderosos do mundo, e alguns destes sistemas são construídos através da utilização da arquitetura de cluster. As grandes empresas fabricantes de hardware estão sempre em uma disputa constante para ficar e manter-se em primeiro lugar desta lista. Esta lista sempre é divulgada em Junho e Novembro.

História

Os clusters não foram inventados por nenhuma empresa, mas sim pelos clientes que não conseguiam mais executar as suas tarefas em apenas uma máquina, ou precisavam de um backup. A data estimada da criação deste tipo de arquitetura é em 1960.

Atributos de um Cluster

Um cluster pode ser construído para diversas funionalidades, desde para um sistema de negócio como um Web-Service, quanto para sistemas científicos de cálculo intensivo.
Um dos exemplos de cluster para sistemas científicos foi o utilizado no Projeto Genoma Humano, o qual foi um esforço internacional para se mapear o Genoma Humano e a identificação dos nucleotídeos que o compõem. Este projeto iniciou-se em 1990 e foi comunicado como encerrado em Abril de 2003, ele foi feito em 250 laboratórios, usando 5000 cientistas de 17 países diferentes. Com a evolução das máquinas e dos sistemas distribuídos, hoje ele poderia ser feito em 1 semana com apenas 2 pessoas.
Configurações de load balance são realizadas nos clusters para fazer com ele aproveite melhor o hardware disponível. O load balance é realizado pelo Master de forma a distribuir melhor as mensagens a serem processdas entre os nós do cluster.
Os clusters de computador são utilizados para tarefas de alta complexidade, ao invés de tarefas com altas taxas de leitura e escrita, como um banco de dados, ou um webservice. Estes clusters são utilizados por exemplo, para simular batidas de carros, analisar dados de prospecção de pretróleo, processamento de imagens, processamento de alto volume de dados Big Data, para cálculos de predição. Cluster que utilizam máquinas altamente acoplatas se aproximam dos supercomputadores.
Clusters de alta disponibilidade são aqueles onde existem nós redundantes e eles serão utilizados para entrar em operação quando alguma coisa falha. Estes clusters evitam o ponto simples de falha (single point of failure) e o Linux-HA é o exemplo mais comum deste tipo de cluster em software livre.

Cluster Load Balance

Load balance é uma maneira de distribuir os processos pelo cluster, de forma que eles sejam realizados da forma mais rápida possível, existem muitas formas de distribuir os processos entre os componentes do cluster.
A maneira mais simples de fazer um load balance é a chamada Round-Robin, onde os nós do cluster serão ordenados e cada processo que chega será direcionada ao próximo nó, quando o número de processos for maior que o número de nós, os nós receberão mais de um processo.
Uma outra forma de se distribuir os processos é escolher randomicamente um nó e direcionar o processo para ele, ou também conhecido como distribuição randômica.
Cada processo que será processado por um nó, é armazenado em uma fila, e existe uma distribuição que direciona os processos para o nó que contém a menor fila, assumindo que a menor fila é quem irá processar mais rápido.
Existem sistemas de load balance que calculam o tempo médio de processamento de cada nó, e sempre enviam os processos para as máquinas que possuem o menor tempo médio de processamento. Neste caso, para o cálculo, conta-se o tempo de envio da mensagem até a chegada da resposta.
Existem várias formas de se distribuir as tarefas em um sistema de cluster, mas é impossível determinar qual será a melhor maneira, sem saber pelo menos, como serão as mensagens que o sistema irá receber.

Configuração e Design

Um dos problemas de desenvolver um cluster é determinar o quão acoplado estarão os nós deste cluster. Por exemplo, um único processo poderá necessitar de uma frequente comunicação entre os nós, o que implica que este cluster deverá estar inserido em uma rede dedicada. Uma outra possível configuração extrema é quando os nós não necessitam de nenhuma comunicação entre si, o que ocorre nos Clusters Beowulf onde os slaves não se conhecem, o que é bem próximo a um sistema de GRID.
Em um cluster Beowulf tipicamente os nós tem sua própria versão do sistema operacional instalada, sua memória e discos locais. Porém em alguns casos, quando há uma rede dedicada, pode-se instalar um sistema de arquivos distribuído entre os nós, onde todos podem ler ou escrever nele.

Cluster Middleware

O cluster middleware é uma camada de software que orquestra a alocação de tarefas aos nós e torna possível com que o usuário veja um cluster como se fosse apenas uma máquina.
O middleware é responsável pela distribuição das tarefas no cluster e pelo controle do que já foi executado e o que ainda deverá ser executado.
Esta camada de software provê ao usuário uma interface, onde ele poderá se conectar tanto para submeter tarefas, quanto para analisar o que foi e  está sendo executado no cluster.

Cluster Beowulf

Um exemplo bem conhecido de cluster de computadores, são os clusters baseados em máquinas Linux chamado de Beowulf. Este cluster consiste em uma rede de computadores que são controlados e acessados por uma máquina conhecida como master simples. O master é quem possui o middleware instalado e no caso do Cluster Beowulf ele possui uma interface para que o cluster possa ser acessado pelos seus usuários. Os nós deste sistema não precisam de nenhum software, somente o sistema operacional.
Em um cluster Beowulf os nós não se conhecem, apenas o master conhece os nós, assim como cada nó só conhece o master. Neste tipo de cluster, as tarefas processadas por eles, não podem necessitar de nenhuma comunicação entre si, ou seja cada nó deverá ser capaz de processar uma tarefa por completo.

Computação em Grid

A computação em Grid difere de um cluster, pois no grid as máquinas estão em localidades diferentes, redes diferentes. Em um grid temos diversas máquinas diferentes atuando como se fossem um único supercomputador.
Nos grids, cada nó irá executar uma função do início ao fim, sem precisar se comunicar com um outro ponto. Os grids tendem a ser mais dispersos e mais, geograficamente espalhados, do que os clusters.
Um grid pode ser utilizado por apenas uma aplicação, porém geralmente eles são desenvolvidos para serem usados por várias aplicações diferentes ao mesmo tempo.
A coordenação de tarefas entre os nós de um grid não é uma tarefa simples e alguns softwares específicos tiveram que ser desenvolvidos para controlar este fluxo de informações.

Exemplo de Grid

Um dos exemplos mais conhecidos de GRID é o chamado World Community Grid. Este Grid fica em um site, e vários projetos podem se submeter a utilizar o seu poder de processamento. Nele as pessoas podem baixar um software que podemos ao ser instalado em sua máquina irá utilizar os momentos de baixo processamento dela, por exemplo quando você deixa o computador ligado e vai tomar um café, para processar pedaços de projetos que estão disponíveis no site.
Quando este post foi escrito, dentre os projetos disponíveis no World Community Grid, eram:
  • Ajuda a lutar contra a tuberculose
  • Luta contra a AIDS
  • Melhorar formas de se encontrar água limpa para milhões de pessoas
  • Melhorar o desempenho de célular solares
  • Ajuda a melhorar remédios contra cancer
  • Luta contra o EBOLA
Apresentação