Camel; an adaptive migratory applications framework
Process Migration techniques have been around since the early days of Networked Operating
Systems. However, process migration has not been widely adopted in software
architecture design due to performance cost and unfeasible applications domain at that
The emergence of new mobile computing technology is now the driving force to investigate
new migration models that will support mobile applications and will help to
optimise the available scarce resources that are a feature of the mobile computing environment.
New alternatives to process migration have been developed and are attracting
more researchers. These alternatives include remote execution, process cloning, mobile
agents, and mobile code systems. They are simpler to implement and more inexpensive
in their overhead cost to the execution environment.
This thesis investigates the design and a reference implementation of a framework
to support application designers in building adaptive migratory applications. The framework
is called Camel. For applications to migrate they need to capture/save their states
so that they can be restarted at the new location. However, capturing/saving mechanism
of low level execution state imposes great performance cost on applications and are not
necessarily required for migration. In Camel we argue that applications can migrate successfully
with no need for low level execution state and with minimum application state,
if the application designer decides on the necessary state at design time.
The design of adaptive migratory applications requires infrastructure support for monitoring
the execution environment so that applications can be notified of any changes in a
critical resource that might trigger migration, adaptation or a combination of both. Monitoring
a critical resource is accomplished through the use of the monitor component of
Camel. In this work we only focus on monitoring of memory and application throughput.
The framework provides support for the application designer to construct adaptation at
design time through the provision of a common framework of helper objects and classes.
The designer can then tweak the behaviour of the application through a set of policy profiles
to better utilise critical resources