Desenvolvendo a interoperabilidade entre aplicações e o cluster

O objetivo deste artigo é apresentar as características de interoperabilidade do produto Windows Compute Cluster Server. Para isto vamos desenvolver um programa em VB.Net que insere um trabalho e tarefas em um cluster. Antes disso vamos investigar o cenário atual e apresentar sucintamente a arquitetura do produto.


A demanda por computação de alta performance

Há 40 anos Gordon Moore, um dos fundadores da Intel, profetizou em um artigo que a complexidade de uma pastilha de circuito integrado iria dobrar a cada dois anos. Esta afirmação posteriormente tornou-se a “Lei de Moore”, onde a densidade de transistores dobra a cada 18 meses. Infelizmente esta “explosão demográfica” de transistores não mais fornece os aumentos proporcionais na performance computacional. As razões são bem conhecidas. O excesso de componentes causa problemas em conexões e na velocidade de comunicação. Desenhos com um núcleo único tornaram-se muito complexos e extremos produtores de calor. Além disso, a arquitetura da CPU é baseada em uma execução serial, o que torna extremamente difícil extrair algum tipo de paralelismo das aplicações atuais. Os recentes lançamentos com núcleo duplo, ou quádruplo, mostram o beco sem saída da tecnologia atual. E cada vez mais as empresas e os usuários utilizam-se da computação para a análise de dados e por sua vez estes dados tornam-se cada vez maiores e envolvem análises cada vez mais complexas. Esta demanda crescente por capacidade computacional impulsiona o desenvolvimento de clusters de baixo custo com interoperabilidade com aplicações comuns como Excel e o SQL Server, tornando transparente a utilização da computação de alta performance.


O Windows Compute Cluster Server 2003 (WCCS)

Este produto foi lançado para atender esta crescente demanda. Baseado na plataforma Microsoft® Windows Server ™2003 x64, Standard ou Entreprise Edition, ele permite a rápida e fácil implantação e construção de clusters computacionais.
Para termos uma idéia de como podemos interagir com o produto, vamos utilizar o seguinte diagrama:


imagem1.png

Figura 1. Exemplo de topologia do WCCS


O equipamento denominado Nó Principal é o responsável pelo agendamento e controle do processamento. Este controle envolve a distribuição e alocação dos recursos disponíveis nos equipamentos denominados Nó de Computação. As tarefas são executadas nestes nós, sendo que o controle e comunicação com os clientes é sempre realizado através do Nó Principal. Estas tarefas podem ser submetidas ao cluster de diferentes maneiras: via linha de comando, via o gerenciador de trabalhos e tarefas no Nó Principal, ou programáticamente. O trabalho de mais simples execução é o denominado serial, ou seqüencial. O cluster permite outros tipos de trabalho como workflow, paramétrico, varredura e paralelo.

Uma das características principais do WCCS é a sua integração com o AD (Active Directory) para a implementação da segurança e validação de acesso aos recursos disponíveis e execução das tarefas.
Para maiores informações sobre a arquitetura e as necessidade de hardware e software para a instalação do cluster sugerimos a leitura do documento Implementação e gerenciamento do Windows Compute Cluster Server.

A interface via CCPAPI.DLL

Para o acesso e controle via programação do cluster iremos utilizar o componente CCPAPI.DLL. Esta DLL permite o acesso direto ao gerenciador do Windows Compute Cluster Server 2003 (WCCS) interagindo via COM, com os diferentes objetos pertencentes ao WCCS.

Através destes objetos poderemos conectar ao cluster e gerenciar os trabalhos, recursos, tarefas, nós, variáveis de ambiente etc. Para obter esta DLL será necessário realizar o download e a proceder com a instalação do Microsoft Cluster Pack SDK (Download do Microsoft Cluster Pack SDK) na estação de desenvolvimento.


O relacionamento entre Trabalho e Tarefa

Uma tarefa representa a execução de um, ou mais de um, processos em um Nó de Computação. A coleção das tarefas utilizadas para realizar uma determinada computação é denominada de trabalho. Os trabalhos são utilizados para reservar, ou alocar, os recursos necessitados pelas tarefas. O trabalho pode ser encarado como o pai de uma tarefa. O seguinte diagrama apresenta o ciclo de vida de um trabalho:


imagem2.png

Figura 2. Ciclo de vida de um trabalho


A função AddJob() envia o trabalho ao cluster,, porém o estado do trabalho, expresso como a enumeration JobStatus, permanece NotSubmitted. As tarefas poderão agora ser adicionadas ao trabalho e então este pode ser submetido ao cluster utilizando a função SubmitJob(). Caso o trabalho tenha sido alocado com sucesso o seu estado altera-se para Queued. Quando os recursos do cluster forem alocados ao trabalho, seu estado transita para Running. Quando um trabalho está completo, os recursos alocados serão liberados e o estado altera-se para Finished, Failed, ou Cancelled.

