Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
11
Computação em Grade: Conceitos, Tecnologias,
Aplicações e Tendências
Abstract
Resumo
11.1.1. Histórico
A computação em grade é o resultado de décadas de pesquisa nas áreas de
processamento paralelo e sistemas distribuídos. A pesquisa em processamento paralelo
sempre procurou extrair o máximo de desempenho computacional por meio da criação
de máquinas dedicadas com múltiplos processadores, redes especiais de alta velocidade,
memórias compartilhadas e processamento vetorial. Todo este esforço levou a
construção de supercomputadores como o NEC Earth Simulator e o IBM Blue Gene
(MPPs), máquinas extremamente caras e de propósito específico, além de aglomerados
de computadores (NOWs) de baixo custo financeiro compostos de software e hardware
de prateleira.
Por outro lado, a área de sistemas distribuídos preocupou-se mais com aspectos
ligados à comunicação, heterogeneidade e compartilhamento de recursos
computacionais, principalmente informações por meio de arquivos. Com o surgimento
da Internet e da Web, por meio de protocolos como o TCP/IP e HTML e redes Ethernet,
os sistemas distribuídos atingiram uma escalabilidade global propiciando a criação do
comércio eletrônico, redes de troca de arquivos, teleconferências etc. Esta evolução
resultou nas redes P2P (peer-to-peer) como Kazaa, Gnutella e Emule, que permitem o
compartilhamento de qualquer tipo de arquivo em nível global [Chetty 2002] [Krauter
2001].
Como resultado da união destas duas importantes áreas da computação, surgiu o
conceito de grade computacional (Figura 2). Portanto, as grades computacionais estão
preocupadas em agregar supercomputadores distribuídos geograficamente para o
processamento de grandes massas de dados, enquanto redes P2P procuram compartilhar
arquivos distribuídos geograficamente e realizar processamento com computadores de
pequeno porte, no caso do projeto SETI@home, e os supercomputadores (MPPs,
aglomerados etc.) são computadores de grande porte dedicados para solução de grandes
problemas com o menor tempo de resposta.
11.1.2. Objetivos
Com a proposta deste trabalho pretendemos atingir quatro objetivos principais:
• Apresentar e difundir os conhecimentos (teóricos e práticos) relacionados com a
computação em grade considerando os principais tópicos relacionados com:
conceitos; tecnologias, aplicações e tendências.
• Apresentar de modo prático e exemplificado, a programação de aplicações para
arquiteturas de computação em grade existentes (OurGrid, Anthill etc.). Neste
minicurso, apresentamos aplicações de mineração de dados em bases de dados reais.
• Incentivar os alunos a programar e utilizar computação em grade nas suas
universidades nos contextos das diversas disciplinas e futuramente utilizar este tipo
de sistema computacional na sua vida profissional.
• Produzir e disponibilizar literatura em português sobre computação em grade unindo
tópicos teóricos e práticos, já que a quantidade de material - com este enfoque -
disponível em português é muito pequena.
• Core Grid: esta camada é composta de middlewares que oferecem serviços tal
como gerenciamento remoto de processos, co-alocação de recursos, acesso de
armazenamento, registro e descoberta de informações, segurança e aspectos de QoS.
Estes serviços abstraem a complexidade e heterogeneidade da Grid Fabric, provendo
um método consistente para acessar recursos distribuídos.
• Grid Fabric: esta camada consiste de recursos distribuídos tal como computadores,
redes de interconexão, dispositivos de armazenamento e instrumentos científicos. Os
recursos computacionais representam múltiplas arquiteturas tal como aglomerados,
supercomputadores, servidores e PCs que executam diferentes sistemas
operacionais. Os instrumentos científicos, tal como telescópios e redes de sensores,
provém dados em tempo real que podem ser transmitidos diretamente a sites de
computação ou armazenadas em uma base de dados.
Com relação ao projeto de grades, elas podem ser divididas em três categorias:
grades computacionais, grades de dados (data grid) e grades de serviços [Krauter 2001].
A categoria de grade computacional está relacionada com infraestruturas que possuem
maior capacidade de processamento para execução de aplicações paralelas e
distribuídas. Geralmente, grades computacionais procuram diminuir o tempo de resposta
de aplicações ou aumentar a vazão do sistema.
As grades de dados são infraestruturas para sintetização de informações novas de
repositórios de dados como bibliotecas digitais e data warehouses que estão distribuídos
em uma rede de alta escala. Elas possuem serviços de gerência de armazenamento e
acesso de dados para as aplicações.
Por último, uma grade de serviços é uma infraestutura que fornece serviços que
não podem serem providos por apenas uma máquina, como interligação de grupos
colaborativos, agregação de recursos para visualização de dados que permita um
cientista aumentar a confiabilidade de suas simulações e aplicações multimídia de
tempo real.
11.3.1. Globus
Globus consiste de um conjunto de serviços que facilitam computação em grade [Foster
1998]. Os serviços Globus podem ser usados para submissão e controle de aplicações,
descoberta de recursos, movimentação de dados e segurança na grade. Os principais
serviços Globus disponíveis atualmente (na versão 2.0) são apresentados na Tabela 2.
Serviço Funcionalidade
GSI Segurança, autenticação única na grade
GRAM Submissão e controle de tarefas
Nexus Comunicação entre tarefas
MPI-G MPI sobre Nexus
MDS Informações e diretórios
GASS Transferência de arquivos
GridFTP Transferência de arquivos
11.3.1.3. Comunicação
O problema de comunicação na grade pode ser visto como uma instância do eterno
conflito entre generalidade e desempenho. Caso utilizemos um mecanismo de
comunicação genérico (e.g. TCP) que viabilize a comunicação fim-a-fim entre
quaisquer duas tarefas na Grade, perdemos desempenho em casos especiais (e.g. se
ambas tarefas rodam em uma máquina de memória compartilhada, elas poderiam se
comunicar muito mais rapidamente pela memória). Por outro lado, gostaríamos de usar
um mecanismo genérico para não ter que programar para cada uma das várias
tecnologias de comunicação existentes.
O Globus ataca este problema com o Nexus. O Nexus fornece uma interface de
baixo nível, mas uma implementação adaptável que escolhe dentre as tecnologias de
comunicação disponíveis, a que vai oferecer melhor desempenho. Por exemplo, se
ambas tarefas estão em uma máquina de memória compartilhada, o Nexus utilizará a
memória para efetuar a comunicação. Caso as tarefas estejam em um MPP, Nexus
utilizará o switch de alta velocidade para comunicação. Caso as tarefas estejam em
máquinas geograficamente distantes, o Nexus utilizará TCP/IP.
O Nexus fornece uma interface de relativo baixo nível: invocação remota de
procedimento, mas sem retorno de resultado. Portanto, programar diretamente em
Nexus não é das tarefas mais agradáveis. Entretanto, a idéia da equipe Globus é que
Nexus seja usado por desenvolvedores de ferramentas e mecanismos de comunicação,
não diretamente pelo desenvolvedor de aplicações. O MPI-G é o exemplo perfeito desta
abordagem. O MPI-G implementa o popular padrão MPI (Message Passing Interface)
sobre Nexus. Assim, o desenvolvedor de aplicações escrever em MPI e link-editar sua
aplicação com MPI-G para automaticamente ter acesso a melhor tecnologia de
comunicação disponível (selecionada pelo Nexus).
11.3.1.4. Transferência de Dados
A necessidade de acesso remoto e transferência de dados é uma constante na
computação em grade. Na verdade, várias das aplicações aptas a executar na grade
necessitam de paralelismo, exatamente porque processam enormes quantidades de
dados. Ciente deste fato, o Globus logo disponibilizou GASS (Global Access to
Secundary Storage), um serviço para acesso remoto a arquivos sob a tutela de um
servidor GASS. O cliente GASS é uma biblioteca C que é link-editada à aplicação
usuária do serviço. Com o intuito de fornecer boa desempenho, o serviço GASS
implementa as otimizações típicas de acesso remoto como caching e pre-fetching.
Apesar de ser um bom serviço, o GASS encontrou problemas de implantação. A
dificuldade encontrada foi a interoperabilidade. A maioria das fontes de dados onde se
instalaria um servidor GASS já executa algum serviço de transferência e/ou acesso
remoto aos arquivos. Os administradores de sistema se questionavam porque não se
poderia usar os serviços existentes.
Essa realidade motivou a introdução do GridFTP [Allcock 2002] por parte da
equipe Globus. O GridFTP estende o popular protocolo FTP para torná-lo mais
adequado para as necessidades da computação em grade. Mais precisamente, o GridFTP
introduz suporte a:
• Autenticação GSI e Kerberos.
• Transferência em paralelo (várias conexões TCP entre fonte e destino).
• Transferência em faixas (conexões TCP entre várias fontes e um destino).
• Controle manual dos buffers TCP (usado para afinamento de desempenho).
• Instrumentação embutida.
Uma vez que o GridFTP é uma extensão do FTP, o problema de
interoperabilidade fica resolvido, pois FTP é amplamente suportado pelos servidores de
dados. Obviamente, se as extensões GridFTP não estiverem implementadas em um dado
servidor, os benefícios adicionais do protocolo não estarão disponíveis. Mas o cliente
GridFTP ainda será capaz de obter os dados desejados.
11.3.2. Gridbus
O projeto Gridbus é um projeto código aberto e multi institucional comandado pelo
GRIDS Lab na University of Melbourne. O seu principal objetivoé o projeto e
desenvolvimento de tecnologias de middleware para grades orientadas por serviço para
o suporte de aplicações de eScience e eBusiness. Ele provê uma camada de abstração
que esconde as peculiaridades dos recursos heterogêneos middlewares de baixo nível
dos desenvolvedores de aplicações. Além disso, o Gridbus usa modelos econômicos
para o gerenciamento eficiente de recursos compartilhados. Portanto, ele aumenta a
possibilidade de negociação de serviços de grade gerencia eficientemente o
fornecimento e a demanda de recursos. O Gridbus suporta a especificação de serviços de
grade em vários níveis: (i) Raw Resource Level pela venda de ciclos de CPU e recursos
de armazenamento; (ii) Application Level por operações de modelagem de moléculas
para aplicações de projeto de novos remédios; (iii) Aggregated Services pela busca de
serviços através de múltiplos domínios [Asadzadeh 2005].
11.3.3. Condor
O Condor é um sistema que objetiva fornecer grande quantidade de poder
computacional a médio e longo prazo (dias a semanas) utilizando recursos ociosos na
rede [Litzkow 1988]. Os autores do sistema salientam insistentemente que o Condor
tem como objetivo a alta vazão (high throughput) e não alto desempenho [Basney 1999]
[Epema 1996] [Frey 2001] [Litzkow 1988]. Entenda-se disto que Condor visa fornecer
desempenho sustentável a médio e longo prazos, mesmo que o desempenho instantâneo
do sistema possa variar consideravelmente.
O usuário submete ao Condor tarefas independentes para execução. Isso
significa que uma aplicação Condor é uma aplicação Bag of Tasks (BoT). Enquanto este
fato limita as aplicações que podem ser executadas no Condor, deve-se salientar que há
um grande número de aplicações importantes que são BoT. Além disso, aplicações BoT,
devido ao seu fraco acoplamento, são bastante adequadas para execução em grades
computacionais.
O Condor foi inicialmente concebido para funcionar em NOWs. Uma NOW que
executa Condor denomina-se Condor Pool. O elemento arquitetural mais importante de
um Condor Pool é o Matchmaker. O Matchmaker aloca tarefas a máquinas pertencentes
ao Pool. Tal alocação é baseada nas necessidades de cada tarefa e nas restrições de uso
de cada máquina. As necessidades de uma tarefa são especificadas pelo usuário quando
de sua submissão. Por exemplo, uma tarefa pode precisar de uma máquina Sun Sparc,
rodando Solaris, com pelo menos 256MB de memória. Já as restrições de uso de uma
dada máquina, estas são especificadas por seu dono quando da inclusão da máquina no
Pool. Por exemplo, o dono pode preferir que sua máquina execute as aplicações de João,
seguido das aplicações do grupo de sistemas operacionais, e que nunca execute as
aplicações de Pedro. Ou seja, as restrições permitem ao dono determinar como sua
máquina será usada no Condor Pool. Tipicamente, o que o dono estabelece inclui que
sua máquina só é usada quando estiver ociosa e que, quando ele voltar a utilizar a
máquina, qualquer aplicação Condor em execução seja suspensa imediatamente.
Um aspecto interessante do Condor é que ambos usuários e donos de máquinas
são representados no sistema por agentes de software. O Agente do Usuário (Customer
Agent) envia as necessidades da tarefa para o Matchmaker. Similarmente, o Agente do
Dono (Resource Owner Agent) envia as restrições de uso do recurso ao Matchmaker. Ao
efetuar o casamento entre tarefa e máquina, o Matchmaker notifica ambos agentes. A
partir daí, o Agente do Usuário e o Agente do Dono interagem diretamente para realizar
a execução da tarefa. A Figura 12 ilustra este protocolo.
11.3.4. MyGrid
A motivação para a construção do MyGrid surgiu do fato que, embora bastante pesquisa
tenha sido realizada para o desenvolvimento dos grades computacionais, poucos
usuários executavam suas aplicações paralelas sobre essa infraestrutura. Assim, foi
concebido projeto MyGrid, com o intuito de alterar esta situação. Para tanto, foram
atacadas apenas aplicações Bag-of-Tasks, ou seja, aquelas aplicações cujas tarefas são
independentes, podendo ser executadas em qualquer ordem. Aplicações Bag-of-Tasks
são um alvo interessante porque (i) se adequam melhor a ampla distribuição,
heterogeneidade e dinamicidade da grade, e (ii) resolvem vários problemas importantes,
tais como mineração de dados, processamento genômico, pesquisa massiva (como
quebra de chaves criptográficas), varredura de parâmetros, simulações Monte Carlo
(muito utilizado, por exemplo, pela indústria farmacéutica [Hoffman 2005]),
computação de fractais (como Mandelbrot), e manipulação de imagem (como
tomografia).
Estabelecido o escopo do MyGrid, nosso objetivo é construir um sistema
simples, completo e seguro. Por simples queremos dizer que o esforço para utilização do
MyGrid deve ser mínimo. Em particular, queremos chegar o mais próximo possível de
uma solução pronta (plug-and-play). Por completo denotamos a necessidade de cobrir
todo o ciclo de uso de um sistema computacional, do desenvolvimento à execução,
passando por instalação e atualização e incluindo também a manipulação de arquivos.
Por seguro expressamos a necessidade de não introduzir vulnerabilidades ao ambiente
computacional do usuário. Ou seja, não queremos que falhas de segurança em qualquer
uma das máquinas que o usuário possa utilizar sejam propagadas para sua máquina base
(i.e. o computador usado pelo usuário).
MyGrid diferencia entre máquina base e máquina do grade. Em um MyGrid, a
máquina base é aquela que controla a execução da aplicação. Ela tipicamente contém os
dados de entrada e coleta os resultados da computação. A máquina base é normalmente
usada pelo usuário diretamente no seu dia-a-dia, muitas vezes sendo o próprio
computador desktop do usuário. Esperamos, portanto, que o usuário tenha excelente
acesso à máquina base e que tenha customizado um ambiente de trabalho confortável
nela.
Todas as máquinas usadas via MyGrid para executar tarefas são chamadas de
máquinas da grade. Ao contrário da máquina base, não assumimos que o usuário
customizou cada máquina da grade para criar-lhe um ambiente de trabalho familiar.
Além disso, todas as máquinas da grade tipicamente não compartilham um mesmo
sistema de arquivo ou têm os mesmos softwares instalados. A imagem do sistema pode
variar de uma máquina da grade para outra. Portanto, para mantermos a simplicidade de
uso do sistema, precisamos evitar que o usuário tenha que lidar diretamente com as
máquinas da grade. Por exemplo, queremos evitar que o usuário tenha que instalar
software em cada máquina de sua grade. A idéia é que máquinas da grade sejam
manipuladas através das abstrações criadas por MyGrid (descritas a seguir na Tabela 3).
Um aspecto importante de MyGrid é dar ao usuário a possibilidade de usar
quaisquer recursos que ele tenha acesso . Este não é um objetivo trivial porque ele
implica que temos que assumir muito pouco a respeito de uma máquina da grade, de
forma a não impedir algum usuário de usar uma máquina que não suporta nossas
hipóteses. Em particular, não podemos assumir que tal recurso tenha software MyGrid
instalado. MyGrid define Grid Machine Interface como sendo o conjunto mínimo de
serviços que precisam estar disponíveis para que uma dada máquina possa ser
adicionada à grade do usuário. Tais serviços são:
Serviços
Execução remota
Transferência de arquivos da máquina da grade para a máquina base
Transferência de arquivos da máquina base para a máquina da grade
Interrupção de uma execução múltipla
11.3.4.1. OurGrid
Ao contrário do Globus, a solução OurGrid tem um escopo diferente, porém
complementar. O objetivo é prover uma solução efetiva para a execução de aplicações
Bag-of-Tasks em Grades Computacionais. Sendo assim, as decisões de projeto estão
centradas no uso da solução em ambientes de produção. Portanto, a idéia básica é
abdicar da generalidade, em alguns casos, no intuito de se obter uma solução, apesar de
simples, eficiente e que possa ser facilmente usada em produção.
A arquitetura do OurGrid, ilustrada na Figura 13, é formada por três
componentes: MyGrid Broker, OurGrid Peer e uma solução de sandboxing baseada na
máquina virtual Xen [Barham 2003]. Nas seções seguintes descreveremos como os
componentes do OurGrid abordam alguns spectos importantes da Computação em
Grade.
11.3.4.2. Autenticação
Na arquitetura OurGrid existem basicamente dois níveis de autenticação. Esses níveis
dependem de como o usuário obteve o recurso. Primeiramente, o usuário pode ter
acesso direto a alguns recursos (i.e. Grid Machines - GuMs - em sua rede local), neste
caso o usuário usa o esquema de autenticação tradicional, em geral, isso implica na
utilização da infraestrutura de autenticação do sistema operacional do recurso, ou seja,
nome de usuário (login) e uma senha.
Contudo, além das GuMs que o usuário tem acesso direto, OurGrid permite (e
promove) a obtenção de acesso a GuMs de outros sites, isso ocorre através de um
OurGrid Peer local ao site do usuário. Este peer deve estar conectado à rede de favores
(ver Figura 13). Assim, para as GuMs obtidas da comunidade, há uma autenticação em
duas vias baseada em certificados digitais no formato X.509. A primeira parte da
autenticação deve garantir que o usuário tem permissão para solicitar serviços às GuMs
(i.e. que a GuM conhece o usuário que está requisitando seus serviços). A segunda parte
deve garantir que o usuário não está solicitando serviços a uma falsa GuM. Ou seja,
tanto o usuário, através do broker, quanto os peers da comunidade possuem uma lista de
certificados que são usadas para validar a tentativa de aceso.
Isso impede que usuários não autorizados pelo peer, obtenham acesso aos
serviços de descoberta de novas Grid Machines, transferência de arquivos, execução e
gerenciamento do ciclo de vida de replicas fornecido pelas GuMs controladas por um
dado peer.
Outro aspecto importante é que através da utilização de certificados, a
comunicação entre o MyGrid Broker, o peer e as Grid Machines será segura, evitando
que os dados sejam interceptados e manipulados durante a comunicação. A segurança na
comunicação é fornecida através do uso de RMI baseado em SSL (Secure Socket
Layer), que garante comunicação criptografada.
11.3.5. Anthill
Como extensão do ambiente DataCutter, a plataforma Anthill foi criada [Meira 2005].
Ela provê um mecanismo chamado fluxo identificado (labeled stream) que permite a
seleção de uma cópia particular baseada nos dados relacionados com as mensagens
(labels). Essa extensão permite um modelo de programação mais rico, facilitando a
partição do estado global de cópias transparentes. Além disso, o Anthill provê um
framework, no qual a execução da aplicação pode ser decomposta numa seqüência de
tarefas intermediárias que precisam ser realizadas e também pode criar múltiplos filtros
em um ambiente iterativo. Ele explora o paralelismo em vários níveis: tempo, espaço e
assincronia.
11.4.1. Jacobi
Jacobi AppLeS [Berman 1996] é um exemplo interessante por ter lançado a idéia de
escalonamento de aplicações e também por escalonar uma aplicação bem conhecida
(Jacobi). Jacobi é um método usado para resolver a aproximação por diferenças finitas
da equação de Poisson e portanto é aplicável a problemas que envolvem fluxo de calor,
eletrostática e gravitação. Além de ser interessante por si só, Jacobi pode ser visto como
uma instância de uma importante classe de aplicações paralelas: aplicações fortemente
acopladas de paralelismo em dados.
Jacobi AppLeS é um escalonador para Jacobi 2D. Em Jacobi 2D, o domínio do
problema é discretizado em uma matriz bidimensional. Em cada iteração, cada elemento
da matriz é atualizado com a média dos seus quatro vizinhos. O Jacobi termina por
convergência, isto é, quando uma iteração altera muito pouco os elementos da matriz.