Distributed Systems
Key Characteristics of Distributed Systems
Scalability
- Ability of a system to grow and manage increased traffic
- Increased volume of data or requests
Reliability
- Probability a system will fail during a period of time
Availability
- Amount of time a system is operational during a period of time
- High availability indicates a system designed for durability, redundancy, and automatic failover such that the applications supported by the system can operate continuously and without downtime for a long period of time
Manageability
- Speed and difficulty involved with maintaining system
- How hard to track bugs
- Want to abstract away from infrastructure so product engineers don't have to worry about it
CAP Theorem
We can only build a system that has any two of these three properties.
To be consistent, all nodes should see the same set of updates in the same order.
But if the network suffers a partition, updates in one partition might not make it to the other partitions before a client reads from the out-of-date partition after having read from the up-to-date one.
The only thing that can be done to cope with this possibility is to stop serving requests from the out-of-date partition, but then the service is no longer 100% available.