Aplicações Distribuídas Baseadas em Trabalho Cooperativo com JavaSpace

Texto

(1)

Resumo-- Sistemas distribuídos/paralelos permitem que diferentes equipamentos possam ser interligados para realizar uma determinada tarefa em conjunto. Este artigo aborda o desenvolvimento de aplicações distribuídas baseadas em trabalho cooperativo com a tecnologia Jini/JavaSpaces, uma extensão da linguagem Java que permite a criação de repositórios de objetos distribuídos através de redes de computadores. Também é dada uma breve descrição da implementação de um protótipo e dos resultados obtidos. O foco principal do trabalho relatado, neste artigo, foi a avaliação da tecnologia JavaSpace como mecanismo de suporte às aplicações acima mencionadas, tendo sido analisados itens como: escalabilidade, balanceamento de carga, overhead, estabilidade e complexidade de desenvolvimento.

Palavras-Chave-- JINI, Javaspaces, Escalabilidade, Sistemas Paralelos/Distribuídos.

I. CONSIDERAÇÕES INICIAIS

m um ambiente distribuído, máquinas possuem configurações diferentes, rodam sistemas operacionais diferentes e possuem arquiteturas diferentes. Estes aspectos dificultam o desenvolvimento de aplicações distribuídas.

Utilizando Java, estes problemas são, quase em sua totalidade, resolvidos automaticamente, devido à independência de plataforma, o que faz com que esta linguagem possa ser usada na implementação dos mais variados tipos de aplicações.

O desenvolvimento de aplicações paralelas baseadas em agentes cooperantes distribuídos em uma rede de computadores possui dois momentos distintos, mas igualmente importantes e altamente interligados: a definição da estrutura de suporte ao processamento paralelo cooperante e a estruturação dos dados e algoritmos de modo a permitir o paralelismo cooperante.

O trabalho cooperante caracteriza-se como uma das formas de promover o paralelismo na execução de uma determinada tarefa. O ponto forte do processamento cooperante consiste no aumento transparente do poder computacional, uma vez que os nós podem ser adicionados e removidos sem grandes traumas ao sistema. Estas características fazem com que o processamento cooperante possa ser empregado a uma vasta gama de problemas.

1 Docente junto ao Centro Federal de Educação Tecnológica do Paraná (CEFET-PR), unidade de Medianeira, Curso Tecnologia em Informática (e- mail: vilson@md.cefetpr.br).

2 Docente junto ao Centro Federal de Educação Tecnológica do Paraná (CEFET-PR), unidade de Medianeira, Curso Tecnologia em Informática(e- mail: jmartins@md.cefetpr.br).

Abordando este contexto, o presente artigo está estruturado em 6 seções. Inicialmente é realizada uma introdução sobre a temática discutida. A seção II apresenta os conceitos e as principais características dos Sistemas Distribuídos. A tecnologia Jini é apresentada na seção III. As seções IV e V apresentam, respectivamente, o protótipo implementado e as considerações quanto aos resultados obtidos. Na última seção (VI) são apresentadas as considerações finais.

II. SISTEMAS DISTRIBUÍDOS

De acordo com [1], [3] e [9], um sistema distribuído caracteriza-se pela interconexão de vários computadores autônomos e possivelmente heterogêneos que, sob o controle de um software específico, fornece ao usuário a imagem de um sistema único e que deveria possuir, dentre outras, a seguintes características: compartilhamento de recursos, escalabilidade, tolerância a falhas e heterogeneidade.

Uma característica importante de um sistema distribuído é a heterogeneidade, ou seja, a existência de computadores heterogêneos conectados no mesmo sistema. A heterogeneidade pode ser dividida em dois níveis:

heterogeneidade configuracional, isto é, computadores de igual arquitetura, mas com diferentes capacidades em termos de recursos (quantidade de memória, velocidade do processador, etc.); e heterogeneidade arquitetural, isto é, computadores de diferentes arquiteturas [10].

Para [5] e [7], sistemas distribuídos podem ser utilizados em uma grande gama de aplicações, tanto em ambientes comerciais quanto acadêmicos, e podem ser implementados desde redes locais (LAN) até redes metropolitanas (MAN).

