WirelessBR |
WirelessBr é um site brasileiro, independente, sem vínculos com empresas ou organizações, sem finalidade comercial, feito por voluntários, para divulgação de tecnologia em telecomunicações |
|
Pesquisa
e Projeto de uma Aplicação em Computação Móvel para |
||
Autora: Líliam Carla Gaiotto Maluta |
Capítulo 3
Agentes Móveis
A computação móvel requer uma estrutura avançada que integre protocolos de suporte, mecanismos e ferramentas adequadas. Ambientes abertos[1] devem superar a heterogeneidade do sistema e garantir um nível de segurança apropriado. Soluções devem visar garantir a interoperabilidade entre sistemas diferentes e componentes legados.
Muitas propostas sugerem o uso de agentes móveis (SILVA, 1998, SILVA et al, 2001). Por ser capaz de migrar entre as máquinas de uma rede durante sua execução, carregando consigo o seu código e estado (CHESS, 1995, ENDLER, 1998), um agente móvel viabiliza a atualização de ambientes de computação distribuída sem a suspensão dos serviços.
SILVA (2001) define um agente móvel como um agente de software capaz
de transportar-se de uma rede para outra, executar tarefas locais e dependendo
de seus objetivos retornar ou não à origem.
Um agente móvel tem autonomia de
execução e independência quanto à aplicação que o invocou.
Para FERBER (1995) um agente deve ter um objetivo a realizar e uma
representação do mundo, de si próprio e dos outros agentes. Pode criar
novos agentes, cooperar com outros, executar em diferentes plataformas, tomar
decisões e resolver problemas. Segundo GRAY et al (2000) um agente móvel é
um programa executável que pode migrar, no instante em que desejar, entre máquinas
de uma rede heterogênea e interagir com agentes estacionários[2]
e outros recursos para realizar sua tarefa.
Embora existam vários sistemas de agentes móveis e grupos de pesquisa como Telexcript, Odyssey, Voyager, Aglet, D’Agent (Agent Tcl) e muitos outros, agentes móveis não são muito utilizados devido a serem mais úteis em computação móvel, a não existirem aplicações que os requeiram e à maioria dos sistemas serem protótipos.
Realmente, qualquer aplicação pode ser executada com técnicas tradicionais de computação distribuída. Contudo, agentes móveis provêem um framework onde grande quantidade de aplicações distribuídas pode ser implementada de forma fácil, eficiente e robusta, agregando vantagens como:
Economia de largura de banda (redução de tráfego) – agentes migram ao servidor, executam operações necessárias localmente, e retornam apenas o resultado final ao cliente;
Redução no tempo total de conclusão – agentes evitam a transmissão de resultados intermediários;
Redução da latência
– existem situações onde uma aplicação deve reagir rapidamente a
algum evento e retornar seu status ou informação de controle, como em
sistemas de tempo real críticos. Se o componente reativo é um agente móvel,
pode mover-se de um controle central para atuarem localmente, abreviando o
tempo de resposta;
Operação desconectada e computação móvel – dispositivos móveis estão sujeitos a handoffs e a diferentes conexões de rede em termos de largura de banda, latência e confiabilidade. Aplicações cliente-servidor requerem conexão contínua. Agentes móveis podem transferir o código do cliente ao servidor ou proxy, ou vice-versa, filtrar e comprimir dados e implementar consultas persistentes[3];
Balanceamento de
carga – processos implementados como agentes móveis podem migrar
através de plataformas heterogêneas, a fim de gerenciarem recursos
remotos ou mesmo adaptar-se ao ambiente remoto conduzindo a aplicações
distribuídas mais flexíveis. Por outro lado, não permite a migração
de código compilado;
Desenvolvimento dinâmico – se um servidor tradicional não suporta determinadas operações, o cliente deve efetuar várias chamadas a procedimentos remotos e receber resultados intermediários a cada ocorrência. Quando se trata de agentes, operações podem ser implementadas e transferidas ao servidor, onde executa localmente e retorna o resultado ao cliente;
Independência de dispositivo - geralmente dependentes de seu ambiente de execução, mas não do hardware ou software, provendo condições para integração de sistemas abertos;
Encapsulamento de
protocolos - comunicam-se com servidores e outros agentes usando seus
próprios protocolos, o que pode ser constrangido por software legado;
Execução assíncrona e autônoma – operam assincronamente, evitando que a aplicação cliente aguarde para obter os resultados. Uma vez despachados, tornam-se entidades independentes;
Adaptação dinâmica – podem perceber seu ambiente e agir por conta própria para resolver um problema;
Robustez e tolerância à faltas – a habilidade de migrar entre hosts os faz atrativos à implementação de sistemas de tolerância à faltas;
Redução de risco na execução - deixam a decisão sobre a localização do código (Cliente vs. Servidor), para o final da rotina do processo, quando é possível saber mais sobre a finalidade da aplicação.
O fato é que existem muitas aplicações
que são mais adequadas e se beneficiam do paradigma de agentes móveis.
ENDLER (1998) indica algumas aplicações possíveis:
Data mining – busca por informação e correlação entre dados;
Gerencia de redes – monitoramento, filtragem e notificação;
Controle de segurança – monitoramento e notificação;
Ambientes de trabalho cooperativo – coordenação de agendas, troca de documentos;
Processamento paralelo – particionamento e alocação dinâmica de tarefas;
Comércio eletrônico – negociação, transação e busca;
Simulação distribuída – de mercados, trafego;
Entretenimento
– busca de informações, jogos em ambientes virtuais distribuídos.
Segundo JENNINGS (1998), as áreas em que têm ocorrido aplicações utilizando agentes, além das acima citadas, são as de manufaturas, controle de processos, sistemas de telecomunicação, controle de tráfego aéreo, gerenciamento de transporte, gerenciamento empresarial e cuidados médicos.
3.1 Modelo de agentes móveis
Há uma terminologia usada em
sistemas de agentes móveis que engloba conceitos comuns, onde (OMG, 1997):
Agente – é um programa de computação consistindo de código + estado e atributos como identidade localização, autoridade e permissões. Podem ser estacionários ou móveis;
Lugar – é um ambiente lógico de execução, com identidade e autoridade, que disponibiliza um conjunto de recursos;
Autoridade – identificação da pessoa ou organização para a qual o agente age. Deve ser autenticada e autorizada;
Região – é o
domínio administrativo associado a cada lugar. Este conceito permite que
mais de um tipo de agente represente a mesma autoridade;
Deslocamento –
é a transferência do agente entre lugares, ocorrendo apenas quando
existe autorização;
Encontro – interação
entre agentes geralmente localizados no mesmo lugar;
Formas de comunicação
direta – envio de mensagens, eventos assíncronos e chamada de métodos;
Permissões – estabelecimento
das operações permitidas aos agentes e lugares;
Servidor – programa
que executa em cada máquina, tendo a responsabilidade de executar todas
operações pertinentes ao uso de agentes (criação, ativação, transferência,
etc);
Hospedeiro – é
a máquina onde um agente encontra-se em execução;
3.2 Quando usar Agentes Móveis
Mas como agentes móveis vem sendo
usados e para que tipo de aplicações eles são uma boa solução? Algumas
companhias acreditam que agentes podem ser utilizados para automatizar o
gerenciamento e configuração de redes, outras acham-nos mais indicados em
aplicações colaborativas e em redes de baixa confiança. Agentes vêm
apresentar uma enormidade de implementações e soluções, nas mais diversas
áreas.
Em sistemas distribuídos o uso de
agentes pode simplificar a implementação de servidores. A elaboração do
ambiente é centrada no agente, que só precisa ser definido uma única vez. Em
termos de processamento e consumo de largura de banda, o uso de agentes móveis
é justificado quando o custo de algum recurso remoto usando o paradigma
cliente/servidor supera o uso de agentes.
Agentes podem monitorar servidores e tratar quedas e paralisações, realizar
trocas transparentes com servidores de backup ou multiplexação em banco de
dados distribuídos, trabalhando em paralelo num conjunto de servidores.
Finalmente, podem ser removidos se todos os nós da rede pertencem à mesma
LAN e esta não requer o uso de agentes.
Entretanto, um agente móvel nem sempre representa a melhor escolha. Em
algumas aplicações o código do agente pode apresentar-se do mesmo tamanho
que os resultados intermediários, e o agente consumirá mais largura de banda
do que soluções cliente/servidor. Assim, fica claro que agentes devem poder
estimar seu uso potencial de largura de banda e decidir migrar ou interagir
através da rede como se fossem clientes.
Devido a serem escritos
normalmente em linguagens interpretadas, por razões de portabilidade e
segurança, mesmo em redes rápidas podem apresentar má performance. O fato
de transferirem o processamento ao servidor em alguns aspectos é uma
vantagem, mas isto envolve lidar com escalabilidade. À medida que aumenta a
quantidade de clientes, é preciso decidir entre a economia no tempo de
transmissão de rede e o possível tempo extra, esperando por um servidor
abarrotado.
KINIRY
(1997) recai sobre o problema da segurança de rede, como também a representação
do conhecimento e afirma que ainda existem
muitos outros problemas antes que aplicações se tornem comercialmente viáveis.
Java e alguns modelos de segurança têm auxiliado desenvolvedores a
resolverem o problema de agentes danificarem sistemas e redes, como também, a
resguardar o código e estado do agente de seu ambiente de execução.
Porém,
ataques de denial-of-service causados por agentes móveis não têm sido
evitados, o que poderia ser realizado por meio do controle da quantidade de
recursos usados pelos agentes, em tempo de execução (BELLAVISTA et al,
2001b).
Conclui-se então que em muitos casos agentes não são estritamente necessários e podem introduzir desvantagens. Para CHESS (1995), a maioria das aplicações realizadas por agentes móveis pode ser executada de forma melhor por RPCs. Agentes móveis apresentam desvantagens como a necessidade de ambientes de execução altamente seguros, tendo-se por isso limitação na performance e funções.
Entretanto,
SCHOORL (1999) afirma que o uso em conjunto de agentes e RPCs pode ser
benéfico. Em sistemas de banco de dados distribuídos, RPC
pode ser a melhor escolha para transferência de dados, mas em certas situações,
agentes podem apresentar-se mais indicados devido à própria natureza de
serem criados e enviados onde são necessários. A escolha entre estas
tecnologias deve recair sobre a natureza do problema em questão.
3.3 Porque usar Agentes Móveis em Computação Móvel
Em aplicações envolvendo
dispositivos móveis, como visto no decorrer deste trabalho, as conexões são
intermitentes e apresentam baixa largura de banda. Dispositivos móveis estão
freqüentemente desconectados da rede por longos períodos de tempo e mudam de
endereço a cada nova conexão. Agentes móveis podem tratar estes problemas.
Aplicações podem ser escritas como agentes que migram para hosts móveis,
executam suas tarefas e retornam assim que a conexão permite.
Um
agente pode migrar de um dispositivo móvel para a Internet em busca de
informações de forma eficiente, pois não tem necessidade de ficar enviando
requisições e respostas como no modelo cliente/servidor tradicional. Por
outro lado, uma aplicação de rede pode enviar um agente ao dispositivo móvel
e este interagir com o usuário. Em ambas abordagens o agente não é afetado
por perda súbita da conexão, uma vez que não carece de contato contínuo
com o dispositivo.
Agentes
são relativamente fáceis de desenvolver e testar uma vez que escondem os
canais de comunicação, mas não a localização da computação. Eliminam a
necessidade de detectar e tratar falhas de rede, exceto durante a migração.
Agentes
móveis não requerem pré-instalação de software em cada site, podendo
distribuir-se dinamicamente permitindo aplicações on-the-fly[4],
todavia requerem a instalação de um sistema de agentes móveis. Enfim,
conduzem a aplicações mais escaláveis, visto que serviços podem ser
movidos para onde sejam mais apropriados.
[1] Ambientes computacionais massivamente distribuídos, com alta heterogeneidade e dinamismo, inexistência de controle global, mas, apresentando falhas parciais e falta de segurança. A Internet é um exemplo deste tipo de ambiente.
[2] Um agente estacionário executa apenas no sistema onde iniciou sua execução. Se necessitar de informações que não estejam presentes, ou precisar interagir com um agente em outro sistema, geralmente utiliza RPC (chamada a procedimento remoto).
[3] Consultas que permanecem efetivas por um período de tempo, e são aplicadas a cada documento novo.
[4] Em tempo de execução