README.md 2.86 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
51

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)
* abt-snoozer (git clone https://xgitlab.cels.anl.gov/sds/abt-snoozer)
* libev (e.g libev-dev package on Ubuntu or Debian)

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

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

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

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

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

Jonathan Jenkins's avatar
Jonathan Jenkins committed
62
63
64
65
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).