React 2014: Joe Armstrong - K things I know about building Resilient Reactive Systems
videoOn YT
Related
Important points
If server and client software are described by a State Machine, what describes what goes on in the connection?
A contract!
How do we describe contracts?
In APIs/types?
Probably cannot handle temporarity/causality
Solution
Types + State Machine
RPC (remote procedure calls) fail differently to PC (procedure/function calls)
Related to Promises (as in Futures, deferred, ...)
Eg: Request might not return
Avoid Impedence Mismatch
Referring to the cost of connecting different systems
Performance
Complexity
Distributed and Non-Distributed systems behave differently
Start programming for Distributed as early as possible
See
Scale down, not up
Know the rules of physics (Don't break the rules of physics)
If X counter wraps around 10⁵⁵ operations. How possible is it to happen?
How distributed computing relates to causality?
Again: server cannot be sure of what the current state of client is, only the last one observed.
See
CAP theorem
Scale down, not up
Don't limit the solution to current parameters
Consider how Names work on a distributed environment
Measure, don't guess
Get the granularity of concurrency right
Avoid propagation of errors
Opposite to Postel's Law/Robustness_principle
See
Let it crash (on WikiWikiWeb)
Use universal encodings
Prefer a generic format and a generic parser
XML
JSON
...