Dentre estas várias possibilidades, uma abordagem bastante utilizada nos dias atuais consiste na utilização de sistemas distribuídos para a execução de aplicações paralelas, permitindo que instituições que não dispõem de um computador paralelo possam construir e executar algoritmos paralelos. Assim, estas instituições conseguem atingir o grande objetivo do processamento paralelo/distribuído, isto é, aumentar o desempenho de aplicações que necessitam de maior poder computacional e que são pouco eficientes quando executadas seqüencialmente. Para tanto, o aumento de desempenho é obtido particionando-se uma tarefa em tarefas menores e executando-as em diferentes processadores, paralelamente.

Conforme exposto por [1], [3] e [9], os sistemas computacionais distribuídos apresentam uma série de características que podem torná-los atrativos quando

Aplicações Distribuídas Baseadas em Trabalho Cooperativo com JavaSpace

Vilson L. Dalle Mole1, Humberto M. Beneduzzi, Jefferson G. Martins2

E

(2)

comparados às máquinas paralelas convencionais ou aos sistemas centralizados. Estas características, dentre as quais pode-se citar a disponibilidade, a confiabilidade, a expansibilidade, a tolerância a falhas, a transparência, a concorrência, o compartilhamento de recursos e um possível aumento de desempenho, têm levado a um crescente uso de sistemas de computação paralela e distribuída em uma vasta gama de aplicações.

Sobre os sistemas distribuídos, [6] afirma que estes

“possuem um grande potencial de desempenho para diversos tipos de aplicações, mas trazem junto a esse potencial uma grande dificuldade para o escalonamento dos processos nos diversos (e possivelmente heterogêneos) processadores, de maneira que se consiga uma utilização eficiente do sistema computacional disponível".

Desta forma, um dos fatores mais importantes na implementação de um sistema distribuído consistem no balanceamento de carga, isto é, fazer com que o servidor consiga definir de forma correta a quantidade de trabalho a ser enviada a cada nó de processamento. Esta tarefa se torna mais complexa à medida que aumenta a heterogeneidade dos equipamentos, tornando-se necessário, muitas vezes, diagnosticar a configuração de cada nó de processamento para poder realizar um balanceamento de carga mais adequado.

Propiciar o bom nível de aproveitamento dos recursos de cada máquina é uma característica desejável em qualquer sistema distribuído.

III. JINI

Conforme definido anteriormente, um sistema distribuído caracteriza-se como “uma coleção de computadores autônomos, ligados por uma rede, com software projetado para produzir uma facilidade de computação integrada” [3].

Segundo [8], Jini oferece um serviço de rede distribuído robusto e também dinâmico, escalável e tolerante a falhas.

Devido à independência de plataforma proporcionada pela linguagem Java, a tecnologia Jini não exige a existência de um sistema operacional, processador ou ambiente de desenvolvimento específico, sendo fundamentalmente um Sistema Distribuído, sem depender de qualquer servidor central.

No Modelo de Transações Jini, a falha de um dispositivo não afeta os demais, o que ajuda a construir aplicações distribuídas que operam corretamente na presença de falhas parciais. Ainda segundo [8], Jini é um framework para construir sistemas distribuídos escaláveis e robustos. Este consiste em um conjunto de especificações descrevendo o modelo de operações para uma “rede Jini”3.

A. JavaSpaces

JavaSpaces teve origem no início da década de 1998, na Universidade de Yale, EUA, e caracteriza-se como um repositório de objetos com um número reduzido de operações simples, podendo ser facilmente empregado na construção de

3 Uma rede Jini é uma rede de muitas federações. (Sing Li et al., 2000)

aplicações distribuídas e evitando muitas das armadilhas que podem surgir na construção de sistemas distribuídos [2].

Neste modelo, os dados são desacoplados de um processo particular, conforme ilustrado na Figura 1. Os dados são representados como uma coleção de objetos que podem ser acessados e alterados remotamente por processos concorrentes, como mostra a Figura 2, não existindo um processo central responsável pelo gerenciamento do acesso aos objetos.

JavaSpaces é um serviço da tecnologia Jini, baseado em um simples conceito de compartilhamento: locais acessíveis através da rede, que servem como áreas de armazenamento e troca de objetos. Em uma aplicação distribuída, JavaSpace atua como um espaço virtual entre provedores e requisitantes de recursos de rede ou objetos, o que permite que participantes em soluções distribuídas troquem tarefas, requisições e informações na forma de objetos Java.

Figura 1. Modelo baseado em espaços.([2])

