Scalable System Design Philosophies

Keep it simple
Complicated systems fail in complicated ways (making them difficult to test and debug)
Start with simplest design (evolve based on experience)

Assume everything can fail
Machines and hardware can fail at any time
Do not assume key points have to be reliable
Build redundancy at all levels

Make failure cases mainline
If an error path only executed on failure, then there is a higher chance of it not working correctly
You don’t want to discover that error handling has problems during a failure
Eliminating different paths of execution keep things simple and reduces coding and testing

Minimize work done by people
Processes with people involved are slow
They are difficult to test
Error prone and hard to scale
Build logic into the system

Scale out, not up
Don’t depend on bigger computers to scale up a problem

Reduce costs
Commodity hardware provides more processing power per dollar
Highly reliable hardware is much more expensive
It still does not eliminate all failures

No comments: