Tema 4 - Aplicacions Distribuïdes

4.1. El paradigma base Client / Servidor

4.2. Models de comunicació ()

4.3. Sistemes distribuïts ()

4.4. Nous paradigmes: codi mòbil i agents mòbils


4.1. El paradigma base Client / Servidor

[28/05] ()

4.1.1. El paradigma base

El paradigma base en el que es basa internet es el de client/servidor, es el més utilitzat per que aplicacions de diferents màquines interactuin i cooperin a través de la xarxa. Aquest tipus d'interacció, en general, es la base que s'utilitza per totes les comunicacions, i per les aplicacions distribuides que treballen a través d'internet cooperant amb altres aplicacions o màquines. Les dues parts d'aquest paradigma, són, detalladament:

La interacció que hi ha entre el client i el servidor es sol anomenar peticició/resposta, pel fet de que fins que no hi ha una petició no passa res, i quan hi ha es genera i s'espera la resposta.

El servei que ofereixen els servidos pot estar a diferents servidors, que ofereixen el mateix servei, i poden estar a diversos hosts o al mateix. El servidor, comença la execució i va acceptant peticions i enviant respostes infinitament, en canvi, el client, acaba la seva execució després de haber fet un número finit de peticions de servei al servidor. El servidor accepta les peticions per un port conegut (well-known) que ha estat reservat pel servei que ofereix, en canvi, el client envia la petició per un por arbitrari, que no sigui utilitzat i que no estigui reservat.

Al paradigma client/servidor hi ha tres nivells diferenciats:

Normalment els clients tenen el nivell d'interficie i els servidors tenen el de processament i el de dades. Però, no sempre es així, depenent de l'aplicació es poden repartir els nivells de diferents maneres, dividits, o amb altres nivells.


Arquitectures més modernes:


[24/05] ()

4.1.2. Socket de Berkeley

Fonts:


[24/05] ()

4.1.3. Algorismes i qüestions al voltant del servidor

En les apliacions client-servidor hi ha tres paràmetres que definieixen el comportament d'aquestes aplicacions.Aquests paràmetres són:

  1. Model iteratiu / concurrent: Un model interatiu les peticions s'atenen seqüencialment, és a dir, la primera petició que arriba, al servidor o client, és atesa en primer lloc, la segona en segon lloc i així successivament. Normalment els servidors són iteratius. En canvi els clients no ho són. Els clients normalment són concurrents. Un model concurrent el que fa és atendre en el mateix temps peticions diferents. Aquesta concurrencia es pot dur a terme per replicació de processos (el pare crea els fills on el codi esta en processos diferents) o en un únic procés (el pare i els dills comparteixen codi, encara que el pare executarà una part del codi i els fills una altra).

  2. Fiabilitat en l’aplicació / en el protocol de transport: Pel que fa la fiabilitat el protocol TCP, com per exemple un servidor http, ja ens ofereix fiabilitat per tant totes les aplicacions que corren sobre TCP no es necessari implementar la fiabilitat. En el cas del protocol UDP no posseeix mecanismes per a la fiabilitat,com per exemple un servidor TFTP, per tant si una aplicaicó requereix de fiabilitat usant UDP, s'hauria d'implmentar aquesta fiabilitat peró implementarla usant UDP és complicat. Per això normalment no s'utilitza UDP quan es requereix fiabilitat.

  3. Informació que tenen els seridors sobre els clients amb estat / sense estat: Segons les transparències de l'assignatura:

Un servidor amb estat és aquell que necessita enmagatzemar informació relativa a la connexió per tal d’oferir respostes a un client. 
Un servidor sense estat, o stateless, és aquell que no necessita informació de peticions prèvies d’un client per a oferir-li una resposta.

