Lightweight (Internet-based) Communication for Autonomic Services

Overview

Introduction
Network Structure and Communication Protocols
Modular Structure
Autonomic Computing
Problem Solving


Introduction

This page gives a more detailed overview of the system, paying particular attention to its modular construction. The licas system is an open source framework for building service-based networks. The framework comes with a server for running the services on, mechanisms for adding the services to the server, mechanisms for linking services with each other, and mechanisms for allowing the services to communicate with each other. The default communication protocol inside of licas itself is an XML-RPC mechanism, but dynamic invocation of external Web Services is also possible. The links form the network structure and can be permanent or dynamic, where the dynamic links are created using a new linking structure. This has been tested by optimising queries run over a network and shown to produce favourable results. The system also provides an implementation of the standard autonomous framework, including the four main components and policy scripts. Only the framework is implemented however, where you would be expected to write actual implementations of the main monitoring components yourself, based on your own particular problem specification. The dynamic linking mechanism is a little bit autonomous by itself. Structures are also in place for adding security to service invocation, service-level agreements, metadata processing and some form of conversations or behaviours, similar to what agent-based systems might do.


Network Structure and Communication Protocols

The system is designed to be peer-to-peer (p2p), where any service can both send (client) and receive (server) messages from any other service. Any remote message firstly passes through the base server, before being directed to the service that it is addressed to. Local communication between services running on the same server however can also be through direct object references, when message parsing is not required. The architecture is a typical hybrid p2p architecture and is also the sort of thing that the Cloud computing systems might provide. Figure 1 shows the general architecture of what a distributed network would look like.

 

Figure 1. Example of two Licas servers running service networks.


This diagram shows two servers running two different networks of services. The services can be structured in either network by permanent links, represented by the solid black arrows. Some services may have created dynamic links between each other, represented by the dashed red lines. The dynamic links can cross over servers as well. The remote communication between the servers is done using XML-RPC. The internal communication protocol is therefore XML-RPC, but it is also posible to call external Web services through a dynamic WSDL parsing process or the RESTful style of message. This is possible with either the J2SE or the J2ME server platforms. As the server is a web server, this also means that a server can be invoked either through the default XML-RPC method, or through a RESTful-style message. Figure 2 shows where the XML-RPC protocol is used and where Web Service invocation can be used.

 

Figure 2. Example showing where XML-RPC is used and where Web Service invocation is allowed.


So internal communication in the licas system is by XML-RPC only, where service communication is done at the level of invoking a method on another service. A client can use either XML-RPC or RESTful-style messages to invoke a service running on a server, and either a client or a service can call an external Web Service dynamically, also through the licas classes.


Modular Architecture

The framework can be broken down into several modules, where not all of them are required to use the system. At the lowest level is a Service class. If you extend this with your own class, then you can add your own service to a network with all of the required licas functionality. The Auto class extends the Service class and is slightly more complex, providing for agent-like communications or continuous behaviour running on a separate thread. Note however that this is only a framework and the actual implementation still needs to be done by the programmer. Ontop of this there is the possibility for adding metadata to describe the service. All of the metadata is in XML format. The metadata can also be used to describe different security levels. The methods of a service can then be protected at different access levels, each requiring a different password. Figure 3 shows the modular architecture.


Figure 3. Modular architecture of the licas system. The server and service modules are shown.

The server modules are shown in green. There is a default HTTP server that can manage metadata, linking and communication mechanisms. You do not have to link the loaded services, for example, but this is the correct way to provide some sort of structure. The dynamic linking mechanism is provided as a utility 'Link' service that you add to your own service and then invoke. There are built-in meshanisms for doing this. The remote communication can be by XML-RPC. If passing complex Java objects, you need to write a parser for those classes. Alternatively, you can also serialize your objects, or local calls can use direct references. Web Services invocation is then another additional feature.

The Services that are loaded onto the network can be derived from the base licas 'Service' class. Alternatively, the 'Auto' class provides slightly more functionality. You can also load in your own class that is not derived from licas at all. It will be stored in a wrapper before being loaded onto the network. Some of the default functionality might then be missing.


Autonomic Computing

The system also protects any service that is communicated with by a wrapper object. This makes it difficult to obtain a direct service reference without the correct password, even through a local call. This wrapper object is a 'ServiceWrapper' by default. There is now also the option however to add an 'AutonomicManager' wrapper, if the object being wrapped is derived from a licas 'Auto' service. The default implementation of this will allow the service to operate as normal and also provide a message queue for storing and analysing messages that the service receives, and autonomously monitoring the service itself.

The autonomic manager is made up of monitor, analyser, planner and executor modules that are used to monitor the service in question and take action when there is a fault. Because this sort of activity is very application specific, it cannot be programmed completely and also lies outside of the scope of licas. Therefore, only a framework is in place to allow these modules to be loaded and to work together. In the licas system, only the base service has an Autonomic Manager. Any service that is nested inside of any other service is taken to be a utility service to the base service and is not monitored by any other module. The autonomic manager does not control the loaded service's actions, but only monitors it based on scripts or policies that are passed in as an admin document. The service itself invokes each monitoring operation by returning the evaluation of a behaviour execution to the manager. The manager then passes this to the monitoring modules, which evaluate the behaviour. Note that a behaviour can be any sort of action or evaluation. If there is an error, then this can be flagged. So the service starts the monitoring process, but the manager then evaluates the feedback and flags any error. The framework that is in place should be helpful for this process and so it would be worth looking at the code to see how it works if you are going to implement these modules yourself. Figure 4 shows the basic architecture of the autonomic manager. Note that the licas Service class also now has a contract manager for processing contract proposals for certain services. These would be related to the stored metadata.



Figure 4. Autonomic Manager wrapper with stored object.



Problem Solving

The system now has a problem solving version as a new separate package, written on-top of the main licas system. The default solution type is genetic algorithms, with the idea of matching services with similar information content. The problem solver uses a hyper-heuristic to match partial or uncertain information, or solve optimisation problems over the service data. This new framework allows for a heuristic search with evaluation functions, to determine what services should be linked or organised together. This is a much more sophisticated way of sorting the network structure, rather than simply through direct link updates, but is then also much more expensive computationally. So a unique feature of this system is the fact that a genetic algorithm solution to optimising information sources has been integrated with a service-based network, allowing for live services to organise themselves based on the information (static or live) that they retrieve from their sources. The framework can also be used simply as a general problem solving environment.

Figure 5 shows the basic architecture of the problem solver. The problem solving is performed locally and not distributed throughout all of the network services or nodes. An information mediator can be used to retrieve the information from the distributed sources. This is then sent to the problem solver which creates solutions of the specified type and clusters the sources, or solves the problem, as best it can. The resulting clusters can then be turned into dynamic links and used to update the network structure. The information mediator can communicate directly with the services running on a network and the results viewed in the GUI, or the problem solver can be used by itself without any network or GUI.



Figure 5. Problem Solving Architecture for Organising Information Sources.