E Y O U C O D E • No matter what language you are using, designing is independent of the coding process “Success really depends on the conception of problems, the design of the system, not on the details of how it's coated.” - Lamport • Thinking about simplicity is equally important to strive for as Computational Complexity “You're not to come up with a simple design through any kind of coding techniques or any kind of programming language concepts. Simplicity has to be achieved above the code level before you get to the point which you worry about how you actually implement this thing in code.” - Lamport
T T L E S • As programmers, we love solving problems. But, why bother solving them when someone else has already done it for us • In Distributed Systems, everything is a tradeoff: • Impossibility results/Theorems are your best friend e.g., FLP Result, Two Generals Problem, CAP Theorem
O S O P H Y In systems design, a fail-fast system is one which immediately reports at its interface any condition that is likely to indicate a failure. Fail-fast systems are usually designed to stop normal operation rather than attempt to continue a possibly flawed process. - Wikipedia • This is an anti-pattern to what we have been taught as programmers from Day 0 i.e. to handle all failures in our code • If you want to build a layered fault tolerant system, then your building blocks must have very precise failure semantics • A fail-fast module passes the responsibility for handling errors, but not detecting them, to the next-highest level of the system
T I O N M a s t e r Scheduler Explicit Reconciliation Implicit Reconciliation • Retries don’t guarantee state synchronization! • Hence, the various components (Schedulers in case of Mesos) should reconcile their state periodically