How do you handle service discovery, load balancing, and fault tolerance in a highly distributed system?