Service Discovery in Distributed Systems