Describir: Distributed systems: principles and paradigms