Distributed Systems — Architecture and Implementation