network-map

0.0.1 • Public • Published

network-map

Network Coordinate System based on latency

Network coordinate systems assign each node a position in the chosen space. The distance in the space is then equal to the latency. The aim is to find such coordinates in the space that predict the latency with the lowest error. There are various algorithms used for assigning the coordinates to the nodes. These algorithms typically work with the n-dimensional Euclidian or non-Euclidian spaces.

API

make_db()

Create a hyperbee db instance

update(db, rtt, local_node, remote_node)

Update position of the local node

store_pos(db, nodes) // const node = [{ id, pos, opts }]

Store positions of selected nodes in the db

get_pos

Get position for the selected key from the db

get_map

Create a read stream from the db

get_val

Get value for selected key from the db

const network_map = require('network-map')()

// create a hypercore db instance

const db = network_map.make_db.then(db => {
  // measure RTT and update syntetic network coordinates accordingly  
  const updated = await network_map.update_coordinates({ db, rtt, local_node, remote_node })
  // => bool
})

Vivaldi algorithm

  • synthetic coordinates (used to predict the RTT between 2 nodes)
  • error (estimated difference between rtt and calculated distance; squared-error function)
  • distance function - predicts the latency (RTT)
  • i moves a small distance in the direction of the force (force to minimize error) to coordinates that predict error well - each node computes and continuously adjusts its coordinates based only on measured RTTs from the node to a handful of other nodes and the current coordinates of those nodes.

Source: http://conferences.sigcomm.org/sigcomm/2004/papers/p426-dabek111111.pdf

How vivaldi works

Node i has measured node j to be rtt ms away, and node j says it has coordinates xj

simple vivaldi(rtt, xj)

Compute error of this sample. (1) e = rtt − kxi − xjk

Find the direction of the force the error is causing. (2) dir = u(xi − xj)

The force vector is proportional to the error (3) f = dir × e

Move a a small step in the direction of the force. (4) xi = xi + δ × dir

Dependents (0)

Package Sidebar

Install

npm i network-map

Weekly Downloads

0

Version

0.0.1

License

MIT

Unpacked Size

6.25 kB

Total Files

4

Last publish

Collaborators

  • ninabreznik