En el cas d'un server de fitxers podem diferenciar dos algorismes per si es amb o sense estat. Si el servidor es amb estat l'algoritme te 4 pasos on el 3r i el 4t es repeteixen fins haber enviat l'arxiu. Els pasos són els següents:

  1. CLIENT TO SERVER envia una petició de lectura d'un fitxer.

  2. SERVER TO CLIENT el servidor crea una entrada en la taula d'estats amb l'estat del client

  3. CLIENT TO SERVER fa la demanda de llegir n bytes

  4. SERVER TO CLIENT el servidor envia els bytes sol.licitats i situa el cursor sobre el fitxer en l'estat que te el client.

Aquests servidors generen problemes, per exemple si es caiguès o es reiniciès el servidor les lectures dels fitxers es perderien, si en lloc de caure el servidor es caiguès el client la entrada de la taula seria erronia. A més a més si no hi hagués fiabilitat i arribessin peticions repetides les respostes podrien ser diferents. Per això els servidors sense fiabilitat, TFTP, solent tenir estats i els que són fiables no en tenen, HTTP. Si el servidor es stateless l'algorisme té un parell d'estats menys que s'aniran repetint fins que la voluntat del client ho decideixi. L'algorisme és el següent:

  1. CLIENT TO SERVER envia la petició de lecutra del fitxer especificant el nom del fitxer, la posició del fitxer on vol adquirir els bytes i la cantitat de bytes que vol adquirir.

  2. SERVER TO CLIENT li envia la informació solicitada i es despreocupa d'aquest clinet.

FONTS:
Trasparències de classe

{i} ()

Podem tenir diferents tipus de servidors combinant aquestes dos caracteristiques:

.

TCP(conexio)

UDP(sense conexio)

Iteratiu

Cas extrany

Habitual

Concurrent

Habitual

No te sentit: Tg >> Ts

Servidor Iteratiu sense conexió

En el cas Tg=0

Algorisme:

Crides al sistema utilitzades:

Servidor iteratiu amb conexio

Aqui utilitzarem dos sockets. Un estarà esperant les conexions mentres l'altre servirà les peticions.

Servidor Iteratiu amb Pseudoconexions

En aquest cas pasem a utilitzar dos sockets amb tres estructures sockaddr_in. El protocol utilitzat es UDP.

Crides al sistema utilitzades:

Servidor concurrent amb conexions

En aquest tipus de servidors tindrem un servidor Master i altres Slaves.

Algorisme:

1. Crea un socket i l'asocia ("Bind") a un numero de port i un numero IP local
2. El socket queda en modo pasiu esperant peticions ("Listen")
3. Repetidament crida a "Accept" per a rebre peticions de clients i crear un proces fill (esclau) per a processar cada petició.

Crides a sistema utilitzades:

//MASTER (pare)

//SLAVE (fill)

El proces pare ha d'estar pendent de que el proces fill mori

Una forma de millorar l'eficiencia es crear de manera anticipada els processos slave. Quan arriben peticions s'asignen al primer proces slave lliure.

Servidor concurrent de proces unic amb conexions.

En aquest tipus de servidor nomes existeix un proces que serveix totes les peticions dels clients concurrentement. Aquest tipus de servidor es util quan hi ha molts clients que demanen el mateix. Si hi ha molta activitat per part dels clients, el rendiment del servidor cau rapidament. S'utilitza la primitiva SELECT per a detectar l'activitat d'algun socket. Aquesta primitiva retorna 1 si hi ha hagut activitat o 0 si ha caducat el temps d'espera.

SELECT System Call int select(int nfds, fd_set *readfds,fd_set *writefds, fd_set *exfds, struct timeval *timeout)

Macros per controlar la llista de sockets (estructura FD_SET):

Algorisme:

  1. Crea un socket i l'asocia ("Bind") a un numero de port i un numero Ip local.

  2. Utilitzacio de "select" per esperar operacions d'E/S en els sockets existents.

  3. Si es detecta una conexió en el socket original es fa una trucada a "Accept", es crea un nou socket i s'afegeix aquest a la llista de sockets que testeja "select".

  4. Si es detectan peticions en els sockets diferents de l'original s'utilitzaran les trucades "Read" per llgir la petició i "Write" per enviar la resposta.

