frodoio

3.1.0 • Public • Published

Frodo.io

Build Status

Introduction

Sync your request to the same node with frodo.

Frodo.io uses etcd and hashring to provide you with a server by some key.

Simple use case: clustered database that accessed by a clustered layer that wraps it. The changes on an entity should go through the same server to prevent inconsistency.

How to use

Simple test app that register servers and then uses them to get id would be:

  var Frodo = require('frodoio');
  var frodo = new Frodo({ context: 'appname', etcdServers: [ { host: '127.0.0.1', port: 4001 } ]});
  Q.all(frodo.addServer('dataacess1:3030'),
    frodo.addServer('dataacess2:3030'),
    frodo.addServer('dataacess3:3030')).then(function () {
      frodo.serverById(function (server) {
        request.put('http://' + server + '/entity');
      });
    });

But this application does not make any sense, because you probably want to addServer from the server and run serverById from the client. Server:

  var Frodo = require('frodoio');
  var frodo = new Frodo({ context: 'appname', etcdServers: [ { host: '127.0.0.1', port: 4001 } ]});
  
  // http://stackoverflow.com/questions/3653065/get-local-ip-address-in-node-js
  var ip = _.chain(require('os').networkInterfaces()).flatten().filter(function(val){ return (val.family == 'IPv4' && val.internal == false) }).pluck('address').first().value(); 
  var me = ip + ':3030';
  
  function start(done) {
    frodo.addServer(me).then(done);
  }
  
  function stop(done) {
    frodo.removeServer(me).then(function () {
      frodo.close().then(done);
    });
  }

Client:

  var Frodo = require('frodoio');
  var frodo = new Frodo({ context: 'appname', etcdServers: [ { host: '127.0.0.1', port: 4001 } ]});
  frodo.serverById(function (server) {
    request.put('http://' + server + '/entity');
  });

Any comments/suggestions/pull requests would be appreciated!

License

Apache

Readme

Keywords

Package Sidebar

Install

npm i frodoio

Weekly Downloads

13

Version

3.1.0

License

none

Last publish

Collaborators

  • noamshemesh
  • bigpanda