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