aboutsummaryrefslogtreecommitdiff

dreki

Dreki manages infrastructure.

Each of your physical nodes should run Dreki, and that makes the "world".

Terminology:

  • world the overall "cluster"
  • node a machine, jail, container, vm..
  • peer a dreki running on a node

Dreki "core" is made of:

  • Partisan distribution
  • A global eventually consistent store (plum_db)
  • Resolvable URNs
  • Simple store abstraction

URNs address everything in Dreki and allows to mix multiple kind of data sources (called stores).

Currently, two kind of stores exists:

  • The plum_db store, called "global", eventually consistent and replicated everywhere,
  • Mnesia/DETS local store

All stores are queryable from all nodes, resorting to Partisan RPC if the store is local.

The world is a hierarchical acyclic graph, based on DNS. Members of World are regions and nodes:

world.domain
|- eu
   |- fr
   |  |- ovh
   |  | |- sbg1
   |  | |  `- **node1**
   |  | |`- rbx1
   |  | |   `- **node2**
   |  |- scw
   |  | |- dc2
   |  | | `- **node3**
   |  | `- dc5
   |  |   |- **node4**
   |- de
   |  ` hzn
   |   |  |- fsn1
   |   |  |  `- **node6**
   |- ch
   |  `- exo
   |     `- gnv
   |        `- **node5**

Each region must define a or many member entries: _dreki.region IN SRV 0 0 1337 sub.region, _dreki.region IN SRV 0 0 1337 node.region.

A region can be given a friendly name by defining in _dreki.region IN TXT "Some cute name".

A node is defined by creating a node entry: _node._dreki.name IN SRV 0 0 PORT dns.name., and: * can be given a friendly name by defining _name._dreki.name IN TXT "Some cute name", * can be given a node name (erlang) by defining:_node._name._dreki.name IN TXT "dreki2@node2"` (usually not needed!).

Dreki uses partisan as membership system and uses multiple databases:

  • plum_db (world-wide, eventually consistent) for world metadata (called <<"global">>)
  • ?? ra ??
  • mnesia locally (usually called <<"local">>)
  • whatever you want :) see dreki_store and dreki_store_backend behaviour!

TODO: A consistent K/V store backed by Ra, automagically made for each region!

Everything in Dreki is addressable and addressed by Dreki URNs (see doc/URNs.md).

A dreki peer may represent a node and may create nodes.

Stores:

  • "inf.random.sh::qqch::id"
  • "inf.random.sh:eu:fr:scw:dc2::qqch::id"