The Game of Distributed Systems Programming
blog.incubaid.com
blog.incubaid.com
Anyway, after you move from RPC to message passing and then to state machines with delayed action execution you are facing the next big problem: the fact that message queues between the components are not perfectly elastic and can run out of memory if different components run at widely different speeds.
This is mostly not a problem inside datacenter, where admins take care not to run out of resources. In the Internet environment though it is often a common case rather than a rare occurence.
I haven't seen this problem addressed so far, whether in software or in theory. Any pointers to relevant work are welcome.
Then there is level 11: You're Jeff Dean.
In any case, perhaps I the question I meant to ask was, "Does anybody care to share some thoughts on designing systems with complete action reification?"
It is also free.
After learning the syntax, check out these chapters
* "Designing a Concurrent Application" http://learnyousomeerlang.com/designing-a-concurrent-applica...
* "Buckets of Sockets" http://learnyousomeerlang.com/buckets-of-sockets
* "Distribunomicon" http://learnyousomeerlang.com/distribunomicon
* "Distributed OTP Applications" http://learnyousomeerlang.com/distributed-otp-applications
1. http://www.amazon.com/Distributed-Systems-Principles-Paradig...
...oh, wait, did I just describe the hive-mind-ish (but gorgeous:P) monster that the web is evolving into? :)
(edit to add long winded off topic reasoning: why should we even try to understand as a whole the complex systems we create? can't we just build them out of understandable components and accept the fact that any large distributed system will tend to evolve into something beyond the comprehension of any human mind and accept that "100% understanding" !== "control" and that we don't even need that much control, we just need to make things work 95% of the time. just divide the problem, divide the people and let the "hive mind" evolve... functional languages and the conceptual tools they offer us, useful as they surely are, just foster the illusion that complete understanding and control of the systems we create will continue to be possible - I'd argue that some of what we now cal "distributed systems" are already tipping past the edge of "undestandabilty" and we should slowly learn ways of controlling their evolution and components and not the systems as a whole...)
...anyway, it's going very off topic so better leave it and let's get back to ..."work" :|
I was just expressing an intuition that as we go past "Level X" (put a large number in there), keeping the OP's metaphor, we may graduate out of this need for a clearly defined shared state for most of the problems we are trying to solve... we may think in terms of a "perceivable state" that gives as a probability for the system to be in a certain "'real' state"...
(think of the human consciousness or self, we imagine that it really exists, that there actually is an "I" or "self", we consider "my mind in this second" as a "state"... but it can just as well be seen as an emergent property, a perceived state that has a certain probability to exist in a certain way based on the states of zillions of components more or less well connected)