May 21, 2015
Background
‣ SmartOS is great
‣ zones‣ dtrace‣ zfs‣ crossbow‣ kvm
Background
‣ ... not so great
‣ single user‣ one system‣ root access‣ direct access
‣ SmartOS is great
‣ zones‣ dtrace‣ zfs‣ crossbow‣ kvm
SAD!
FiFo to the Rescue!
Seems like there is no solution...
FiFo to the Rescue!
... Oh! You still want one?
FiFo to the Rescue!
Guess you have to find one yourself!
Users
‣ central management‣ SSH keys‣ permissions (treeish)‣ roles/groups
Virtual machines
‣ create / edit / destroy‣ noVNC / Console‣ SSH access (for zones)‣ snapshots‣ some metrics
Hypervisors
‣ pick the best‣ metrics‣ warnings
Cool Stuff‣ distributed dtrace‣ and visualization‣ dataset creation‣ distributed (riak_core ;)‣ CRDT‘s‣ 100% open source and free!
HAPPY!
Things learned...
build modular‣ ‘small‘ applications that work together‣ specializing codebase‣ well defined interfaces‣ makes things reusable‣ abstract in libraries
the mDNS trick
‣ auto discover services‣ failure auto decays‣ auto recovery‣ kind of extending OTP over the network
don‘t model for representation
‣ JSON is nice for an API‣ BUT! don‘t structure your data to match you representation‣ nice at the borders‣ a mess in the center
Erlang - the good
‣ fault tolerance / ‘self healing‘‣ distributed architecture‣ yadda yadda yadda - you know it!
mindset and culture
Erlang - the bad
‣ unix processes (ports)‣ working as part of (SFM)‣ unix pipes‣ missing libraries‣ sloppy versioning of libs
DEEP DIVE
snarl‣ right management‣ users‣ groups / roles‣ organizations‣ stand alone / totally reusable!‣ client library
Distributed over riak_core
Distributed over riak_core
LWW RegisterLWW Register----------------------------------------------------
--namename----------------------------------------------------
--hashhash----------------------------------------------------
--active_orgactive_org======================
======ORSets (GC’ed)ORSets (GC’ed)
------------------------------------------------------
permissionspermissions----------------------------------------------------
--groupsgroups----------------------------------------------------
--organizationsorganizations======================
======StateboxStatebox
------------------------------------------------------
metadatametadata
LWW RegisterLWW Register----------------------------------------------------
--namename----------------------------------------------------
--hashhash----------------------------------------------------
--active_orgactive_org======================
======ORSets (GC’ed)ORSets (GC’ed)
------------------------------------------------------
permissionspermissions----------------------------------------------------
--groupsgroups----------------------------------------------------
--organizationsorganizations======================
======StateboxStatebox
------------------------------------------------------
metadatametadata
User
Distributed over riak_core
LWW RegisterLWW Register--------------------------------------------
----------namename--------------------------------------------
----------hashhash--------------------------------------------
----------active_orgactive_org==================
==========ORSets (GC’ed)ORSets (GC’ed)--------------------------------------------
----------permissionspermissions--------------------------------------------
----------groupsgroups--------------------------------------------
----------organizationsorganizations==================
==========StateboxStatebox
------------------------------------------------------
metadatametadata
LWW RegisterLWW Register--------------------------------------------
----------namename--------------------------------------------
----------hashhash--------------------------------------------
----------active_orgactive_org==================
==========ORSets (GC’ed)ORSets (GC’ed)--------------------------------------------
----------permissionspermissions--------------------------------------------
----------groupsgroups--------------------------------------------
----------organizationsorganizations==================
==========StateboxStatebox
------------------------------------------------------
metadatametadata
User
Ran
ch
TC
P S
erv
er
/ m
DN
S
Ran
ch
TC
P S
erv
er
/ m
DN
S
bro
ad
cast
bro
ad
cast
Ran
ch
TC
P S
erv
er
/ m
DN
S
Ran
ch
TC
P S
erv
er
/ m
DN
S
bro
ad
cast
bro
ad
cast
poole
r +
gen
_tcp
/ m
dn
s lis
ten
er
poole
r +
gen
_tcp
/ m
dn
s lis
ten
er
poole
r +
gen
_tcp
/ m
dn
s lis
ten
er
poole
r +
gen
_tcp
/ m
dn
s lis
ten
er