/home/projects

Corus

Overview

Corus is a framework allowing centralized control of distributed application processes. Concretely, Corus allows distributing applications on different nodes (grouped by domain or cluster) and executing/terminating processes corresponding to these applications. As of now, Corus supports clustered execution and termination of Java virtual machines.

Features

At a glance, Corus presents the following features

  • non-intrusive distribution of plain-vanilla Java apps built with your lightweight framework of choice (distributed apps without an app server);
  • clustered application deployment on distributed Corus nodes (hosts);
  • clustered execution of distributed processes;
  • clustered administration of Corus nodes;
  • clustered JNDI naming service and RMI-like distributed computing (based on Sapia's Ubik), supporting transparent fail-over, load-balancing and client-side discovery;
  • monitoring of executing processes and auto-restart of crashed ones;
  • command-line administration client emulating Unix commands, used to administrate applications and running processes;
  • port management;
  • process scheduling.

Architecture

Corus consists of a lightweight daemon implemented in Java. A Corus server is installed on a given host, and executes/monitors processes on that host.

Multiple Corus daemons are grouped by domain, which allows performing clustered application deployment and process execution. A command-line client is provided in order to control multiple Corus daemons remotely, in a centralized manner.

A typical Corus topology is illustrated below:

Purpose

The main goal behind Corus is to allow distribution of plain-vanilla Java apps (with a simple main() method as an entry point) on a large-scale without the intrusion of an app server and compliance with a heavy-weight programming model.

The rationale behind Corus is that one should not need to rely on application servers (and the bloat that comes with them) to distribute applications on a large scale. How about just taking your plain Java app and deploy multiple instances of it in a cluster, making its services available on the network to other applications?

In theory, that could be done by simply writing a shell script for your app and deploy that script and your application's resources on the required hosts. But in theory, that is hardly practicable in enterprise contexts, where application instances can be numerous and manual startup/shutdown of processes through shell scripts quickly becomes overwhelming. That is why application servers generally rely on remote management and clustered deployment for distributing applications. But application servers impose a strict programming model, and the ones with enterprise-grade clustering features usually come with quite a price tag.

Corus allows avoiding the app server programming model. With Corus, you can stick to the basic, lightweight Java application. For example:

  • you can build your app with your lightweight framework of choice.
  • you can test your app locally withouth thinking about a distributed container contract.
  • you can eventually deploy and execute your application on multiple nodes, in a centralized manner.
  • you can use Corus' built-in distributed computing capabilities and/or other communication means of your choice (JMS, JavaSpace, etc.) to enable network links between your distributed applications.

More Details

Corus complements the lightweight philosophy very well, by not imposing a specific type of container in order to distribute your apps, and by keeping as close as possible to "normal", standalone, plain application execution. For exhaustive documentation, download the Corus Guide.