Distributed Computing: Principles, Algorithms, and Systems