Lightweight node and service registry based on Zookeeper
</div>
<p>Noah is an application registry loosely based on <ahref="http://zookeeper.apache.org">Apache ZooKeeper</a></p>
<p>What does that mean? From the ZooKeeper Home Page:</p>
<blockquote><p>ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications.</p></blockquote>
<p>Essentially Noah, is a port of those concepts into a stateless RESTful application.</p>
<h2>Quick Start</h2>
<p>The quickstart guide has been moved to the wiki:</p>
<p><i>ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services</i></p>
<p>Noah has a few basic design goals:</p>
<p>Noah is not quite the same as but heavily inspired by Apache Zookeeper.</p><h2>Dependencies</h2>
<ul>
<ul>
<li>sinatra</li>
<li>The system <strong>MUST</strong> support RESTful interaction for operations where REST maps properly</li>
<li>redis</li>
<li>The system <strong>MUST</strong> support basic concepts of hosts, services, applications and configurations</li>
<li>ohm</li>
<li>The system <strong>MUST</strong> support horizontal scaling.</li>
</ul>
</ul>
<h2>Install</h2>
<p>gem install noah </p>
<h2>License</h2>
<p>Apache 2.0</p>
<h2>Authors</h2>
<p>John E. Vincent (lusis.org+github.com@gmail.com)<br/><br/></p>
<h2>Contact</h2>
<p>John E. Vincent (lusis.org+github.com@gmail.com)<br/></p>
<h2>Download</h2>
<p>
You can download this project in either
<ahref="http://github.com/lusis/Noah/zipball/master">zip</a> or
get the source code on GitHub : <ahref="http://github.com/lusis/Noah">lusis/Noah</a>
</div>
</div>
<p>Additionally:</p>
<ul>
<li>The system <strong>SHOULD</strong> be flexible in deployment options.</li>
<li>The system <strong>SHOULD</strong> support watches similar to ZooKeeper</li>
<li>The system <strong>SHOULD</strong> support pluggable callbacks for watches.</li>
<li>The system <strong>SHOULD</strong> support being a client of itself.</li>
</ul>
<h2>Opinionated Stack</h2>
<p>Noah is somewhat opinionated in its stack. Noah attempts to minimize the external requirements wherever possible to allow for the widest possible installation options.
However, excellent work has been done to create performant and well-tested libraries that would be foolish to ignore. To this end, the current requirements are:</p>
<p>The above stack provides much of the functionality needed to port over ZooKeeper concepts.</p>
<h3>Redis</h3>
<p>Redis is the backbone of the system. Through the native <ahref="http://redis.io/commands">datatypes</a> and <ahref="http://redis.io/commands#pubsub">pubsub</a> capabilities, much of the heavy lifting has already been done.</p>
<h3>Sinatra</h3>
<p>Sinatra is the perfect library for creating API-only style applications. It allows you do focus on the meat of what an endpoint should do instead of the hassle of creating the endpoint.</p>
<h3>Ohm</h3>
<p>Ohm is quite simply the most unobtrusive and flexible orm for Redis. It gets out of the way and allows you to very easily interact directly with Redis if the need arises</p>
<h3>EventMachine</h3>
<p>EventMachine combined with Redis pubsub forms the basis of the Watcher and callback system.</p>
<h2>Motivation</h2>
<p>It's something I've wanted to do for a while. Everytime I've needed something like Zookeeper, Zookeeper has always been too bulky and had too many moving parts. I've also always needed to interact with it from more than just Java or C. Sometimes it's been Ruby and sometimes it's been Python.</p>
<p>In the end, we reinvent the wheel ANYWAY. Maybe we do something like have our CM tool write our application config files with a list of memcached hosts. Maybe we write our own logic around (shudder) RMI to do some chatty broadcasting around the network for finding local nodes of type X. We always reinvent the wheel in some way.</p>
<h2>More information</h2>
<p>Here are a list of some key <ahref="https://github.com/lusis/Noah/wiki">wiki</a> pages:</p>