|Thesis abstract: |
This thesis focuses on techniques and frameworks which are specifically tailored for decentralized software systems, i.e. systems where distributed elements act without the supervision of a central entity.
In particular, our contribution is structured in three main areas.
Firstly, we describe a decentralized autonomic framework, the SelfLet, that allows developers to implement decentralized autonomic applications.
Secondly, we present an optimization framework for the SelfLet toolkit able to dynamically assess and predict potential problems and bottlenecks.
Finally, we present two adaptation algorithms -- that could be incorporated into the SelfLet framework -- operating on decentralized distributed systems.
In particular, the first algorithm -- inspired by the growth behavior found in fungi's roots -- balances the load among nodes of the system despite the continuous sources of external changes (i.e., node failures).
The second algorithm, which also includes a load balancing feature, achieves a resource scaling behavior in a cloud infrastructure context.