Two fully distributed algorithms for online service coordination. All nodes runs the algorithm individually and in parallel to decide how to scale and where to place service components as well as how to route incoming flows through the placed instances.
This fully distributed approach reaches similar solution quality as centralized approaches but is more robust, requires less global knowledge, and is magnitudes faster.
This repository contains prototype implementations of both algorithms,
extends coord-sim
for simulation, and contains extensive evaluation results.
If you use this code, please cite our paper:
@inproceedings{schneider2020distributed,
title={Every Node for Itself: Fully Distributed Service Coordination},
author={Schneider, Stefan and Klenner, Lars Dietrich and Karl, Holger},
booktitle={International Conference on Network and Service Management (CNSM)},
year={2020},
publisher={IFIP/IEEE}
}
Requires Python 3.6+. All dependencies can be installed with:
python setup.py install
For evaluation, also install these dependencies:
pip install -r eval_requirements.txt
- All relevant scripts for running experiments are in
src/algorithms/execution
- The folders
time
and3x3
are for different experiments but contain similar scripts. Choose either one or create a new one. - Create configurtion files by running
config_creator.py
. The generated configurations specify percentage of ignress nodes, capacities, etc. - Adjust the network, algorithms, ingress in
iterator.py
- Then call
python iterator.py start_run end_run num_parallel poll_pause
to run experiments. - For example
python iterator.py 50 55 4 5
will run 6 repetitions (ID 50-55) on 4 cores, polling every 5s if a core is free. - The results are saved in the subfolder
scenarios
according to run ID, config, algorithm, etc. - Attention:
python iterator.py
silently overwrites existing results!
- To evaluate the results, aggregate and plot them.
- To aggregate, run
aggregator.py
. You can adjust settings insettings.py
. - In case of 3x3, also specify the runs to aggregate, eg,
python aggregator.py 0 49
. - Then plot with
plotter.py
. Or easier using/extending the available Jupyter notebooks underexecution
:3x3/eval.ipynb
,3x3/eval_decisions.ipynb
,time/eval.ipynb
. - These notebooks use and plot the available evaluation results, which are stored in the
scenarios
andtransformed
folders.
For simulation, the coord-sim
simulator was extended as follows:
- Forwarding capabilities. Prior to this, forwarding happened implicit. Now flows are explicit forwarded over link, taking into account individual link utilization
- Individual flow forwarding rules. A node can make a forwarding decision on individual flows.
- Individual flow processing rules. A node can explicit decide if it will process a flow.
- Extended simulator state and action interface.
- Algorithm callback interface. To allow a external algorithm to capture certain event, it can register callback functions invoked by the flowsimulator.
- init_flow callback
- pass_flow callback
- periodic measurement callbacks.
- Adapted metrics.
- Egress node routing.
- Extended simulator configuration
- Main development: @ldklenner
- Advisor: @stefanbschneider
Please use GitHub's issue system to file bugs or ask questions.