do Arquivo

Transcrição

do Arquivo
Desenvolvimento de Agente Móvel baseado em Java
e MuCode para Ambiente Distribuído Móvel
Marcelo Alves Franco
2
Andrea Mayumi Goyo Fujiyoshi
3
Désiré Nguessan
4
Dorlivete Moreira Shitsuka
5
Ricardo Shitsuka
1
Resumo: Este trabalho tem como objetivo demonstrar que a mobilidade de código é
uma alternativa à implementação de sistemas distribuídos em larga escala. A mobilidade
dos agentes em ambiente distribuído se classifica em: fraca, que não armazena contexto, e
forte, que pode armazenar este. MuCode é uma API (Application Programming Interface)
Java que fornece diversas primitivas de mobilidade: seu projeto é modular com menor
código e suporte à compressão. Essas características favorecem o desenvolvimento
de aplicações para dispositivos pequenos. Nesse contexto, fez-se um estudo para
implementação de agente móvel com objetivo de reproduzir remotamente mídia áudio
armazenada em servidores distribuídos. O resultado obtido é satisfatório, comprovando
a aplicação do MuCode em sistema móvel que emprega dispositivos pequenos de poucos
recursos, como smartphone e PDA-Personal Device Assistant.
Palavras-chave: Agente móvel, MuCode, Mobilidade, Java.
1
Especialista em Capacitação Gerencial pelo Centro Universitário da Fundação Santo André (FSA).
Graduação em Tecnologia Mecânica pela Faculdade de Tecnologia de São Paulo (FATEC-SP) e em Análise
de Sistemas e Tecnologia da Informação pela FATEC – São Caetano do Sul (SP). E-mail: <slutiukg@gmail.
com>.
2
Graduada em Análise de Sistemas e Desenvolvimento de Jogos Digitais pela Faculdade de Tecnologia
(FATEC) – de São Caetano do Sul (SP). E-mail: <[email protected]>.
3
Doutor em Engenharia da Computação pela Escola Politécnica da Universidade de São Paulo (EPUSP).
Mestre em Computação pela mesma instituição. Docente da Faculdade de Tecnologia (FATEC) – de São
Caetano do Sul (SP). E-mail: <[email protected]>
4
Mestre em Ensino de Ciências pela Universidade Cruzeiro do Sul. Especialista em Informática e Educação
pela Universidade Federal de Lavras (UFLA). Licenciada em Computação pelo Claretiano – Centro
Universitário. Tutora na área de Educação a Distância pela mesma instituição – Polo de São Paulo (SP).
E-mail: <[email protected]>
5
Doutor em Ensino de Ciências pela Universidade Cruzeiro do Sul. Mestre em Engenharia pela Escola
Politécnica de São Paulo (EPUSP). Licenciado em Computação pelo Claretiano – Centro Universitário.
Professor Adjunto II e Pesquisador na Universidade Federal de Itajubá (UNIFEI/Itabira). E-mail:
<[email protected]>
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
125
1. INTRODUÇÃO
Atualmente as pessoas utilizam cada vez mais dispositivos móveis,
incluindo, entre outros, os celulares, iPhones, iPods, tablets etc. Para esses aparelhos, existe a necessidade de aplicações mais flexíveis. Esse fato
fomenta a criação de mobilidade em aplicações, que podem ser classificadas como mobilidade lógica ou mobilidade de código. Essas aplicações
consistem em softwares que são transferidos através de uma rede, sendo
executados automaticamente em seu destino. A mobilidade é a principal
característica dos agentes móveis, podendo ser classificadas como mobilidade forte e mobilidade fraca.
Na mobilidade forte, o agente é capaz de armazenar o contexto de
execução, permitindo que o agente comece sua execução pela instrução
seguinte àquela em que foi interrompida. Na mobilidade fraca, o agente
não armazena o contexto de execução, fazendo com que seja executado do
início, cada vez que ele é movido (VELLOSO et al., 2005). A mobilidade de código é uma abordagem alternativa à implementação de sistemas
distribuídos. Ela apresenta diversas vantagens em relação às tradicionais
arquiteturas cliente/servidor, trazendo maior flexibilidade e reduzindo o
consumo de banda (SILVA; DELAMARO; ARAÚJO, 2005).
Este trabalho busca apresentar a implementação de um agente móvel
baseado em Java e MuCode (NGUESSAN, 2009; PICCO, 2000) para
reproduzir remotamente uma mídia áudio armazenada em servidores distribuídos em ambiente heterogêneo. O objetivo é provar a aplicação do
Mucode em sistema distribuído móvel de larga escala com uso de dispositivos pequenos de pouco recurso computacional.
2. AGENTES MÓVEIS
Os agentes móveis são aqueles que possuem a capacidade de mover-se através da rede. Devem possuir habilidades para executar operações
em qualquer máquina preparada para recebê-los dentro da rede, independente da plataforma utilizada (PEREIRA, 2001, p. 14). Segundo Silva
126
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
(1999), “[...] os agentes móveis são freqüentemente chamados de agentes
autônomos, devido à capacidade de executar tarefas independentemente
da disponibilidade ou controle do sistema de origem”.
As vantagens dos agentes móveis em relação à abordagem cliente/
servidor são diversas: por serem leves, economizam espaço de armazenamento e geram menor tráfego de rede se comparados a aplicações comuns;
permitem serem executados de modo assíncrono independente da disponibilidade da origem; operam em diversos tipos de ambientes heterogêneos sem sofrer distorções de implementação; são robustos e permitem
extensibilidade em tempo real (NGUESSAN, 2009). Outra vantagem
que merece destaque é sua usabilidade como ferramenta para se adaptar
às mudanças no ambiente operacional. As aplicações podem usar informações on-line sobre seu ambiente operacional e conhecer os requisitos
necessários para uso de seus recursos, tomando a decisão correta de onde
posicionar os dados e a computação. Como exemplo, pode-se citar uma
aplicação de videoconferência sobre a internet, em que o uso de agentes
móveis é capaz de minimizar o tempo de resposta, posicionando o servidor de acordo com a localização de seus usuários.
A computação móvel é um passo adiante na descentralização promovida por sistemas distribuídos, pois permite que uma grande variedade
de dispositivos coopere para estabelecer uma rede dinâmica. Dentro desse
contexto, surgiram as mobile code languages (MCLs), que fornecem diferentes graus de mobilidade para suas execution units (EU) e, sobretudo, a
necessidade de middleware especifico (MARTINI; NGUESSAN, 2008).
Os sistemas de celulares são sistemas distribuídos onde existe algum
processamento local e a complexidade no trabalho com esses sistemas
pode ser diminuída pelo uso dos middlewares.
3. MIDDLEWARE PARA AGENTE MÓVEL
MuCode é uma API (Application Programming Interface) Java que
fornece várias primitivas de mobilidade de código, tendo como suas prin-
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
127
cipais características: código pequeno, que proporciona uma execução
leve, projetado modularmente com suporte a vários métodos de realocação de classe e a compressão.
As vantagens da utilização do MuCode são diversas: minimização,
com um conjunto mínimo de primitivas e abstrações; extensibilidade,
pois não requer processamento adicional significativo em relação à máquina virtual e flexibilidade, permitindo seleção de diferentes estratégias
para o mesmo código em diferentes situações. Porém, essa API possui as
seguintes limitações: suporte apenas para mobilidade fraca e nenhuma
forma de comunicação direta entre dois threads móveis; entretanto, através do uso de uma estrutura de dados compartilhada, essa limitação pode
ser suprida (NGUESSAN, 2009).
As operações básicas fornecidas pelo MuCode permitem a criação e
cópia de objetos threads em MuServers remotos e a realocação de classes
entre MuServers. Um MuServer é uma abstração para suporte run-time
e representa um ambiente computacional para “threads” móveis. Em
MuCode, as classes são recebidas por um MuServer que geram threads,
mantidas em um espaço de classes privativas, para evitar conflitos de nomes com outras classes locais. A extração das classes é feita pelo “group
handler”. De modo geral, a API é composta por uma série de funções
acessíveis somente por programação. A Figura 1 mostra a arquitetura do
Mucode.
Figura 1: Camada do MuCode.
128
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
Fonte: (PICCO, 2000).
Uma das grandes vantagens da arquitetura apresentada na Figura 2
é que ela permite que o programador se preocupe somente com o desenvolvimento de seus agentes, deixando a mobilidade sob responsabilidade
do MuCode.
O funcionamento da API é simples: a unidade de migração do
MuCode é um grupo (Group) composto por um conjunto de classes e
objetos, como o GroupHandler; MuConstants; ClassSpace; Group;
MuClassLoader; MuServer; DuplicateClassException e MuCodeException
(PICCO, 2000).
“Group handler” tem a tarefa de extrair as classes para uma área
adequada (Class Space). Após a classe ter sido alocada no servidor, é
possível que o agente carregue essa nova classe e a utilize, sendo esta
transferida por outro agente que alocou a classe no “Class Space”
do MuCode, permitindo que outro agente possa acessá-la, conforme
pode ser observado na Figura 2.
Figura 2: Ambiente de Execução de um Agente Mucode.
Fonte: (PICCO, 2000).
A classe MuServer fornece as abstrações necessárias para um servidor, e coleciona todos os métodos necessários para a mobilidade de código.
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
129
4. IMPLEMENTAÇÃO
O desenvolvimento foi realizado inhouse com uso da metodologia
ágil do tipo SCRUM, na qual há o desenvolvimento do trabalho em sprints
e com reuniões diárias entre os envolvidos no projeto (IBM, 2013).
Foram divididas as tarefas e nomeado o scrum master.
O desenvolvimento por meio do scrum conta com:
1) Transparência: no planejamento e desenvolvimento com discussões diárias de status com a equipe e reuniões freqüentes
com os stakeholders (todos os envolvidos no processo) para
monitorizar o progresso; Transparência com os resultados resultantes da execução dos sprints.
2) Clientes se tornam parte da equipe de desenvolvimento;
3) O conteúdo de cada sprint é extraído de uma lista ordenada/
priorizada de requisitos do cliente/usuário (product backlog).
4) Framework que permite entregar um “valor de negócio” mais
elevado em um período de tempo mais curto.
5) Satisfação do cliente: Nossa maior prioridade é satisfazer o
cliente através da entrega contínua e adiantada de software
com valor agregado.
6) Mudanças nos requisitos são bem-vindas, mesmo tardiamente
no desenvolvimento. Processos ágeis tiram vantagem das mudanças visando vantagem competitiva para o cliente.
7) Entrega rápida entregar freqüentemente software funcionando,
de poucas semanas a um mês em ciclos denominados sprints,
garantem um maior controle sobre os riscos. Apenas funcionalidades 100% desenvolvidas são entregues.
8) Inspeção: Inspeções freqüentes do processo
9) Feedback: Problemas não são ignorados e ninguém é penalizado por reconhecer ou descrever qualquer problema não visto;
10) Adaptação: possibilidade de ajustar o processo ou o material
processado (IBM, 2013).
130
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
Trabalhou-se o projeto de desenvolvimento do software utilizando
as características do scrum para se organizar a equipe e ter uma comunicação mais rápida. Outra metodologia de desenvolvimento ágil é o extreme
programming na qual se trabalha com equipes pequenas, trabalho rápido
e padronização do código (TELES, 2004).
O trabalho com as duas metodologias, o scrum e o extreme
programming, possibilitou a realização do desenvolvimento de software
de modo muito rápido, porém sem muita documentação, como é característica do extreme programming.
Iniciou-se a criação de uma classe denominada Mservidor, responsável por receber e executar os agentes em seu espaço de classes compartilhadas. A classe Mservidor é uma extensão da classe Muserver, como mostra
a Figura 3.
A proposta deste trabalho é implementar uma aplicação de agentes
móveis baseada no MuCode e na tecnologia Java. Foram utilizados os conceitos abordados nas seções 2 e 3. O bytecode de uma classe foi migrado
de uma estação para outras estações. A classe transmitida pelo agente é
responsável por executar uma mídia áudio. O desenvolvimento ocorreu
em ambiente Windows utilizando a IDE Eclipse SDK 3.5.2 e o Java
(SourceForge).
Figura 3: Diagrama de classe do servidor.
Fonte: (PICCO, 2000).
Uma parte de código-fonte da implementação da classe servidor é
exibida no Quadro 1:
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
131
Quadro 1: Código fonte.
Fonte: Arquivo pessoal.
O trecho servidor.getSharedClassSpace().list()[0] busca a lista de nomes das classes que estão compartilhadas no espaço de classes do servidor
MuCode; o índice [0] traz o primeiro item da lista.
Após o desenvolvimento do servidor, necessitou-se implementar o
agente responsável pela execução de tarefa em servidor remoto (Mservidor).
O diagrama de classes apresentado na Figura 5 mostra uma parte do relacionamento entre o agente o servidor.
132
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
Figura 5: Diagrama de classe do agente.
Fonte: Arquivo pessoal.
O objeto “Relocator” fornece algumas abstrações para lidar com o
deslocamento de classes e segmentos de nível mais elevado do que o permitido pelas primitivas fornecidas no pacote MuCode. Ele ainda depende
de um MuServer, que é de fato determinado no momento da criação.
As ações previstas pelo “Relocator” são representadas em termos de
transporte e manuseio de classes. Na verdade, a semântica das operações
do objeto do “Relocator” é parcialmente implementada nessa classe (que
gerencia a criação e envio de classes) e em parte pela classe “RelocationHandler”
(que gerencia a movimentação do grupo no destino). Ademais, o efeito
dessas operações podem ser obtidas pelo programador usando apenas os
conceitos previstos pelo pacote MuCode. No entanto, o objeto “Relocator” fornece um conjunto de primitivas mais razoáveis para o programador da aplicação.
É possível, através do método “ShipClasses”, transportar uma classe
para o servidor de destino apenas informando o endereço do servidor
(nesse caso, no “localhost”) e a classe a ser transportada. A classe
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
133
“ClassInspector”, com o auxílio do método “getClassClosure”, é responsável
pela busca dessa classe.
O Quadro 2 ilustra a execução do servidor aguardando a chegada
do agente no seu espaço compartilhado. Uma vez nesse espaço, o agente é
executado conforme ele foi programado.
Quadro 2: Resultado da execução das classes MServidor e MInjetor.
Fonte: Arquivo Pessoal.
A mídia reproduzida pode estar inicialmente armazenada no servidor distribuído ou injetado no espaço de classes compartilhadas do
servidor MuCode, podendo ser acessada por qualquer outro agente. O
desenvolvimento ocorreu de modo tranquilo, sem incidentes e com a participação e apoio dos envolvidos.
134
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
5. CONSIDERAÇÕES FINAIS
Foi comprovado, por meio dessa aplicação, que o MuCode fornece
suporte para o desenvolvimento de sistemas distribuídos. Na aplicação desenvolvida, tivemos livre controle sobre o “caching” dos objetos através de
“private class space” e “shared class space”, permitindo ao usuário desenvolvedor o monitoramento do espaço compartilhado pelos agentes móveis e
uma flexibilidade de programação.
Foram simulados múltiplos servidores em uma mesma máquina,
criando um ambiente distribuído de larga escala. O MuCode fornece também uma arquitetura pronta para trabalhar com mobilidade fraca de código, porém ela não foi explorada neste trabalho.
Foi concluído que o MuCode pode facilitar a implementação de soluções para sistemas distribuídos que dependem de informações descentralizadas e de mobilidade. O resultado obtido confirma as abordagens
feitas no trabalho de tese (NGUESSAN, 2009).
O desenvolvimento de software necessita de algum tipo de metodologia. O uso do scrum associado à extreme programming facilitou a realização dos trabalhos de desenvolvimento num prazo relativamente rápido.
Para futuros trabalhos, pretende-se essa proposta de sistema distribuído baseado em agentes móveis para atualização automática de jogos
digitais para celulares, e plataformas de video game, como Playstation 3 e
Xbox.
REFERÊNCIAS
IBM. O mundo depende de software. Scrum: basicamente scrum. Disponível em:
<https://www.ibm.com/developerworks/community/blogs/rationalbrasil/entry/
scrum_basicamente14?lang=en>. Acesso em: 01 ago. 2013.
MARTINI, J. S. C.; NGUESSAN, D. Study and implementation of a solution to
security Management for Mobile Environments Based on Tuple. icycs. In: The 9th
International Conference for Young Computer Scientists, p. 2014-2020, 2008.
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
135
NGUESSAN, D. Um modelo de gerência para Middleware baseado em Tuple
para ambientes difusos e nômade. Tese de Doutorado. São Paulo, POLI/USP, 2009.
Disponível em: <http://www.teses.usp.br/teses/disponiveis/3/3141/tde-21012010171918/pt-br.php>. Acesso em: 03 abr. 2010.
PEREIRA FILHO, S. F. Avaliação de ambientes servidores para agentes móveis.
Dissertação de Mestrado. São Carlos, ICMC/USP, 2001. Disponível em: <http://www.
teses.usp.br/ teses/disponíveis/55/55134/tde-08022002-173805/>. Acesso em: 03 abr.
2010.
PICCO, G. P. MuCode. 2000. Disponível em: <http://mucode.sourceforge.net>.
Acesso em: 01 jun. 2010.
SILVA, F. M. A. Agentes móveis. Disponível em: <http://www.lasid.ufba.br/
publicacoes/cursos/sbc_wh.ps>. Acesso em: 03 abr. 2010.
SILVA, L. S.; DELAMARO, M. E.; ARAÚJO, R. F. Segurança de código móvel no
ambiente MuCode. In: V SIMPÓSIO BRASILEIRO EM SEGURANÇA DA
INFORMAÇÃO E DE SISTEMAS COMPUTACIONAIS. Florianópolis, 2005.
Anais..., 2005, p. 279-282. Disponível em: <http://rfaraujo.googlepages.com/sdasamam.pdf>. Acesso em: 03 abr. 2010.
SOURCEFORGE. Application programming interface. Disponível em: <http://
mucode.sourceforge.net/docs/api/index.html>. Acesso em: 01 jun. 2010.
_______. API - JavaDoc. Disponível em: <http://downloads.sourceforge.net/project/
mucode/_Code%20Latest%20JAR/1.03/mucode.jar?use_mirror=ufpr>. Acesso em:
01 jun. 2010.
TELES, V. M. Extreme programming. São Paulo: Novatec, 2004.
VELLOSO, P. B. et al. Uma ferramenta de gerenciamento de redes baseada em agentes
móveis. 2005. Disponível em: <http://www.gta.ufrj.br/ftp/gta/TechReports/VRD02.
ps.gz>. Acesso em: 03 abr. 2010.
136
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
Title: Development of Java-based mobile agent and MuCode distributed environment
for mobile.
Authors: Marcelo Alves Franco. Andrea Mayumi Goyo Fujiyoshi. Désiré Nguessan.
Dorlivete Moreira Shitsuka. Ricardo Shitsuka.
Abstract: This work aims to demonstrate that the mobility of code can be an
alternative for the implementation of large-scale distributed systems. Mobility, being
the main feature of mobile agents, is classified as low mobility (not store context) and
strong (capable of storing context). The MuCode is an Application Programming
Interface (API) that provides various Java primitives of mobility and has among its
main characteristics: small code, modular design and support compression. These
characteristics favor the development of applications for devices of small sizes. In this
context, a study is made to implement a mobile agent for remote playback of audio
media stored in distributed servers. The result is satisfactory proving the application of
MuCode in mobile distributed system that employs small devices like smart phone and
Personal Device Assistant.
Keywords: Mobile agent. MuCode. Mobility. Java.
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013
137
138
Linguagem Acadêmica, Batatais, v. 3, n. 2, p. 125-137, jul./dez. 2013