Clusterlib
Clusterlib copied to clipboard
Library and tools for building distributed applications
README for clusterlib
Large-scale distributed applications are difficult and time-consuming to develop since a great deal of effort is spent solving the same challenges (consistency, fault-tolerance, naming problems, etc.). Additionally, coordinating these applications is typically ad-hoc and hard to maintain. Clusterlib fills the gap by providing distributed application developers with an object-oriented data model, asynchronous event handling system, well-defined consistency semantics, and methods for making coordination easy across cooperating applications.
Package Contents:
Clusterlib library
- Infrastructure for building and managing distributed applications
ActiveNode
- A process that is designed to be run on a physical node and manages processes started through clusterlib's process management system. It will create a clusterlib Node in the clusterlib object hierarchy and register a health checker for reporting health.
Zookeeper user interface (ZKUI)
- An http server that can display and manipulate Zookeeper znodes or clusterlib objects
Command line interface (CLI)
- Can make changes to clusterlib objects from the command line with this tool. It also can be used as an interactive shell for manipulating clusterlib objects
Unittests
- Can be run in single or multiple process node and tests the correctness of many APIs. It is only compiled when MPICH can be found.
Source Directory Structure:
docs Doxygen generated content and notes src/activenode ActiveNode implmentation src/cli CLI implementation src/core Internal clusterlib objects implementation src/core/md5 MD5 implementation from RSA Data Security, Inc. src/example Several example programs that use clusterlib object src/gui Base directory for ZKUI src/gui/conf Configuration files for ZKUI process src/gui/regressions ZKUI regression tests src/gui/src ZKUI imlplementation src/gui/unittest ZKUI unittests src/gui/webroot Directory that is served by the ZKUI server src/include Include files for application developer consumption misc Miscellaneous scripts or configuration files regressions Clusterlib regression tests unittests Clusterlib unittests
Generated directory structure:
zookeeperServerDir Directory for storing Zookeeper data for testing install Generated from 'make package': the essential headers, library, configuration files, and executables
Required Dependencies:
boost regex (http://www.boost.org) zookeeper (http://hadoop.apache.org/zookeeper/) logcxx (http://logging.apache.org/log4cxx/)
Optional Dependencies:
cppunit - Core library unit tests mpich2 - clusterlib unittests readline, ncurses - CLI tab completion libmicrohttpd - ZKUI apr-1, aprutil-1 - ZKUI XML parsing boost auto_unit_test - ZKUI unittests doxygen - Doxygen documentation
Building:
autoreconf -if Set the CXX, CXXFLAGS, CPPFLAGS, and LDFLAGS appropriately. ./configure make
Running Core Unittests:
make check
More details and options on how to run unittests are in the directory unittests.
Extending clusterlib:
Add new Notifyable objects (subclass Notifyable)
- Create an interface (i.e. class Application)
- Create an implementation (i.e. class ApplicationImpl)
- (optional) Create cached interfaces (i.e. class CachedKeyValues)
- (optional) Create cached implementation (i.e. class CachedKeyValuesImpl)
- Register your implementation in FactoryOps (i.e. registerNotifyable())
=====================
Clusterlib used several 3rd party open source libraries and tools. The following portions of this file summarize the tools used, their purpose, and the licenses under which they're released.
Except as specifically stated below, the 3rd party software packages are not distributed as part of this project, but instead are separately downloaded from the respective provider and built on the developer's machine as a pre-build step.
boost -Source: http://www.boost.org/ -License: http://www.boost.org/LICENSE_1_0.txt
log4cxx -Source: http://logging.apache.org/log4cxx/download.html -License: Apache License, Version 2.0
zookeeper -Source: http://hadoop.apache.org/zookeeper/releases.html -License: Apache License, Version 2.0
libmicrohttpd -Source: http://gnunet.org/libmicrohttpd/ -License: LGPL
The following 3rd Party code is included as part of this Project:
md5 test driver -Souce: RSA Data Security, Inc. -License: none
bluff.js 0.3.4 -Source: http://bluff.jcoglan.com/ -License: MIT
excanvas.js 0.4.0 (optional) -Source: http://code.google.com/p/explorercanvas/ -License: Apache License, Version 2.0
query.zend.jsonrpc.js 1.0 -Source: http://blog.jtclark.ca/tag/javascript/ -License: MIT
jQuery UI 1.8.5 -Source: http://jqueryui.com/ -License: MIT
jQuery JavaScript Library 1.4.2 -Source: http://jquery.com/ -License: MIT
TableSorter 2.0.3 -Source: http://tablesorter.com/docs/ -License: MIT and GPL
jQuery File Tree Plugin 1.01 -Source: http://abeautifulsite.net/2008/03/jquery-file-tree/ -License: Creative Commons 3.0
js-class.js -Source: http://jsclass.jcoglan.com/ -License: MIT
parseUri 1.2.1 -Source: http://blog.stevenlevithan.com/archives/parseuri -License: MIT