mirror of
https://github.com/binhnguyennus/awesome-scalability.git
synced 2024-10-01 01:06:14 -04:00
The Patterns of Scalable, Reliable, and Performant Large-Scale Systems
architectureawesomeawesome-listbackendbig-datacomputer-sciencedesign-patternsdevopsdistributed-systemsinterviewinterview-practiceinterview-questionslistsmachine-learningprogrammingresourcesscalabilitysystemsystem-designweb-development
CONTRIBUTING.md | ||
README.md |
Awesome Scalability, Availability, and Stability Backend
A curated list of selected readings/case studies to illustrate Scalability, Availability, and Stability patterns in backend design.
What if your backend went slow?
Understand your problems: performance problem (slow for a single user) or scalability problem (fast for a single user but slow under heavy load) from basic.
What if your backend went down?
"Even if you lose all one day, you can build all over again if you retain your calm!" - Thuan Pham, CTO at Uber Technologies Inc.
Contributing
Please take a look at the contribution guidelines first. Contributions are always welcome!
Contents
Basic
- CAP Theorem and the Trade-offs
- Scale up vs Scale out
- Latency vs Throughput: Striving for maximal throughput with acceptable latency
- ACID?
- Architecture Issues: Bottlenecks, Database, CPU, IO
- Immutability
Scalability
- Distributed Caching
- Storage
- NoSQL
- RDBMS
- HTTP Caching
- Concurrency
- Event-Driven Architecture
- Load-balancing
- Parallel Computing
Availability
Stability
- Circuit Breaker
- Always use timeouts (if possible)
- Let it crash/Supervisors: Embrace failure as a natural state in the life-cycle of the application
- Crash early: An error now is better than a response tomorrow
- Bulkheads: Partition and tolerate failure in one part
- Steady state: Always put logs on separate disk
- Throttling: Maintain a steady pace
Special Thanks
- Jonas Bonér, CTO at Lightbend, for the original reference