wiki:GeniExperimentEngine

Version 3 (modified by rick@mcgeer.com, 10 years ago) (diff)

--

Synopsis

The GENI Experiment Engine (GEE) is designed as a restricted, easy-to-use programming platform on GENI. It is intended for several purposes:

  1. To permit high-in-the-stack distributed systems experimenters to use GENI without having to allocate virtual machines, configure virtual networks, write RSPECs, configure VMs, etc.
  1. To permit newcomers to GENI to learn how to use the facility easily and quickly: we want a gentle on-ramp to GENI
  1. To permit all experimenters to have a rapid-prototyping capability with restricted functionality.

It’s vital to note that the GEE is not designed to be the appropriate venue for all experiments, and indeed one use case for GEE is where an experimenter writes a rapid prototype of his experiment, uses the GEE to debug the high-level application for his experiment, and then generates a full-blown GENI slice on the basis of what he’s learned from the GEE. The GEE is a tool in the GENI experimenter’s toolbox, but it is far from the only tool.

This assumption drives the major design decisions for the GEE. In particular:

  1. The primary design criterion for the GEE is usability. The GEE must obey the five-minute rule: an experimenter must be able to write, deploy, and run “Hello, World” in under five minutes.
  1. A number of our users will be naïve and through mischance or naivete have the potential to cause problems. Thus, while our sandbox can be corrupted for the individual slice, its corruption can’t affect other slices or the external network.
  1. We can achieve security and usability by sacrificing problematic functionality. If experimenters want enhanced functionality, they can simply allocate a full slice.

The Anatomy of the GEE

The GENI Experiment Engine consists of three services:

  1. The GEE Slicelet Engine. This comprises the heart of GEE. The GEE Slicelet Engine delivers preallocated "Slicelets" to users, on-demand. A Slicelet is a pre-allocated set of InstaGENI PlanetLab slivers, accessed through a use-once ssh key (a "burner" key), with various components, notably a python interpreter, pre-loaded. On allocation of a Slicelet, the user will be delivered a bundle including the name of the slicelet, the key used to access the slicelet, a network file giving the IP addresses of the slivers as Python constants, and a fabfile which can be used to deploy the experiment.
  1. The GEE Storage Engine. Experimenters and others need a convenient, persistent store for experimental data that is not tied to a specific location. Wide-area RESTful-accessible stores such as Swift have an inconvenient API for experimenters and users. This service will add a filesystem API to a network of distributed stores. The GEE Storage Engine will be available to all experimenters on GENI, whether they use the GEE Slicelet Engine or not.
  1. The GEE Message Engine. Distributed systems, including GENI experiments, need to communicate. The GEE Message Engine will provide a convenient, persistent service for global signaling between slivers. The GEE Message Engine will be available to all experimenters on GENI, whether they use the GEE Slicelet Engine or not.

Progress Reports

http://groups.geni.net/geni/wiki/GeniExperimentEngineProgressReportGEC19

Tutorials

http://groups.geni.net/geni/wiki/GeniExperimentEngineUSIgniteSummitTutorial

Attachments (4)