Noah

Lightweight node/service registry inspired by Apache Zookeeper

  • 所有者: lusis/Noah
  • 平台:
  • 许可证: Apache License 2.0
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

(please read here before continuing)

Noah

"look at this effing rainbow I just made for you"

Noah is an application registry inspired by Apache ZooKeeper

What does that mean? From the ZooKeeper Home Page:

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.

Essentially Noah is a port of parts of that functionality into a stateless RESTish application.

Some background

It's probably worth reading the following blog posts before going any further to clear up any possible misunderstandings.
Noah is not a direct replacement for ZK. It's a conceptual port. More than anything, it was an itch I needed to scratch:

Also the following post was where I sort of discussed it early on:

Things Noah does not do

  • Paxos, ZAB or any other sort of consensus protocol
  • Noah itself is not distributed (yet).
  • ACLs (yet)
  • Leader election of any kind

Things Noah can do

note that these terms are fairly overloaded depending on who you talk to

  • Service registry
  • Node registry
  • Configuration Registry
  • Group Services
  • Watches (albeit differently)

Quick Start

The quickstart guide has been moved to the wiki:

Quick Start Guide

Design Goals

Noah has a few basic design goals:

  • The system MUST support RESTful interaction for operations where REST maps properly
  • The system MUST support basic concepts of hosts, services, applications and configurations
  • The system MUST support horizontal scaling.

Additionally:

  • The system SHOULD be flexible in deployment options.
  • The system SHOULD support watches similar to ZooKeeper
  • The system SHOULD support pluggable callbacks for watches.
  • The system SHOULD support being a client of itself.

Opinionated Stack

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:

The above stack provides much of the functionality needed to port over ZooKeeper concepts.

Redis

Redis is the backbone of the system. Through the native datatypes and pubsub capabilities, much of the heavy lifting has already been done.

Sinatra

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.

Ohm

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

EventMachine

EventMachine combined with Redis pubsub forms the basis of the Watcher and callback system.

Motivation

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.

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.

More information

Here are a list of some key wiki pages:

  • Concepts
    How Noah views various object types in the system
  • API
    The API is currently in draft state. It will be finalized before the 1.0 release.
  • Example Use Cases
    Some use cases for Noah and how it would fit into an existing application or infrastructure
  • Watchers and Callbacks
    The general idea behind how Noah would implement watches
  • Watcher/Callback Examples
    Some example callbacks.

主要指标

概览
名称与所有者lusis/Noah
主编程语言Ruby
编程语言Ruby (语言数: 3)
平台
许可证Apache License 2.0
所有者活动
创建于2011-01-15 21:30:49
推送于2013-03-03 19:59:34
最后一次提交2013-03-03 14:59:34
发布数13
最新版本名称0.8.7 (发布于 )
第一版名称pre-merge (发布于 )
用户参与
星数322
关注者数17
派生数160
提交数228
已启用问题?
问题数16
打开的问题数13
拉请求数2
打开的拉请求数0
关闭的拉请求数3
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?