Unreliable network
When you develop your services for distributed environments, you must take into consideration that invocations of the services will be performed over the network. As a result, the application must be prepared to deal with network failures, which will certainly happen.
This problem is further enhanced by the fact that a single misbehaving service can poison a large number of services. Let's take a look at the number of scenarios, that can make this possible.
Dependent services
In large distributed systems, each service would have a large number of dependencies on other services. It requires only one dependency to fail to make the service irresponsible. Also, a service will go down too, becoming unavailable for other services that depend on it. Such a situation is known as cascading failures (Further reading, link 1).
However, that's not all. In a production-ready environment when there are a lot of calls being performed, a service that has latency problems will quickly block...