This document discusses some key lessons the author has learned about building distributed systems at scale:
- Start with more servers than you need and scale out capacity from the beginning to solve scaling problems proactively.
- Put significant thought into how data is keyed and identified to facilitate queries and sharding.
- Consistency is not always critical, and distributed systems can function with some degree of inconsistency.
- Precompute frequently queried data when possible to avoid ad hoc queries.
- Separate processing from storage to allow independent scaling.
- Carefully plan how data will be deleted as removal is complex.
Related topics: