ClusterJuggler is our third generation of clustering software. Based on our past experiences, we have created a system that combines recommended practices of clustering into a modular and extensible system. This clustering research contributes several innovations:
Layered clustering architecture: ClusterJuggler is based upon a layered architecture that separates the clustering components into several major subsystems. This allows for a high degree of modularity in the system.
Plugin system: ClusterJuggler provides an architecture for dynamically loading cluster plug-ins. These plug-ins extend the core system with specialized clustering functionality.
Reconfiguration: ClusterJuggler allows the cluster to be reconfigured at run-time. Systems, displays and devices can be added, removed or reconfigured as needed.
As Figure 1.1, “Cluster Juggler Layered Architecture” shows, ClusterJuggler is comprised of a set of components that are arranged into several layers. This technique was chosen to make the system as modular as possible. Each modular layer only uses the functionality provided to it by the layers below it.
Cluster Manager Layer. The Cluster Manager layer is responsible for the configuration of all layers in ClusterJuggler and managing the active plugins (Figure 1.2, “ClusterManager and Plugins”). This includes maintaining a list of all current plugins and synchronizing the calls to each plugin to perform their specialized tasks. Plugins are added to the system when a new plugin registers itself with theClusterManager.
Cluster Network Layer. The Cluster Network layer maintains an abstract representation of the system of interconnected nodes that comprise the cluster (Figure 1.2, “ClusterManager and Plugins”). This abstraction provides the rest of the system with a messaging interface for communicating with the entire cluster. Internally it maintains a list of each node in the cluster along with the network connection used to communicate with it. Because the networking layer is an abstraction, developers can provide different implementations that make use of alternative low-level networking methods. The networking implementation can then be configured by the user.
Cluster Plugins Layer. ClusterJuggler is based on a plugin architecture that allows the system to be modular and extensible. Plugins are dynamically loaded on demand at run-time. This allows users and developers to easily add new plugins to support additional cluster-based functionality. All ClusterJuggler plugins are derived from a common base interface: ClusterPlugin. To create a new plugin, a developer must implement a few of the base interface methods. In return, they get a support for network communication, synchronization, and run-time reconfiguration.
ClusterJuggler provides several commonly used plugins that serve as the base for clustering in VR Juggler and as examples for other developers to extend the system. These base plugins are the RemoteInputManager, ApplicationDataManager, and SwapLockManager. The RemoteInputManager plugin is responsible for distributing synchronized device data across the cluster. The ApplicationDataManager provides developers with a method for sharing application data within a clustered application. The SwapLockManager implements several methods for synchronizing display updates within a cluster. We plan to add additional plugins in the future to support extended clustering functionality.