• This repository has been archived on 27/Dec/2022
  • Stars
    star
    322
  • Rank 129,734 (Top 3 %)
  • Language
    Ruby
  • License
    Apache License 2.0
  • Created over 13 years ago
  • Updated over 11 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Lightweight node/service registry inspired by Apache Zookeeper

(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.

More Repositories

1

chef-logstash

Semi-official Logstash cookbook
Ruby
271
star
2

chef-kibana

A Chef cookbook for Kibana3
Ruby
86
star
3

lua-httpclient

A unified http/s client library for lua
Lua
70
star
4

sensu_influxdb_handler

A sensu handler for sending metrics to influxdb
Ruby
43
star
5

go-rundeck

Library and Utilities for interacting with Rundeck from Go
Go
36
star
6

logstash-shipper

Lightweight log shipper for logstash
Python
33
star
7

nginx-sticky-module

Fork of https://code.google.com/p/nginx-sticky-module/ with important patches applied
C
28
star
8

sample-python-omnibus-app

A sample omnibus project for building a python package
Ruby
23
star
9

vogeler

Python-based CMDB
Python
22
star
10

lua-github

Lua wrapper for talking to the github api
Lua
22
star
11

go-artifactory

Go library and utilities for interacting with Artifactory
Go
21
star
12

zmq-appender

log4j zeromq appender
Java
19
star
13

lusis-cookbooks

Some custom cookbooks for Opscode's Chef
Ruby
18
star
14

logstash_handler

Ruby
17
star
15

lubot

Lua Chatbot running inside OpenResty
Lua
16
star
16

htmxtools

Go code for working with htmx
Go
14
star
17

slack-test

Golang library for testing slack RTM chatbots
Go
12
star
18

exabgp_exporter

Promtheus exporter for exabgp
Shell
10
star
19

ngx_stream_upstream_check_module

Upstream health checks for nginx streams
Perl
9
star
20

sysadvent-2014

Repo to go along with my sysadvent 2014 post
Lua
9
star
21

discotheque

Discovery in a gem
7
star
22

padrino-ripple-demo

Demonstration of Padrino and Ripple
Ruby
7
star
23

opentsdb-ruby

Ruby interface to OpenTSDB - Nothing here yet. Just starting work
Ruby
7
star
24

padrino-ohm-demo

Demonstration of Padrino and Redis via Ohm with Admin Console
Ruby
6
star
25

zombie-rss

Because RSS is dead....
JavaScript
6
star
26

padrino-mongomatic-example

An example application using mongomatic with padrino
Ruby
6
star
27

rasskey

Ruby ASCII Drawing Library
Ruby
5
star
28

erlang-and-centos

Some notes/tarballs for erlang applications on CentOS
5
star
29

omnibus-riak

Omnibus packaging of Riak
Ruby
5
star
30

gelfd

A standalone server + library for handling GELF messages
Ruby
5
star
31

fpm-scripts

Set of scripts to build various packages with fpm
Shell
5
star
32

outputter

A small library for handling cli output in a few common formats
Go
4
star
33

enterprise-zeromq-broker

Previously unreleased private Enterprise-class clustering ZeroMQ Broker
Ruby
4
star
34

boat

Ruby Command-line and REST API client for Noah
Ruby
4
star
35

hubot-dnsmadeeasy

Hubot script for interacting with the DNS Made Easy API
CoffeeScript
4
star
36

vim-configs

My personal vim configs
Vim Script
4
star
37

opgine

Reusable functional option engine
Go
3
star
38

test-sinatra-app

A Test Sinatra Application for MRI and JRuby packaging tests
Ruby
3
star
39

omnibus-redis

Ruby
3
star
40

chef-gitpaste

Chef cookbook for gitpaste
Ruby
3
star
41

apithings

Collection of api-first tools and utilities
Go
3
star
42

noah-cloudfoundry-demo

Ruby
3
star
43

omnibus-omnibus-omnibus

Inception
Ruby
3
star
44

commandeer

Ruby
3
star
45

irccloud-chrome-ssb

Makes irccloud.com into a chrome hosted app
3
star
46

Ruby-EWS

Simple example of accessing Microsoft Exchange Web Services via Ruby
Ruby
2
star
47

noah-agent

Core Noah Watch Processor
Ruby
2
star
48

logrus_sumologic_hook

Sumologic hook for logrus. Pretty basic at the moment
Go
2
star
49

enstratus-ruby

Ruby Library for interacting with the enStratus API
Ruby
2
star
50

code-katas

Just some "knock the cobwebs out" code katas I keep around
2
star
51

noah-agents-dummy2

Sample Noah watcher agent plugin
Ruby
1
star
52

pkg

Some various go packages I tend to reuse in my projects
Go
1
star
53

noah-callbackd

Official watcher callback daemon for Noah
Ruby
1
star
54

sqlvgo

RIP John. Nerdsnipped
TSQL
1
star
55

Ruby-Downtime

Simple utility for scheduling reoccuring downtime in Nagios
Ruby
1
star
56

lusis.github.com

My blog - on the Hubs
HTML
1
star
57

leverage

Ruby
1
star
58

dropwizard-opencensus

OpenCensus Dropwizard Bundle for Tracing
Java
1
star
59

ark

Git-backed not-so-schema-less data store
Ruby
1
star
60

statusthing

Open source statuspage platform
Go
1
star
61

noah-agents-core

Core callback agents for Noah
Ruby
1
star
62

experiments

Me experimenting with random shit - usually in random languages
Ruby
1
star
63

old-one-offs

Just some old code I found laying around on my old web server
1
star
64

chef-client-mysql

Omnibus project for chef-client with the mysql gem preinstalled
Ruby
1
star