O seguinte diagrama ilustra o ciclo de vida de uma tarefa, imposto pelo ciclo de vida do trabalho pai que a originou:


imagem3.png

Figura 2: Relacionamento tarefa-trabalho


As tarefas que estão associadas a um trabalho estarão Queued ou Submitted, quando o trabalho pai estiver em alguns destes estados. Quando os recursos são alocados a uma tarefa, o seu estado, expresso como a enumeration TaskStatus, altera-se para Running. Quando a tarefa for completada os recursos a ela alocados serão liberados e seu estado altera-se para Finished, Failed, ou Cancelled.


Desenvolvendo a aplicação

Iremos escolher no Visual Studio 2005 a seguinte configuração de projeto:

imagem4.png

O Visual Studio irá criar a aplicação base chamada InterfaceCCS. Para podermos utilizar dll que faz a interface do cluster devemos criar uma referência ao arquivo CCPAPI.DLL. Abra o Solution Explorer e clique com o botão direto do mouse no nome do projeto InterfaceCCS:

imagem5.png

Na tela a seguir iremos navegar até o diretório aonde a CCPAPI.DLL foi instalada. O diretório padrão desta instalação é “C:\Arquivos de Programas\Microsoft Compute Cluster Pack\bin”. Vamos inclui-la como referência:

imagem6.png

Agora passamos a construir um formulário com a seguinte interface. Contemplando as informações de login no cluster e qual a tarefa que iremos executar. Observe que a tarefa será especificada como uma linha de comando, ou seja o nome de um arquivo executável seguido ou não de parâmetros:

imagem7.png

Para podermos declarar os objetos expostos pela CCPAPI devemos inserir a seguinte linha no início do código :

Imports Microsoft.ComputeCluster


No evento Click do botão de comando iremos declarar os objetos Cluster, Task e Job, permitindo o seu uso no código:

Dim mCluster As New Cluster
Dim mTask As New Task
Dim mJob As New Job


Em seguida vamos estabelecer a conexão com o cluster, invocando o método Connect do objeto Cluster e passando como parâmetro o nome do cluster:

mCluster.Connect(txtNomeCluster.Text)


Agora vamos montar o objeto Trabalho, fornecendo o seu nome, o nome do projeto (opcional) e alguns parâmetros referentes ao número de processadores que estarão disponíveis para o processsamento.

mJob.Name = txtTrabalho.Text
mJob.Project = txtProjeto.Text

mJob.MaximumNumberOfProcessors = 4
mJob.MinimumNumberOfProcessors = 1


Com o objeto montado podemos anexar a tarefa e especificar a linha de comando que será executada no Nó de Computação:

        mTask.Name = "Tarefa"
        mTask.CommandLine = txtLinhaComando.Text
        mTask.MaximumNumberOfProcessors = 1
        mTask.MinimumNumberOfProcessors = 1

        mJob.AddTask(mTask)


Esta última instrução adiciona a tarefa ao trabalho. Em seguida basta submeter o trabalho ao cluster, fornecendo o domínio, usuário e senha. O nome de usuário deverar representar um usuário válido do AD (Active Directory) com permissão suficientes para a execução das tarefas:

mCluster.QueueJob(mJob, txtNomeUsuario.Text, txtSenha.Text, True, 0)



Conclusão

Com este artigo procuramos explorar a interface de programação para submissão de tarefas e trabalhos ao cluster. Em nosso próximo artigo iremos explorar a integração deste código como um add-in no Excel.


Referências

Implementação e gerenciamento do Windows Compute Cluster Server
Windows Server High Performance Computing (em inglês)
Windows Server x64 Editions (em inglês)
Overview of Microsoft Windows Compute Cluster Server 2003 (em inglês)
Windows Server 2003 Deployment Kit: Automating and Customizing Installations (em inglês)
Using the Compute Cluster Server 2003 Job Scheduler (em inglês)
Using Microsoft Message Passing Interface (em inglês)
Migrating Parallel Applications (em inglês)
Debugging Parallel Applications with Visual Studio 2005 (em inglês)

Para obter informações recentes sobre o Microsoft Windows Compute Cluster Server 2003, consulte o site de Computação de alto desempenho da Microsoft em http://go.microsoft.com/fwlink/?LinkId=55599 (em inglês).


Autor: Fábio Cunha
Janeiro de 2007

Leia o artigo em PDF

Last edited Jan 15, 2007 at 3:33 PM by joicekafer, version 8

Comments

No comments yet.