Trucades al sistema utilitzades:

Superservidors
Podem diferenciar entre servidors stand-alone i superservidors.

Els servidors stand-alone ofereixen un servei per un determinat port. Els superservidors son servidors que atenen peticions de molts ports al mateix temps. Quan arriba una peticio al superservidor, aquest posa en funcionament un servidor concret i li passa la conexio. D'aquesta manera s'estalvien recursos. Exemple: Internet daemon (inetd): echo, telnet, ftp, finger....

FONTS:
Trasparències de classe
http://pegaso.ls.fi.upm.es/

{i} ()

index


[24/05] ()

4.1.4. Algorismes i qüestions al voltant del client

Com hem explicat en l'inici del punt anterior un client ha de tenir un model interatiu. Aquests models per als clients poden ser amb connexió (quan es treballa sobre TCP) o sense conexió (quan es treballa sobre UDP), el qual necessita una fiabilitat relativa proporcionada per l'aplicació.Aquest model de connexió s'usa quan hi ha una relació curta i sense justificació de connexió. L'algorisme a utilitzar per als clients iteratius sense connexió el que primer ha de fer es trobar la IP i el port del servidor (normalment concurrent) al que s'ha de connectar. Un cop te aquesta informació el client crea el socket i l'associa a la inforamció anteriorment trobada, es a dir, l'associa a la IP local i al port lliure. Un cop hem seguit fet aquests passos, s'enviarà la petició pel socket i es llegirà la resposta des del socket repetidament fins arribar al final del protocol de l'aplicació. Les crides utilitzades les mostren en el segúent fragment de codi:

sock=socket(PF_INET,SOCK_DGRAM,PROT_UDP) 
bind(sock,adreça_local,...) // port=0 !
do {
sendto(sock,missatge,...,adreça_remota)
recvfrom(sock,missatge,...,adreça_remota)
} while (no acabem)
close(sock)

Una altra opció és utilitzar el mateix algorisme pero una crida adicional. Aquest crida al sistema es la connect, en lloc de bind la qual no fa la connexió (SYN,SYN/ACK,ACK) en si, sinó serveix per emmagatzemar les adreces. El que si que ens facilita es a la hora de enviar la petició i rebre la resposta, ja que no es necessari introduir en la crida al sistema (recv/send) les adreces remotes. El codi es el següent:

sock=socket(PF_INET,SOCK_DGRAM,PROT_UDP)  
connect( sock, adreça_remota )
do {
sendto(sock,missatge)
recvfrom(sock,missatge)
} while (no acabem)
close(sock)

Per l'altra banda un client interatiu amb connexió ha de tenir fiabilitat absoluta la qual es proporcionada en la capa de transport, com bé hem dit abans un exemple és el protocol TCP. Aquest model de connexió s'utilitza quan hi ha una relació duradera. Els datagrames utilitazats per a la relació són 3 datagrames per a la connexió i 4 datagrames per a la desconnexió.
L'algorisme a utilitzar per als clients iteratius orientat a connexió serà el mateix amb la única diferencia que en aquest cas després de crear el socket el connectarem directament amb el servidor, en lloc d'associar la IP i el port lliure com fem en el cas de clients interatius sense connexió.
Les crides utilitzades les mostren en el segúent fragment de codi:

sock=socket(PF_INET,SOCK_STREAM,PROT_TCP) 
connect( sock, adreça_remota, ...)
do { write( sock, buffer, longitud)
nb = read( sock, buffer, longitud )
} while (no acabem)
shutdown( sock, direcció )
close(sock)

on amb connect és fa el protocol d'establiment de la connexió.

FONTS:
http://www.wkipedia.org
Trasparències de classe

index


[25/05] ()

4.2. Models de comunicació

