DA-Placer methodology is described and assessed in:
Jacopo Massa, Stefano Forti, Antonio Brogi
Data-Aware Service Placement in the Cloud-IoT Continuum,
Communications in Computer and Information Science, vol 1603 @ SummerSOC, 2022.
If you wish to reuse source code in this repo, or mention our work, please consider citing the above mentioned article:
@inproceedings{massa2022daplacer,
title = {{Data-Aware Service Placement in the Cloud-IoT Continuum}},
author = {Massa, Jacopo and Forti, Stefano and Brogi, Antonio},
year = 2022,
booktitle = {Service-Oriented Computing},
publisher = {Springer International Publishing},
editor = {Barzen, Johanna and Leymann, Frank and Dustdar, Schahram},
pages = {139--158}
}
DA-Placer is a tool for designing and proposing an eligible placement and a suitable routing strategy for a given service-oriented application within its data and requirements, over a given Cloud-IoT infrastructure.
It exploits the backtracking of the Prolog reasoner to entirely explore the search space of possible solutions, and a continuous reasoning approach to speed-up the decision making process at runtime, after a first eligible solution has been found.
As it is written in Prolog, it is very declarative and concise (≃ 170 lines of code), which allows to have a high level of readability and maintainability.
- `model.pl` contains the way to describe the application and the infrastructure on which you want to attempt the placement and routing process.-
data/app.pl
anddata/infra.pl
files contain an instance of the model. -
daplacer.pl
contains the main logic of the placer.
-
Download or clone this repo. Make sure you have the following prerequisites:
-
In the project folder, run the following command on terminal, to access the SWI-Prolog console:
swipl daplacer.pl
-
Inside the console, run the following query:
:- daplacer(museuMonitor, Placement, Routes).
The output will be a first placement and routing for the application described in
app.pl
(named museuMonitor), onto the infrastructure described ininfra.pl
. -
To try the continuous reasoning, open
infra.pl
file and change some links or nodes involved in the first placement, or changeapp.pl
description, adding new services, data types or end-to-end interactions. -
Repeat step 2, and you'll obtain as output a new placement for new and suffering services.
N.B. Do not terminate the already started
swipl
process, or you will lose the knoweldge base that has been built so far!
% on(Service, Node)
Placement = [on(dataStorage, isp),
on(controller, lifeSciences),
on(interface, mannLab)],
% ((source, target), AllocatedBandwidth, Route)
Routes = [((rVst, dataStorage), 24.0, [sciencesLectureHall, briggsHall, mannLab, parkingServices, westEntry, firePolice, isp]),
((rArt, dataStorage), 15.0, [kleiberHall, hoaglandAnnex, firePolice, isp]),
((dataStorage, controller), 18.0, [isp, firePolice, westEntry, mannLab, lifeSciences]),
((controller, rDor), 22.5, [lifeSciences, parkingServices]),
((controller, rGls), 27.0, [lifeSciences, parkingServices, mannLab, briggsHall, studentCenter]),
((rCam, interface), 40, [hoaglandAnnex, mannLab]),
((interface, controller), 40, [mannLab, westEntry, parkingServices, lifeSciences]),
((interface, rVid), 20, [mannLab, parkingServices, westEntry])]
The previous prolog output is depicted in the following image:
- Jacopo Massa (corresponding author)
- Stefano Forti
- Antonio Brogi