How Relevant Are The Fallacies Of Distributed Computing Today?
Tim Bray of Sun Microsystems writes of the Fallacies of Distributed Computing; He observes that despite its profound implications when designing distributed systems, “you don’t often find them coming up in conversations about building big networked systems”.
Tim believes that the reason that some of the fallacies may not seem as relevant is probably because a multitude of applications today are built on web technologies; and the web lets you believe some of them (fallacies). He examines each of the fallacies in the context of the web, and explains why some of them continue to remain fallacies but are somewhat mitigated or at least appear to be mitigated by web technologies.
1. The network is reliable
HTTP […] connections are brief; Compared to a traditional networked system with connections whose lifetime approximates that of the application.
Second, the clarity about GET, PUT, and DELETE being idempotent, while POST isn’t, helps hugely. [for e.g.] if a GET gets a network blowup, just do it again. [T]his places very clear boundaries around the repair and recovery that an app needs to handle.
2. Latency is zero
The Web […] requires connection setup/teardown [and] users ha[ve] internalized this, and [are] aware of the difference between the normal single-digit number of seconds it takes for a nicely-functioning server to assemble request results and get them to you, and behavior under overload.
3. Bandwidth is infinite
4. Transport cost is zero
These are quite evident by news of recent bandwidth caps. Or As Tim puts it “Time after time, you’ll see messages, between computing civilians, of the form “Sorry that this picture is so big””.
5. The network is secure
This is probably the fallacy least-well-addressed by the Web. Anyhow, the Web technologies mean that application builders can survive even while subject to one or more of The Fallacies. But not this one.
6. Topology doesn't change
By making almost all our apps Web-based, and thus having everyone address everything with URIs, we all agree to share solutions to routing and addressing problems; [which] means that application builders almost never have to think about the problem.
7. There is one administrator
Well yeah, there isn’t. But who cares, any more? Web architecture makes addressing decentralized.
8. The network is homogeneous
The Web doesn’t do APIs and object models, it’s just a set of agreements over what messages you’re going to send and what messages expect back in return. Which, as a side-effect, makes heterogeneity a non-issue.
Tim concludes his post with a word of caution
if you’re building Web technology, you have to worry about these things. But if you’re building applications ON it, mostly you don’t. Well, except for security; please don’t stop worrying about security.
I also blogged that in a little more detail
Re: Overly optimistic
Re: Overly optimistic
As we all know abstractions can be hugely powerful but they can leak and we forget this at our peril. So, like Arnon and Dilip, I'm somewhat confused by Tim's conclusion that "mostly" you don't need to worry about these things, unless by mostly he means that most web apps aren't critical, time-sensitive or in need of bullet-proof reliability so simplification is more appropriate than hiding.
I'd tend to agree with Arnon's statement in his excellent PDF on The Fallacies "the more things change the more they stay the same". Whilst I'm all for anything that makes my job simpler (I'm still a JINI fan), because it allows me to concentrate on the value-adding aspects rather than the plumbing, I think I'll continue to worry about the fallacies for some time to come...