Mobilidade de Código em Sistemas Abertos Distribuídos
O
contínuo e rápido crescimento das capacidades de comunicação
e processamento levou ao surgimento de ambientes computacionais massivamente
distribuídos (e.g. Internet). Estes ambientes são freqüentemente
chamados "ambientes abertos", sendo caracterizados por: massiva distribuição
geográfica, alta heterogeneidade e dinamismo, inexistência de controle
global, falhas parciais e falta de segurança. Desenvolver aplicações
para estes ambientes é uma tarefa complexa e esforços de pesquisa
têm sido direcionados para melhorar o suporte ao desenvolvimento e execução
de aplicações distribuídas.
O desenvolvimento de novas tecnologias de código móvel é
um resultado destes esforços. Em sistemas distribuídos tradicionais,
os componentes de aplicações são essencialmente estáticos.
Um componente é instanciado em um certo nó do ambiente e permanece
neste nó durante todo seu ciclo de vida. Interações remotas
entre componentes se dão através de troca de mensagens pela rede.
As tecnologias que suportam mobilidade de código permitem que trechos
de código possam ser transmitidos através da rede para serem executados
em locais remotos. A migração não é transparente
ao desenvolvedor de aplicações distribuídas, mas explicitamente
manipulada por ele para atingir objetivos próprios da aplicação.
Mobilidade de código fornece flexibilidade para o gerenciamento da configuração
de código em um ambiente distribuído e pode oferecer vantagens
para a execução de atividades distribuídas. A adequabilidade
de Java applets para a modelagem de interações com usuários
finais, por exemplo, é observável pelo número de aplicações
na Internet que utilizam esta tecnologia.
Grande parte dos esforços para o desenvolvimento de suporte a código
móvel se destina ao desenvolvimento de sistemas de agentes móveis
e de aplicações baseadas em tais sistemas. Um agente móvel
(ou simplesmente, agente) é um elemento de software auto-contido responsável
pela execução de uma tarefa, que é capaz de autonomamente
migrar em um sistema distribuído. Um agente migra em um ambiente distribuído
de um local lógico, denominado neste texto de agência, a outro.
Quando um agente migra, sua execução é suspendida na agência
original, o agente é transportado (isto é, seu código,
estado de dados, estado de execução e informação
de controle) para outra agência no sistema distribuído, onde sua
execução é retomada.
O conceito de agentes móveis começou a obter forte atenção
da comunidade de pesquisa e da indústria com o sistema Telescript, onde
objetos ativos capazes de migrar foram introduzidos como um conceito adequado
para suportar o desenvolvimento de aplicações sobre redes de comunicação
públicas. Em seguida, muitos projetos em institutos de pesquisa e na
indústria começaram a aparecer, entre eles: Mole, TACOMA, Aglets,
Agent Tcl, Magna, Page e Grasshopper. O conceito de agentes móveis tem
sido proposto para suportar diferentes tipos de aplicações, dentre
elas: comércio eletrônico; gerenciamento de workflows; gerenciamento
de redes; implementação de serviços de telecomunicação;
recuperação de informações distribuídas;
e redes ativas. Agentes móveis têm sido considerado um conceito
que pode ser explorado para fornecer, entre outros, os seguintes benefícios:
melhor uso de recursos de comunicação (em termos de custo e desempenho);
suporte flexível a operação desconectada; flexibilidade
no gerenciamento de instalação, distribuição ("deployment")
e manutenção de software; e suporte adequado para interações
com usuários humanos.
O desenvolvimento de uma infra-estrutura de suporte a agentes móveis
demanda o desenvolvimento de soluções para um conjunto de problemas
específicos que surgem devido à mobilidade. As soluções
sendo propostas têm variado consideravelmente de sistema para sistema.
Propostas de padronização para permitir a interoperabilidade entre
sistemas de agentes móveis também já existem.