260 likes | 525 Vues
CSC 253 Paul Grace. [http://research.lumeta.com/ches/map/]. Technical Stream Session 6: Mobile Agents and Aglets. Distributed Systems. Overview of the Session. Introducing Mobile Agents What are agents and mobile agents? Mobile agents versus client-server When to use mobile agents
E N D
CSC 253 Paul Grace [http://research.lumeta.com/ches/map/] Technical Stream Session 6:Mobile Agents and Aglets Distributed Systems
Overview of the Session • Introducing Mobile Agents • What are agents and mobile agents? • Mobile agents versus client-server • When to use mobile agents • Mobile agent toolkits • A example mobile agent toolkit: Aglets • The Aglet architecture • Mobile agent programming • Sample Aglets
What is an Agent? • An agent is a software program that acts on behalf of a user, or another software program • Typically used to retrieve and process information • Execute persistently (rather than on demand) • The agent decides when to take action • Types of Agent • Autonomous agents • Use AI techniques to modify how they reach their objective • Distributed agents • Executed upon multiple distinct machines • Multi-agent systems • Distributed agents that co-operate to reach a goal • Mobile agents • Agents that relocate
Examples of Stationary Agent Applications • E-mail filtering • Continuously monitor incoming e-mail, decide how to process: is it spam? Important? etc. • Data Mining • Crawl the Web to collect data on a topic • E-Commerce • Book the cheapest holiday • Flights, hotel, hire car etc.
What is a Mobile Agent? • Mobile agents are a distributed computing paradigm • A mobile agent migrates from one machine to another under its own control • Decides which locations to visit and what commands to execute • Interaction with the original source isn't required • Suspend execution at any time and migrate to a new host
Levels of Mobility • Evolution of Mobile Agents • Mobile code = transfer of code • Mobile objects = transfer of code + data • Mobile agent = transfer of code + data + thread + directive • Or … • Weak Mobility • Mobile agent carries code and data. Execution has to start from beginning after transfer • Data state = global state • Strong Mobility • Mobile agent carries code, data and execution state • Data state = global state • Execution state = local variables and threads state See Lectures on Mobile Code in Java
Server Client Network Service Mobile Agent Client Server Mobile Agents versus Client-Server • Remote Procedure Call • One computer invokes operations on another • Continuous exchange of request and response messages • Mobile Agents • Client sends and receives 1 message --> mobile agent • Client is still continuously interacting with the server • However, there is NO continuous network communication Network
The Advantages of Mobile Agents • Reduce bandwidth consumption and network load • Local communication between agent and host • Act autonomously • Well suited to distributed mobile applications • Limited resource devices • Processing can be moved to resource rich devices • Frequent network disconnections • Rather than deal with network exceptions, the agent migrates when a connection is available
When to use mobile agents • Mobile agents are not a substitute for client-server • Or any other paradigm you’ve learned about • Group communication (JGroups), Messaging (JMS), etc. • They are an alternative approach that for certain application types can provide benefits • As a distributed systems engineer you must decide the correct paradigm, based upon … • legacy systems • Security • Mobile environment • etc… • I.e. use the knowledge learned in this course to choose when agents are best Which approach should I use?
An Example Mobile Agent Application • Information foraging • Agents starts on the user’s home machine Task = find all text written by G.S. Blair • Agent travels to each site hosting a distributed library and interacts with a retrieval agent to get the documents • As the agent travels it merges the results into a single report task result • To optimise the task, the original agent spawns mobile child agents that retrieve the data in parallel.
Mobile Agent Toolkits • Provide the infrastructure for mobile agents ... • to interact with a local computer system; this is known as a“context” for mobile agents to reside and execute • to move from host to host • to communicate with other agents and hosts through message passing • These toolkits are normally Java-based e.g. • Aglets • Concordia • JADE • OAA • TACOMA (C++) • … and others
Mobile Agent Toolkits: Conceptual Architecture Application Application Agent Execution Environment Agent Execution Environment Agent’s place of execution Messaging Subsystem Messaging Subsystem Handle transport of messages and agents Communication Infrastructure
Java & Mobile Agents • Java is well suited to mobile agents because of the following properties • 1. Platform independence • Allow agents to move in a heterogeneous network • 2. Security • Secure servers against incoming agents • Remember sandboxing and the security manager • 3. Dynamic class loading • Execute an incoming agent • 4. Object serialisation • Remember the Lecture on RMI & Mobile Code • Stub distribution: an example of mobile code • Agents are another example of how to use mobile code
Aglets • Java based mobile agent toolkit developed by IBM • Now available as open source under the IBM public license • The name originates from agent+applet = Aglet • Aglet properties: • Mobile Java object that can visit Aglet enabled hosts • Executes in a Context; there may be many contexts on a node • An Aglet server hosts N contexts • Aglet = Aglet state (variable values) + Aglet code (Java class) • Autonomous • Runs in a separate thread when it arrives at a host • Reactive • Responds to messages that are sent to it. A message is an object exchanged by by aglets • Message passing is synchronous and asynchronous • Is unique • A globally unique identifier is bound to each aglet • Mobility level = weak mobility
Aglet Operations • Creation • Create a new aglet in a context and start its execution • Cloning • Create a copy of an aglet, with a unique ID • Dispatching • Send an aglet to another context, either locally or on a new host • Retraction • Pull an aglet from its current context back to the requesting context • Deactivation/ Activation • Halt and restart the aglet’s execution • Disposal • Halt aglet execution and remove it from context
The Aglet Lifecycle Dispose Context Two Context One Clone Dispatch Aglet Aglet Retract Activate Deactivate Class File Disk Storage
The Aglet Programming Model • Event based programming model • Aglets have listeners which catch events in the lifecycle of the aglet • Clone Listener • About to be cloned, after cloning • Persistence Listener • After activation, or about to be deactivated • Etc.. • MobilityListener – Interface for receiving mobility events • onDispatching(mobilityEvent) • Invoked when aglet is being dispatched • OnReverting(mobilityEvent) • Invoked when the aglet is being retracted • onArrival(mobilityEvent) • Invoked when aglet has arrived at its destination You override these methods with the aglet logic Okay, I’ll say hello! You’ve Arrived!
Aglet Creation and Management • Aglets are created and managed per context • The Context API interface AgletContext • CreateAglet(CodeBase, ClassName, Args); returns a proxy to the created aglet • Others: getAgletProxy, getAgletProxies, etc.. • You manage an aglet by calling methods on the proxy using the Aglet API interface AgletProxy • This can be done remotely (so a proxy is similar to an RMI stub) • Clone() – Create a copy of this aglet • Dispatch(destination) – Send the aglet to a destination • Dispose() – destroy the aglet • and others, etc…
Writing an Aglet import com.ibm.aglet.*; /** * DisplayAglet * Displays text in the message area on its aglet viewer. */ public class DisplayAglet extends Aglet { public void run() { setText("Hello, world! I am " + getClass().getName() + "."); } } All Aglets inherit the Aglet super class – we’re saying this is an aglet! What happens when the aglet is executed
Simple migration public class HelloAglet extends Aglet { public void atHome(Message msg) { setText("I'm back."); dispose(); } public void onCreation(Object init) { setMessage("Hello World!"); itinerary = new SimpleItinerary(this); home = getAgletContext().getHostingURL().toString(); } public void sayHello(Message msg) { setText(message); try { itinerary.go(home, "atHome"); } catch (Exception ex) {ex.printStackTrace();} } When I arrive home – delete myself When created, setup an Itinerary (where to go) When dispatched, this method is called (see next slide). Makes itself go home
/* Starts the trip of this aglet to the destination */ public synchronized void startTrip(Message msg) { // get the address for trip String destination = (String)msg.getArg(); // Go to the destination and Send "sayHello" message to owner(this) try { itinerary.go(destination, "sayHello"); } catch (Exception ex) { ex.printStackTrace(); } } } Called by the initiator – or could be called from run() Dispatch the agent – note it calls a specific method on arrival
Delving Deeper • Use the toolkit, its available at: • http://aglets.sourceforge.net/ • There is much more to Aglets • Message passing between Aglets • 3 Styles • One way • Request-Response • Asynchronous Messaging • You can create sophisticated migration and meeting patterns for aglets • How and when aglets choose to move • You can synchronise meetings between aglets at particular hosts • … build your own applications to see what is possible
Expected Learning Outcomes At the end of this sixth unit: • You should know what a mobile agent is and be able to describe its characteristics • You should know the benefits of mobile agent programming and be able to compare it against client-server • You should know what types of applications are suited to mobile agents • You should be able to classify the mobility levels of example mobile agent toolkits • You should know what an Aglet is, and how the Aglet toolkit works