Distributed systems are a means to provide infrastructure for scalable and reliable applications. The different types of distributed infrastructure that can be provided are -
- Storage
- Networking (What I work on at Google)
- Compute
- 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 -
- Scalable
- Available
- Recoverable
- Replicated
- 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.