Revista Do Linux  
EDIÇÃO DO MÊS
  Atualidades
  Beowulf
  CAPA
  Corporativo
  Divirta-se
  Entrevista
  Estudo de Caso
  Interfaces Gráficas
  Mercado
  Programação
  Segurança
  Servidores
  WEB

Supercomputador a preço de banana
Indicado para grandes usuários, especialmente nas chamadas missões críticas, clusters oferecem um grande poder computacional com hardware comum, que se encontra em qualquer loja.

À medida que o Linux se infiltra nos ambientes de grandes usuários, a capacidade de prover serviços de alta disponibilidade torna-se maior. Grandes corporações precisam de grande poder computacional de baixo custo, para renderizar gráficos em altas velocidades, prever o clima, fazer simulações de explosões atômicas e outras tarefas de alto desempenho. Empresas que trabalham com serviços de missão crítica precisam de alta disponibilidade para garantir que equipamentos hospitalares e sistemas públicos de emergência estejam sempre acessíveis e funcionando. Em certas situações, quando requerimentos de performance podem rapidamente tornar o equipamento insuficiente para a tarefa, um único computador não é o mais adequado. Manter apenas um computador realizando uma tarefa importante também não é uma garantia segura de que o serviço vai estar sempre disponível, pois problemas de hardware ou software podem causar a interrupção do serviço.

Usar o Linux como sistema operacional num ambiente de cluster encaixa-se com perfeição. Além do preço, que às vezes determina a realização ou não de um projeto, especialmente num ambiente acadêmico ou em empresas pequenas, ainda se tem a vantagem do código fonte aberto. Como está na página do Avalon, um dos maiores clusters Linux hoje, "nós não usamos o Linux porque ele é gratuito, nós usamos porque ele tem código fonte aberto, performance de rede superior, e está sendo desenvolvido de maneira aberta e acessível". Embora a tarefa de fazer o Linux funcionar em clusters esteja começando, a natureza aberta dos projetos permite que já se vejam resultados excelentes, superiores a muitas soluções comerciais bem mais caras.

O Avalon, por exemplo, é um cluster de 140 máquinas Alpha 533 MHz, localizado no Laboratório Nacional de Los Alamos, nos Estados Unidos. Esse computador já foi o 113º no TOP500, a lista das 500 máquinas mais rápidas do mundo. O fato de o Avalon ter custado uma fração do preço de seus concorrentes próximos no ranking, mesmo usando máquinas de alta qualidade, é um testemunho do poder que o Linux ainda tem para mostrar quando a tarefa é clusterização.

Clusters como o Avalon são descendentes diretos de um projeto desenvolvido pelo Center of Excellence in Space Data and Information Sciences (Cesdis), uma das divisões da Nasa, em 1994. Nesse projeto foi montado um cluster de 16 máquinas Linux que atingiu um poder de processamento tão fenomenal e a um custo tão baixo que o sucesso do projeto se alastrou rapidamente pelo meio acadêmico e científico. O nome do cluster, Beowulf - uma referência a um poema épico medieval sobre a batalha entre um bravo guerreiro com dois monstros do fundo do mar, e também o primeiro livro impresso da literatura inglesa -, acabou virando nome genérico para todos os clusters que se assemelhavam à configuração do original.

O Beowulf inaugurou um período de ouro para o Linux na área da supercomputação, justamente por permitir que grande poder computacional seja conseguido com hardware disponível comercialmente. É o que se chama de out of the shelf - direto das prateleiras. O experimento original era formado por máquinas PC 486 com hardware comum, encontrado em qualquer loja de equipamentos de informática.

Mais importante ainda é que o projeto Beowulf trouxe muitas melhorias ao kernel-padrão do Linux. Foram desenvolvidos mais e melhores drivers para placas de rede, a pilha TCP/IP foi melhorada e várias outras implementações foram feitas em outros pontos do sistema. O desenvolvimento deste primeiro cluster Beowulf trouxe contribuições significativas para toda a comunidade Linux.