A construção de aplicações distribuídas geralmente envolve a troca de mensagens entre processos ou invocação de métodos em objetos remotos. Nas aplicações baseadas em JavaSpaces, os processos não se comunicam diretamente entre si. Ao invés disso, coordenam suas atividades pelo intercâmbio de objetos através dos JavaSpaces com operações de escrita (write), leitura (read) e pegar (take). Conforme exposto anteriormente, estas operações de leitura e escrita são realizadas de forma concorrente, sendo que a sincronização do acesso aos objetos do espaço é garantida pela própria API JavaSpace.

Em uma aplicação baseada em JavaSpaces, cada computador participante procura uma tarefa no espaço, remove-a, realiza o trabalho computacional necessário e devolve o resultado ao espaço. Depois disso, a máquina volta a procurar por mais tarefas no espaço e pode ficar aguardando até que estas cheguem. A Figura 2 representa 2 JavaSpaces e um conjunto de processos realizando trabalho cooperativo.

(3)

Figura 2. Processos usam os JavaSpaces para Coordenar suas Atividades (Sun Microsystems, Inc.)

Com a aplicação de JavaSpaces, a escalabilidade também é totalmente transparente e natural, pois pode-se adicionar ou remover os TRABALHADORES a qualquer momento. Deste modo, os procedimentos executados serão os mesmos, independente de existirem 5 ou 500 computadores atuando como nós de processamento.

IV. O PROTÓTIPO IMPLEMENTADO

O protótipo implementado constitui-se de um sistema distribuído de quebra de senhas pelo método de força bruta.

As senhas foram geradas através do baseia-se no Standard Hash Algorithm No1 (SHA1), desenvolvido pela NIST4 em cooperação com a NSA5. O SHA1 é um algoritmo baseado em hash unidirecional, assim o método de força bruta é aplicado gerando-se um hash de cada possibilidade e comparando este com o hash posto para quebra.

A arquitetura do sistema é mostrada na Figura 3, a seguir.

O processo SUPERVISOR coordena o trabalho e reside na máquina onde está implementado o serviço JavaSpace.

Inicialmente o SUPERVISOR gera um lote de tarefas, as escreve no espaço e, posteriormente, prossegue gerando novas tarefas, à medida que os TRABALHADORES as consomem, obedecendo ao critério de produtor/consumidor. Cada tarefa contém informações fracionadas sobre a faixa de pesquisa a ser realizada por um nó naquele momento. Uma segunda classe chamada ListenerSupervisor efetiva a vigilância pelo retorno das tarefas já processadas. Estas possuem um atributo específico que identifica se a senha foi ou não encontrada.

Os TRABALHADORES monitoram o espaço à espera de tarefas, quando estas se tornam disponíveis, cada TRABALHADOR assume uma tarefa, processa e devolve ao espaço na forma de tarefa processada. Uma tarefa com o atributo finalizar com valor true indica ao TRABALHADOR que o mesmo pode encerrar suas atividades.

4 NIST – National Institute of Standards and Technology (EUA).

5 NSA – National Security Agency (EUA).

Figura 3. Interação entre o Processo SUPERVISOR e os TRABALHADORES (Sun Microsystems, Inc.)

Essa arquitetura notadamente promove o desacoplamento entre os elementos de processamento, pois a falha de um nó não interfere no processo como um todo. No entanto, uma falha no SUPERVISOR causa uma falha geral. Por outro lado, a entrada ou saída de um nó de processamento é transparente ao SUPERVISOR que não toma conhecimento de quantos nós estão ativos no momento.

V. RESULTADOS

Os testes foram realizados sobre senhas com 5 caracteres de comprimento, sendo que o conjunto de caracteres aceitos varia de 097 ( ‘a’ ) à 122 ( ‘z’ ) na tabela ASCII. Para esse conjunto o número de arranjos possíveis é de 11.881.376.

Os tempos foram contabilizados através do relógio da máquina servidora. No momento anterior à inserção do primeiro objeto no espaço, marca-se o instante de início e no momento que o listenerSupervisor sinaliza a chegada de uma tarefa processada com a indicação de quebra da senha marca- se o instante de término. O tempo total de processamento foi calculado multiplicando-se o tempo de quebra da senha pelo número de TRABALHADORES instanciados. Assumiu-se como overhead a diferença resultante entre o tempo total de processamento distribuído e o tempo total de processamento local. Os tempos obtidos são apresentados na Tabela 1 e na Figura 4, a seguir.

TABELA 1

TEMPOS DE PROCESSAMENTO OBTIDOS

(4)

Comparativo do Tempo de Execução

