title: Why are Distributed Systems considered complex?
body: <p>I'm just getting into the concept of a Distributed System and its advantages and disadvantages. In the book I'm reading it discusses the complexity of a Distributed System and that they are inherently complex, it lists the following as potential reasons for complexity;</p>
  
  <ul>
  <li>Heterogeneity  </li>
  <li>Asynchronous communication</li>
  <li>Partial failures</li>
  </ul>
  
  <p>What I am struggling to understand is what these concepts actually encompass (i.e what is a partial failure and what are the causes of a partial failure?), and how they are dealt with in modern systems? Does middleware successfully solve all three of these complexity issues within a system?</p>