O princípio de funcionamento é teoricamente simples. Uma tarefa é dividida em partes independentes, distribuídas entre os vários computadores que fazem parte do cluster, onde as informações são processadas. Embora poucas tarefas possam ser paralelizadas com facilidade, um cluster estilo Beowulf é útil para uma enorme quantidade de problemas científicos. Paralelizar algoritmos é um ramo bastante inexplorado, e de importância vital para a indústria de informática nos próximos anos.

Normalmente, para fazer um programa para esse tipo de processamento usa-se uma biblioteca específica para passagem de mensagens. Embora nada impeça que o programador use sockets diretamente, não há muito motivo para aumentar a complexidade do programa em função de detalhes de baixo nível. O uso de uma biblioteca permite que o programador só precise se preocupar com instruções como envie uma mensagem e não com detalhes mais específicos de como a mensagem será enviada.

Os dois grandes padrões de bibliotecas de passagem de mensagens são o Parallel Virtual Machine (PVM) e Message Passing Interface (MPI). O PVM é o padrão mais antigo e o MPI é a novidade na área, embora ambos existam há anos. Enquanto PVM é realmente o nome de uma biblioteca, MPI é um padrão com várias implementações criadas principalmente por universidades e algumas suportadas comercialmente por empresas.

O PVM se baseia em duas primitivas básicas envie mensagem e receba mensagem, de fácil utilização, mas não tão poderoso quando comparado com o MPI. Este tem opções mais avançadas, como envio de mensagens broadcast (para todas as máquinas do cluster) e multicast (para um grupo específico de máquinas), assim como melhor controle sobre o tratamento que cada mensagem terá ao ser recebida por outro ponto do cluster.

Para o usuário, o que ele vai precisar configurar em um cluster PVM é algo como manter as máquinas o mais idênticas possível, para facilitar a manutenção, e estabelecer alguma forma de relação de confiança entre elas. Usar rhosts e rsh é a forma mais simples de conseguir isso. O usuário roda o gerenciador do PVM, adiciona máquinas ao cluster e depois simplesmente executa o programa feito para PVM. A configuração do MPI depende da implementação, e algumas delas chegam a instalar front-ends para compiladores C e Fortran, mas a forma geral de uso é semelhante.

A aplicação desse tipo de bibliotecas, porém, é razoavelmente restrita. Há alternativas que permitem que aplicações existentes sejam portadas de uma forma mais prática para um ambiente distribuído, ou que novas aplicações fiquem mais fáceis de programar ou gerenciar. O preço da facilidade vem com um preço em performance, mas em boa parte dos casos vale a pena pagar.

DIPC (Distributed Interprocess Communications) é uma forma de comunicação entre processos que funciona em um ambiente de rede. A vantagem é que uma solução assim é bastante mais familiar para o programador e mais compatível com aplicações antigas. O uso do DIPC é bastante similar ao do System V IPC e a única modificação é a necessidade de se declarar que a comunicação será feita num ambiente distribuído, mas mantém-se a compatibilidade.

O projeto Mosix, desenvolvido em Israel, é também especialmente interessante. Com a diferença de requerer a maior modificação no kernel do Linux de todos os sistemas descritos aqui, o Mosix permite a migração automática entre várias máquinas de um cluster. Isso pode permitir que aplicações existentes funcionem num ambiente de cluster com pouquíssimas alterações. Embora na prática o projeto não esteja completo, ele pode se tornar viável para uma grande quantidade de problemas. Os desenvolvedores do Mosix estão trabalhando com muitas coisas interessantes, como sockets migráveis, que estarão disponíveis em breve.

Alguns tipos de problemas, como webserving e bancos de dados podem se beneficiar de configurações bem mais simples. A solução mais simples é usar DNS round robin, mas nem sempre é apropriada. Ela não permite, por exemplo, que a tarefa seja passada preferencialmente para as máquinas menos carregadas. Além disso, o poder de decisão na divisão de serviço fica com o cliente, o que normalmente não é uma boa idéia. É preciso que o servidor tenha o poder de dividir as tarefas. Há uma desvantagem adicional também: caso um dos servidores caia numa configuração DNS round robin, parte das necessidades não será atendida.

