Describir: Distributed Systems: An Algorithmic Approach.