Distributed Computing: Principles and Applications