Se trataran 4 modelos de comunicación porque la comunicación de los partes dentro de una aplicación distribuida es muy importante. Existen la RPC (Llamada a Procedimiento Remoto), la RMI (Invocación Remota de Métodos), la MOM (comunicación/middleware orientada a mensajes) y los Streams (flujos). Para hacer la comunicación más cómoda y transparente se usan aplicaciones "middleware". Se encuentran en la capa de aplicación (del modelo TCP) y ofrecen servicios como la autentificación, la exclusión mutua para aplicaciones distribuidas y componentes distribuidos.

RPC

Se trata de llamadas de procedimientos que se encuentran en diferentes máquinas. Hay tres pasos:

La llamada a otra máquina se realiza de manera transparente para la máquina original. Para esto existen los stubs en ambos extremos. Se pueden crear a mano, pero existen generadores que fabriquen un stub para un proceso. Una máquina que quiere ejecutar métodos remotos puede acceder un directorio que tiene información sobre los procesos disponibles para RPC.

En muchos sistemas UNIX-like este directorio se puede llamar la herramienta portmap para acceder este directorio. Además existe "rpcgen" para generar un stub y "rpcinfo" para obtener información de los programas.

Junto a este modelo existen otros más complejos: Existe el modelo Doors que es utiliza para la comunicación entre procesos dentro de una misma máquina. En el modelo RPC asíncrono el proceso del cliente no se bloquea mientras se ejecuta el método remoto del servidor. La respuesta se recibe de forma asíncrona.

RMI

RMI es una evolución de RPC. Se usa para entornos orientados a objetos. Funciona así:

En este escenario un stub o proxy (por parte del cliente) y un skeleton (por parte del servidor) se encargan de la encapsulación de la comunicación entre cliente y servidor.

Es sistema RMI se aplica en lenguajes OO como Java y C++. Tanto como en RPC existe un directorio conteniendo información sobre los objetos disponibles para la invocación remota. En java esto hace la rmiregistry. Los stubs y skeletons se generan a través el programa rmic.

MOM

RPC y RMI son orientados a aplicaciones y por eso necesitan una sincronización fuerte entre el cliente y el servidor. En algunos ocasiones no se puede garantizar. Se aplica otro mecanismo que es orientado a mensajes: La MOM.

Se realiza de manera asíncrona, es decir, el cliente - después de dirigir una petición al servidor mediante un mensaje - no espera sino sigue ejecutándose. Otra propiedad de la MOM es la persistencia de la comunicación. Hay una cola de espera para guardar los mensajes que se quieren enviar. Así los mensajes no se pierden. Se aplica por ejemplo a los correos electrónicos.

Otros particularidades de sistemas basados en mensajes son la garantía que un mensaje llegará a la cola de entrada del receptor, la garantía de guardar un cierto número de mensajes durante un tiempo y la posibilidad que el emisor o receptor puedan ser inactivos durante la transmisión de los mensajes.

Pensamos en un escenario donde una máquina quiere enviar un mensaje a otra. Son conectados a través de varios routers. Todas estas máquinas tienen una cola de entrada y una de salida. Entonces los pasos para enviar un mensajes son los siguientes:

Streams

Los tres ejemplos anteriores todos son basados en el intercambio de unidades independientes de comunicación. Pero existen aplicaciones que usan flujos ("streams") porque tienen que enviar información constantemente.

Podemos clasificar los flujos en tres tipos:

Fuentes:
http://es.wikipedia.org (varias páginas)
transparencias de la asignatura


index

()

4.3. SISTEMES DISTRIBUÏTS

Un sistema distribuït és aquell que a l’hora d’obtenir un resultat utilitza vàries màquines que col•laboren entre elles, gestionant una sèrie de recusos compartits entre elles, treballant de manera concurrent, utilitzant un esquema de comunicació client-servidor entre els diferents processos. Aquestes màquines interconnectades intercanvien missatges i es coordinen per l’execució d’una certa tasca.

