Distributed systems are a means to provide infrastructure for scalable and reliable applications. The different types of distributed infrastructure that can be provided are -

  1. Storage
  2. Networking (What I work on at Google)
  3. Compute
  4. ML Systems (more recent, same as compute maybe?)

A really well-designed distributed system would be able to hide the fact that the underlying infrastructure is distributed Note this is very hard to achieve.

Infrastructure in general needs to be -

  1. Scalable
  2. Available
  3. Recoverable
  4. Replicated
  5. Consistent

Strong vs Weak Consistency

Strong consistency ensures that a read always returns the value from the latest write. Weak consistency is more flexible and does not guarantee that the latest write will be returned on a read.