0 1000 2000 3000 4000 5000

local 1 2 5 10 20

Número de Nós

Tempo (s)

Tempo Tempo Total

Figura 4. Tempos Totais de Processamento Obtidos

A análise dos resultados demonstra que o overhead gerado pela distribuição das tarefas através do espaço não é significativo, se comparado ao ganho de desempenho proporcionado pelo processamento paralelo. Os testes realizados apresentaram a curva de overhead apresentada na Figura 5.

Curva de Overhead

1,01%

3,07%

5,13%

7,76%

10,99%

0%

2%

4%

6%

8%

10%

12%

0 5 10 15 20

Número de Nós

Overhead

Figura 5. Curva de Overhead

No entanto, pode-se observar, na Figura 6, que o ganho de performance é diretamente proporcional ao número de nós.

Ganho de Performance

1,0 1,0 1,9

4,8 9,3

18,1

0 4 8 12 16 20

local 1 2 5 10 20

Número de Nós

Performance

Figura 6. Ganhos de Performance

Considerando o tempo ( tl ) necessário para a quebra de uma senha com processamento local, o tempo ( td ) no ambiente distribuído é dado por:

onde:

od é o overhead de distribuição;

nt é o número de trabalhadores.

Tomando a expressão acima para o cálculo do tempo no ambiente distribuído, pode-se inferir que uma senha que levaria 70 horas para ser quebrada com processamento local, poderia ser encontrada em aproximadamente 3h:53min em um ambiente com 20 TRABALHADORES.

VI. CONSIDERAÇÕES FINAIS

A utilização de JavaSpaces elimina a complexidade de construir mecanismos de controle, bem como de balanceamento de carga. Este último é realizado naturalmente, à medida que o TRABALHADOR, e não o SUPERVISOR, é o responsável por determinar qual é o momento de adquirir nova tarefa.

A escalabilidade é transparente, sendo possível adicionar ou remover um ou mais nós a qualquer momento, mesmo com o processamento em andamento.

O overhead gerado pelo fluxo de objetos através da rede varia de acordo com o tamanho de cada objeto, a freqüência com que cada nó lê e escreve objetos no espaço e o número de nós ativos na rede.

Com os testes realizados é possível afirmar que JavaSpaces apresenta-se como uma ótima opção de suporte à comunicação em aplicações distribuídas baseadas em trabalho cooperativo, reduzindo o tempo de desenvolvimento e proporcionando boa performance.

VII. REFERÊNCIAS

[1] A. S. Tanembaum, “Sistemas Operacionais Modernos”. São Paulo: LTC, 1999.

[2] E. Freeman, S. Hupeer, K. Arnold. “JavaSpaces Principles, Patterns and Practice”. Addison-Wesley, 1999.

[3] G. Coulouris, J. Dollimore, T. Kindberg. “Distributed Systems Concepts and Design”. 2nd. Ed. Addison-Wesley, 1994.

[4] H. M. Deitel, P. J. Deitel. “Java – Como Programar”. 3th Ed. Bookman, 2001.

[5] M. A. Souza, “Avaliação das Rotinas de Comunicação Ponto-a-Ponto do MPI”. Dissertação de Mestrado – Instituto de Ciências Matemáticas e de Computação, USP, São Carlos, 1997.

[6] M. A. Souza, “Análise de Técnicas de Monitoração e Métricas de Desempenho para a Avaliação do Escalonamento de Processos”. Tese de Doutorado – Instituto de Ciências Matemáticas e de Computação, USP, São Carlos, 2001.

[7] O. A. McBryan. (1994) Technological Report: An overview of message passing Environments. Dept. of Computer Science, University of

Colorado. [Online] Disponível:

http://citeseer.nj.nec.com/mcbryan94overview.html.

[8] S. Ling. “Professional Jini”. Wrox Press, Inc., 2000.

[9] S. Mullender, “Distributed Systems”. 2nd Ed.: Addison-Wesley, 1993.

t d l

d n

t o t = 1+

(5)

[10] S. Zhou, X. Zheng, J. Wang, P. Delisle. Technical Report: Utopia – a Load Sharing Facility for Large, Heterogeneous Distributed Computer Systems. Computer Systems Research Institute, University of Toronto, 1992. [Online] Diponível http://citeseer.nj.nec.com/zhou93utopia.html.

[11] W. K. Edwards. “Core Jini”. 2nd Ed. Book News, Inc., 2000.

Imagem

Referências

temas relacionados :