Skip to content
jnblanchet edited this page Aug 29, 2013 · 12 revisions

NRV is a flexible, fault-tolerant and scalable cluster-aware RPC Scala framework with a REST twist. Its goal is to ease the creation of distributed systems running on a cluster of machines.

Quick overview

NRV is built to support multiple distributed services on a single cluster. Those services are distributed on a set of nodes via service members. These service members can be moved from one node to another, distributed evenly between all nodes or even all stacked on a single node. Service members therefore make it possible to control the load. This is similar to Amazon's Dynamo, which allows flexible load balancing.

![Basic NRV overview](https://raw.github.com/wajam/nrv/master/docs/basic_nrv_intro.png)
_NRV overview_

A NRV service is a highly customizable set of responsibilities behind a custom API. Using consistent hashing, each query on the service will be redirected to a specific node on the cluster, thus allowing the cluster to scale horizontaly by naturally spreading the traffic on service members. Various protocols can be implemented for interoperability. NRV currently supports the wide-spread HTTP protocol for external queries, and a custom NRV protocol for interoperability with other NRV based applications. The data exchange over these protocol may be encoded using custom codecs as well. A JSON codec and a custom NRV codec based on Protobuf are currently supported.

Documentation

Other references

  • The SPKR demo project is a highly documented, detailed example of how NRV (and other frameworks) can be used to build a simple distributed server application.
  • SPKR also includes a short conceptual introduction to fundamental concepts used by NRV on its wiki page

Clone this wiki locally