Autonomic systems
Autonomic computing aims at providing systems and applications with self-management capabilities, including self-configuration, self-optimization, self-healing, and self-protection. These functions are performed by feedback control loops. More details on our approach to autonomic computing may be found here.
 We currently investigate three aspects of self management, described below, using Jade as a common platform for the experiments. The managed system is a multitier J2EE server deployed on a cluster.
The goal of self-optimization is to maintain optimal (or near-optimal) system performance in spite of wide variations of the load or of the amount of available resources. Performance may be measured by various criteria, such as average response time or average throughput for an Internet service, or bounded jitter for a video server, etc.
In the first experiments, using the Jade framework, we have selected an entire node as the resource allocation unit, and we have implemented a simple control loop based on thresholds. When the load (measured by CPU usage) goes over a preset threshold, a new node is allocated. When the load falls under another threshold, a node is released. Two instances of this control loop are used: one for the database tier, the other one for the application server tier. As a result, the system keeps the response time fairly stable under wide variations of the load. 
 The goal of self-protection is to maintain a system's integrity in the face of attacks.
The principle of self-protection is to enable the protected system with a sense of self, i.e., an ability to detect the intrusion of foreign elements into the system. In a system described in terms of interconnected components, according to the Jade framework, this may be done at two levels:
  • The inter-components (architectural) level, i.e., in terms of the components and the communication channels between them.
  • The intra-component (application-dependent) level, i.e., in termes of the specific internal organization of each component.
In a first phase, we have concentrated on the architectural level, by providing the system with the ability to detect an attempt to use the communication channels between the components in an illegal way.
The goal of self-repair is to restore the integrity of a system in the presence of failures. Up to now, we have considered a system running on a cluster of nodes, and recovery from node failures. Failures of a software component will be investigated in a further step.
This target system has the form of a set of interconnected components, equipped with wrappers according to the general scheme defined by Jade. Critical components are replicated, and the consistency of the replicas is maintained during execution. In addition, the knowledge base maintained by the repair manager contains a representation of the system state, including the configuration of each component, the bindings between the components, and the placement of the components on the nodes of the cluster. This representation contains all the necessary information to reconstruct the system after a node failure.