In this page, an overview of the system architecture and the data structure is presented.
The system architecture of OACIS is depicted in the following figure.
The web server is developed based on the Ruby on Rails framework (http://rubyonrails.org/), which provides an interactive user-interface to users. MongoDB (http://www.mongodb.org/), a document-based database, is used as data storage. It stores the information of the jobs, such as the values of parameters, executed date, and executing host. The files generated from the simulators are stored on the file system. Thus, you can directly access the simulation outputs using a file browser or a command-line terminal.
The application server is responsible for handling requests from users. When a user creates a job using a web-browser front-end, the record of the job is created in the database. Another daemon process, which we call “worker”, periodically checks whether a job is ready to be submitted to a remote host. If a job is found, the worker generates a shell script to execute a job and submits it to the job scheduler on the remote host via SSH connection. Then the worker process periodically checks the status of the submitted jobs. When one of the submitted jobs is finished, the worker downloads the results and stores them into the file storage and the database in an organized way. Hence, users do not have to check the status of the remote host by themselves and they can trace the simulation results even after several months.
A typical flow of the job execution is depicted as follows.
All the results files are accessible either using a web-browser or a file system.
OACIS stores the simulation results in a three-layered structure (Simulator, ParameterSet, Run) as shown in the following figure.
Each simulator has several ParameterSets, and each ParameterSet has several Runs. A ParameterSet represents a set of parameter values which are required by the simulator. A Run corresponds to a single MonteCarlo run having an independent random number seed.
Let us consider a simple traffic simulator as an example.
We assume that the simulator has three input parameters: road length L, time interval T, and the number of vehicles N.
A ParameterSet for this simulator corresponds to the set of these three values such as {L=100, T=10, N=10}
.
If you conduct simulations for this ParameterSet five times with different random number seeds, you’ll have five Runs.
Furthermore, you can define a post-process, called Analyzer, which is conducted on the simulation results. For each Simulator, you can define several Analyzers. Analyzers are executed on a remote host similarly to Simulators. The outputs of Analyzers are called Analysis. Analysis are stored below a ParameterSet or a Run depending on the type of Analyzers you define.