En aquest escenari, per poder organitzar aquests sistemes ens serà de gran ajuda la utilització d’ objectes. Els avantatges dels models orientats a objectes (que aporten transparència i permeten treballar de manera unificada en xarxes heterogènees), sumats a la simplicitat i efectivitat de la comunicació client-servidor, formen sistemes distribuïts que poden ser implementats en multitut d’entorns diferents.

Explicarem alguns d’aquests sistemes distribuits basats en objectes:

El Common Object Request Broker Architecture creat per Object Management Group és un model específic de sistema distribuït que permet desenvolupar aplicacions distribuïdes orientades a objectes amb facilitat, aplicacions que interactuen sense importar el llenguatge ni la màquina en la que s’ha implementat.

El seu funcionament es basa en l’existència d’un missatger que és l’encarregat de enviar les sol•licituds entre els diferents objectes. El missatger anomenat ORB (Object Request Broker) és la base del sistema CORBA ja que és el que proporciona la comunicació entre els diferents grups d’elements. Si els diferents sistemes CORBA tenen el mateix ORB, poden operar entre ells, però si no el tenen, hauran d’utilitzar GIOP (General Inter-Orb Protocol). Si GIOP s’aplica sota TCP, s’anomena IIOP (Internet Inter-ORB Protocol). Aquests protocols s’encarreguen d’ executar els mètodes i les funcions dels objectes del sistema.

Els elements a comunicar son els següents:

El llenguatge que utilitza CORBA per a qualsevol desenvolupament és l IDL (Interface Definition Language). Defineix els objectes, estructures i serveis que després seran utilitzats.

Exemple de creació d’una interfície “Saludos”.

module unejemplo {

};

El Global Object-Based Environment es un altre model de sistemes distribuïts orientat a objectes, però a diferencia de CORBA, està orientat a englobar un gran numero d’usuaris i objectes.

El funcionament de GLOBE es basa en la creació d’un espai de memòria compartida de gran abast a nivell d’aplicacions, espai que resideix en múltiples màquines i accessible pels diferents processos mitjançant la invocació dels seus mètodes.

Fonts:

http://www.osmosislatina.com/java/rmi.htm

http://www.itlp.edu.mx/publica/revistas/revista_isc/anteriores/dic98/cobjdist.html

http://www.monografias.com/trabajos16/componentes/componentes.shtml

apunts de classe


index


4.4. Nous paradigmes: codi mòbil i agents mòbils

()

4.4.1. Introducció als nous paradigmes

Al parlar de sistemes distribuïts, ens trobem que sovint necessitem que certs processos puguin “saltar” d’una màquina a una altra per a determinades aplicacions distribuïdes.

Malgrat que aquesta mobilitat de processos produeixi consum de recursos i actualment presenti algun que altre problema de seguretat, també ens proporciona una serie d’avantatges molt interessants:

Passarem a explicar els dos paradigmes dels que parlem:

Codi mòbil: És el codi del procés el que “salta” d’una màquina a una altre màquina remota i continua amb la seva execució de manera remota.

Agents software mòbil: és l’agent el que “salta”. El cos de l’agent conté el codi a executar. L’agent decideix quines accions ha de pendre.


FONTS:
apunts de classe.

index


[29/05] ()

4.4.2. Codi Mòbil

El codi mòbil es un sistema que serveix per simplificar molt la programació d'un sistema distribuït. Raons per usar un codi mòbil:

El codi mòbil també te desaventatges, el mes notable és la seguretat.

Alguns exempes de codi mòbil són:

Models de migració:

