README.md 2.79 KB
Newer Older
Shane Snyder's avatar
Shane Snyder committed
1
# SSG (Scalable Service Groups)
Jonathan Jenkins's avatar
Jonathan Jenkins committed
2

Shane Snyder's avatar
Shane Snyder committed
3 4 5 6 7 8 9 10
SSG is a group membership microservice based on the Mercury RPC system.
It provides mechanisms for bootstrapping sets of Mercury processes into
logical groups and for managing the membership of these process groups
over time. At a high-level, each group collectively maintains a _group view_,
which is just a mapping from group member identifiers to Mercury address
information. The inital group membership view is specified completely
when the group is bootstrapped (created). Currently, SSG offers the
following group bootstrapping methods:
Jonathan Jenkins's avatar
Jonathan Jenkins committed
11

Shane Snyder's avatar
Shane Snyder committed
12 13 14
- MPI communicator-based bootstrap
- config file-based bootstrap
- generic bootstrap method using an array of Mercury address strings
Jonathan Jenkins's avatar
Jonathan Jenkins committed
15

Shane Snyder's avatar
Shane Snyder committed
16
Process groups are referenced using unique group identifiers
Shane Snyder's avatar
Shane Snyder committed
17 18
which encode Mercury address information that can be used to connect
with a representative member of the group. These identifiers may be
Shane Snyder's avatar
Shane Snyder committed
19 20 21
transmitted to other processes so they can join the group or attach to
the group (_attachment_ provides non-group members a way to access a
group's view). 
Shane Snyder's avatar
Shane Snyder committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Optionally, SSG can be configured to use the [SWIM failure detection and
group membership protocol](http://www.cs.cornell.edu/~asdas/research/dsn02-SWIM.pdf)
internally to detect and respond to group member failures. SWIM uses a
randomized probing mechanism to detect faulty group members and uses an
efficient gossip protocol to dissmeninate group membership changes to other
group members. SSG propagates group membership view updates back to the SSG
user using a callback interface.

__NOTE__: SSG does not currently support group members dynamically leaving
or joining a group, though this should be supported in the near future.
This means that, for now, SSG groups are immutable after creation.
When using SWIM, this means members can be marked as faulty, but they
cannot be fully evicted from the group view yet.

__NOTE__: SSG does not currently allow for user-specified group member
identifiers, and instead assigns identifiers as dense ranks into the
list of address strings specified at group creation time. That is,
the group member with the first address string in the list is rank 0,
and so on.

## Dependencies

* mercury (git clone --recurse-submodules https://github.com/mercury-hpc/mercury.git)
* argobots (git clone https://github.com/pmodels/argobots.git)
* margo (git clone https://xgitlab.cels.anl.gov/sds/margo.git)
* libev (e.g libev-dev package on Ubuntu or Debian)

## Building
Jonathan Jenkins's avatar
Jonathan Jenkins committed
51 52 53 54

(if configuring for the first time)
./prepare.sh

Shane Snyder's avatar
Shane Snyder committed
55
./configure [standard options] PKG\_CONFIG\_PATH=/path/to/pkgconfig/files
Jonathan Jenkins's avatar
Jonathan Jenkins committed
56

Jonathan Jenkins's avatar
Jonathan Jenkins committed
57
make
Jonathan Jenkins's avatar
Jonathan Jenkins committed
58

Jonathan Jenkins's avatar
Jonathan Jenkins committed
59 60
make install

Jonathan Jenkins's avatar
Jonathan Jenkins committed
61 62 63 64
MPI support is by default optionally included. If you wish to compile with MPI
support, set CC=mpicc (or equivalent) in configure. If you wish to disable MPI
entirely, use --disable-mpi (you can also force MPI inclusion through
--enable-mpi).