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