La migració forta és dificil d’implementar, calen mecanismes de baix nivell per a la recuperació de l’estat, a més, si es vol portabilitat també cal que aquests mecanismes siguin estàndard (que siguin iguals per tots els SO's).

És possible emular la migració forta utilitzant la feble? Sí, Ho ha de fer el programador, per exemple, es pot fer un codi que sigui com un autòmat (com una màuina d'estats), i crear un atribut del codi (de la classe) que serveixi per guardar l'estat.

Es pot distingir també entre dos tipus de migració: Iniciada per l’emissor i Iniciada pel receptor (Applets de Java o de Flash).

Els codis mòbils també es poden clonar. Abans de ser llençat a una altra màquina es pot fer un clon de l'aplicació i només llençar una de les dues aplicacions.
FONTS:
Transparències i apunts de classe.

index


[29/05] ()

4.4.3. Agents Mòbils

Un Agent Mòbil és un procés que actua en representació d’algú (és un procés que, independentment de la màquina que estigui pertany a la màquina qui l'ha llençat), té les següents propietats:

Els agents mòbils tenen tots els aventatges dels codis mòbils, però a més d'aquests també poden:

Hi ha més tipus d’agents, que incorporen altres característiques, com per exemple agents d’informació, agents d’interficie ...

Un agent, per poder executar-se, necessita una Agència, les agències son entorns d'execució que hi ha a cada màquina per oferir uns serveis estàndard als agents, quan l'agent arriba a l'agència es comunica amb ella i decideix les accions que ha de fer a la màquina. Les agències permeten l'execució, la comunicació i la migració d'agents.

Estàndards

L'estandard més utilitzat que regula els diferents aspectes dels agents i de les agències es FIPA (Foundation for Intelligent Physical Agents). L’estandard més utilitzat que regula diferents aspectes dels agents i de les agències, i que desde el 2005 forma part del IEEE.

En que consisteix:

La plataforma Jade, que utilitzem a les pràctiques de l'assignatura segueix aquest estàndard.

Components bàsics dels agents mòbils

Codi:

Dades:

Itinerari:

FONTS:
Transparències i apunts de classe.
en.wikipedia.org
index


[29/05] ()

4.4.4. Aplicacions dels Agents Mòbils

Algunes de les aplicacions més comunes son:

Hi ha aplicacions que només es poden realitzar amb agents mòbils, per exemple les aplicacions "MAr-de-Dades", aquestes aplicacions tenen les següents característiques:

Exemples d'aplicacions de Mar-de-Dades

Les aplicacions Mar-de-Dades també permeten la implementació d’esquemes complexes de seguretat per a oferir solucions escalables en aplicacions com votacions electròniques, computació GRID o subhastes en mercats electrònics.

FONTS:
Transparències i apunts de classe.


index


[25/05] ()

4.4.5. Agents i seguretat

Els principals atacs es basen en substitució, denegació de servei, repudi, infiltració i accès no autoritzat.
La seguretat és un aspecte clau en els agents mòbils.Aquesta és una classificació dels possibles atacs.

Exemples d'atacs:

Ampliació del tema (en anglés): ma_security.pdf
index


()

4.4.6. JADE/MARISM-A: agents mòbils segurs

JADE/MARISMA (Architecture for Mobile Agents with Recursive Itinerary and Secure Migration) és un entorn per a l’execució d’agents mòbils desenvolupat a partir de JADE, que proporciona mecanismes de seguretat per a protegir els seus agents.

La seva importància resideix en que és el primer software de codi lliure que combina migració, mecanismes de protecció d’itineraris, codi i dades en lexecució d’agents.

Els següents softwares ja existien abans, però no compilen tots els requisits anteriors:

FIPA/OS: Es una plataforma de codi lliure que ajuda a la programació d’agents i sistemes multiagent heterogenis i que segueix l’estandard FIPA(Fundation for Intelligent Physical Agents). La seva llicència és restrictiva i no té agents mòbils.

Grasshopper:Eina multiagent, amb codi que té propietari i no es troba disponible. Finalment s’ha adaptat a l’estàndard FIPA.

JADE (Java Agent DEvelopement Framework): Software lliure per al desenvolupament d’ aplicacions basades en agents, per a sistemes que interaccionen. També segueix l’estàndard FIPA, però no suporta mobilitat. La seva llicencia és LGPL (Lesser General Public License, que permet enllaçar biblioteques lliures amb programes propietaris, amb una alta capacitat d’integració.

Elements que integren MARISMA

Com hem dit abans, JADE/MARISM-A incorpora en el seu entorn una eina de creació d’itineraris per als agents, que inclou programació orientada a agencia amb capacitat de soportar diferents arquitectures, eines criptogràfiques per protegir els agents i RAD (desenvolupament ràpid d’aplicacions).

Característiques de JADE/MARISM-A

Fonts:

http://pulsar.unizar.es/gluz/manual-sl/x505.html

http://usuario.cicese.mx/~mjuarez/articulo.pdf

apunts de classe


index


[25/05] ()

4.4.7. Arquitectures d’Agents Mòbils

Les arquitectures dels agents mòbils ajuden a trencar el lligam del programador amb les tasques crítiques que tenen aquests agents com són la protecció i la migració.L'arquitectura d'un agent mòbil està formada per un codi, unes dades, un itinerari, els quals formen part de l'estructura de l'agent. Els itineraris n'hi han de dos tipus, els implícits i els explícits. L'itinerari implícit esta dins del codi al contrari dels itineraris explícitsels quals tenen una estructura separada del codi. Un itinerari explícit aproximadament és basa en la combinació recursiva de seqüències (tots els sub-itineraris són visitats peró seguint un ordre [i1,i2...in]), de alternatives (només és visitarà un dels sub-itineraris, depen d'una certa condició <i1,i2...in>) o de conjunts (també es visiten tots els sub-itineraris peró a diferencia de les seqüències en aquest cas no segueixen cap ordre {i1,i2...in}). Un exemple de itinerari explicit, és el que es va comentar a classe, del que es pot fer en una tarda-nit, sortint amb la teva parella. L'agent comprarà una entrada pel teatre i reservarà taula en un restaurant o bé comprarà un parell d'entrades per al museu i li quedaran dines per poder pagar una taula en un restaurant més car. Com que vas amb la parella, abans o després de les opcions comprarà un ram de flors. Aquest itinerari el podriem explressar d'aquesta manera:

{Ram_de_flors,<[Teatre,Restaurant],[Museu,Restaurant_més_car]>}

També forma part de l'arquitectura de l'agent mòbil certs mecanismes de control (migració) i certs mecanismes de protecció com són l'ús de dades xifrades i algorismes de desxifrat i descodificació.
Aquestes arquitectures possibiliten els agents autocontinguts i la incormporació de nous mecanismes de protecció sense haber d'aturar ni recompilar les agències.
Uns mecanismes de protecció, com bé hem dit abans, són els criptogràfics que assegura l'estructura de l'agent no es pugui alterar-se ni llegir-se fora d'una agència concreta. Gracies també als mecanismes de protecció de l'estructura especial que les arquitectures d'agents mòbils tenen per emmagatzemar resultats, fan que sigui privat els resultats obtingut per l'agent.

Results = Eo(nil, Id1), So(H(Eo(nil, Id1))), 
Eo(R1, Id2), S1(H(Eo(R1, Id2))), ...
Eo(Rn, Ido), Sn(H(Eo(Rn, Ido)))

E: Xifrat, H: Hash, S: Signatura, Id: Identitat de l’agència

El JADE/MARISM-A està capacitat per utilitzar diverses arquitectures d'agents mòbils de manera simultania, es a dir, pot usar diverses arquitectures a la vegada, algunes de les quals les té predefinides. Són les següents:

  1. Agent Estàtic

  2. Agent Mòbil amb itinerari implicit

  3. Agent Mòbil amb itinerari explícit imbricat (ceba)

  4. Agent Mòbil amb itinerari explícit no imbricat (scrambled)


FONTS:
http://www.wkipedia.org
Trasparències de classe

index