Para esse tipo de problema, o projeto Linux Virtual Server é ótimo. Nesse tipo de cluster, uma máquina fica como um servidor virtual, que vai apenas repassar os pedidos para outras máquinas. O exemplo clássico de servidores Web é uma excelente aplicação desse tipo de solução. Observe o esquema no quadro acima.

O servidor virtual, que na terminologia do projeto se chama LinuxDirector, não realiza processamento algum, apenas passa as requisições para os servidores reais que são os que vão processar as informações e devolver os resultados. Tipicamente, o cliente é uma máquina na Internet, assim como o servidor virtual. Os servidores reais estão em uma rede privada e têm acesso à Internet via IP mascarado, através do servidor virtual. Essa configuração é prática de administrar e, como os servidores reais não são diretamente acessíveis pela Internet, é mais segura.

O LinuxDirector pode então escolher para que máquina enviar cada requisição de acordo com vários algoritmos. Ele pode passar os pedidos seqüencialmente ou tomar decisões baseadas na quantidade de trabalho a que cada máquina está submetida. Também permite que se atribua um peso para cada máquina, normalmente para compensar as diferenças reais de capacidade de cada uma. Os servidores reais atrás do LinuxDirector não precisam ser necessariamente máquinas Linux.

Essa configuração também pode ser usada em conjunto com algumas ferramentas para garantir a disponibilidade do serviço. O projeto Linux-HA (Linux High Availability) foi criado para desenvolver o software necessário para conseguir alta disponibilidade. Com um software como o Heartbeat, é possível configurar servidores de backup que vão tomar o lugar dos servidores reais caso haja algum problema com eles. O funcionamento é bastante simples de entender: o servidor de reserva monitora constantemente o funcionamento do servidor principal, enviando pings por exemplo, e, caso o servidor principal caia, o reserva assume o seu lugar na rede. Isso é feito normalmente através da falsificação de pacotes ARP (Address Resolution Protocol). O servidor reserva consegue assumir o lugar do principal, enganando os outros computadores da rede.

O uso das ferramentas do Linux Virtual Server e do Linux-HA possibilita criar um cluster bastante avançado, capaz de disponibilizar alta performance, confiabilidade e distribuição de carga com uma configuração relativamente simples. Seguindo esse exemplo de um cluster de servidores Web, seria possível adicionar mais um elemento à configuração. Um sistema de arquivos distribuído e tolerante a falhas como o Coda ou o Intermezzo pode ser usado para armazenar os dados que serão servidos. O suporte a Coda está no kernel 2.2 padrão do Linux, mas o Intermezzo e outros sistemas de arquivos ainda estão em desenvolvimento. O uso de um desses sistemas de arquivos permite que os dados estejam sempre disponíveis e sejam consistentes entre os servidores.

Os projetos de distribuição de carga, tolerância a falhas e processamento paralelo são alguns dos mais importantes desenvolvimentos do Linux como sistema operacional para servidores. Com eles, o Linux pode chegar a concorrer com sistemas com as configurações de mais alto nível, como mostra o exemplo do Avalon, em que um cluster construído de forma quase artesanal resultou num dos computadores mais rápidos do mundo. O desenvolvimento de infra-estrutura de alta disponibilidade é uma prioridade imediata para uso em servidores. Embora haja algum suporte desenvolvido, que é muito útil para muitos casos, ainda há bastante coisa a ser feita. O High-Availability Howto tem uma longa explicação do que ainda precisa ser desenvolvido no Linux para suportar alta disponibilidade.

Guilherme Wünsch Manika


Para saber mais

 

A Revista do Linux é editada pela Conectiva S/A
Todos os Direitos Reservados.

Política de Privacidade