YALPS
Your Applications Like Planetlab & Simulation
YALPS is an open-source Java library designed to facilitate the
development, deployment, and testing of distributed
applications. Applications written using YALPS can be run both in
simulation and in real-world mode without changing a line of code or
even recompiling the sources. A simple change in a configuration file
will load the application in the proper environment. A number of
feature make YALPS useful both for the design and evaluation of
research prototypes and for the development of applications to be
released to the public.
A YALPS application is organized as a collection of Tasks whose life
cycle is controlled by a TaskManager abstraction. The TaskManager
allows tasks to be scheduled for immediate, deferred, or periodic
execution as well as canceled upon request. Tasks can be associated
with application-specific TaskGroups to facilitate their
management. The programmer can easily enable or disable a subset of an
application simply by managing the corresponding TaskGroup. Moreover,
the two available implementations of the TaskManager
(SimulatedTaskManger and ExecutorTaskManager) make it possible to run
the same application as a simulation or in a real deployment without a
single change in the code.
Communication is also handled by an abstract component, YALPS's
CommunicationLayer, which is specialized in a real-world and a
simulation version. Applications communicate by means of
application-defined messages which are then routed either through
UDP/TCP or through YALPS's simulation infrastructure. In both cases,
YALPS's communication layer offers features for testing and evaluating
distributed protocols and applications. Communication channels can be
tuned to incorporate message losses or to constrain their outgoing
bandwidth. This makes it possible to simulate constrained links or
other challenging network scenarios in testbed environments such as
PlanetLab or in cluster deployments. These testing features can easily
be turned off when applying YALPS in a real-world application.
To improve performance in bandwidth intensive applications, YALPS also
gives programmers an easy way to personalize message
serialization. Developers can freely choose whether their messages
should be serialized using Java's standard serialization or using a
more efficient custom mechanism implemented through YALPS's
interface. Custom serialization is mostly useful in real
deployments. In simulation, YALPS developers can specify that their
messages follow the immutable pattern thereby allowing YALPS to skip
serialization and reach larger simulation scales.
YALPS's support for experiments also includes skeleton classes
peer-to-peer nodes and for bootstrapping servers. These include
facilities such as the detection of heavily loaded or clockdrifted
hosts and can be freely extended by developers. The same holds for
YALPS's logging facilities, which by default include the ability to
evaluate bandwidth consumption and identify particularly time
consuming tasks.
Finally, YALPS includes a set of bash scripts that facilitate the task
of deploying and running applications in large scale testbeds. YALPS
scripts will automatically deploy the application on the desired nodes
and launch it, possibly changing its parameters according to the
specified configuration files (in java-property format). Once the
experiments have terminated, YALPS can collect results either using
its scripts or by means of application messages sent to a Bootstrap
node.

