Synchronicity and Coupling Jeff Schneider has been thinking and blogging about whether synchronous interaction is necessarily more tightly coupled than asynchronous messaging. It is, Jeff, and here's why: Synchronous interaction is tightly coupled in time. Asynchrony decouples the participants along this dimension. Consider the difference between IM or telephony (sync) and email (async). With the latter, the participants need not be on line at the same time.
And you don't *need* a message-correlation token when communicating asynchronously (as in email), it's just a feature that's often provided by messaging platforms. You can certainly use the fire-and-forget asynchronous model of email and not bother with explicit correlation if it's not required by the underlying application.
It's not so much that a receiver "doesn't care" from whom a message is sent, for of course it does care. Rather, it's the case that the receiver is prepared to accept any message at any time from any sender. That's loose coupling.
As to Jeff's scalability discussion, it's precisely the loose coupling (again, on the time axis) that allows message-based systems to scale so well. A system that can average its load over a 24-hour period can be far less expensive to deploy (10x) than one that must respond within the period of an HTTP or application-layer timeout. The cost is even further reduced by the elimination of the high-availability requirement for such systems.
None of this is to say that there's no place for synchronous architectures. Certainly most applications of web services (by sheer count) are likely to be synchronous, but these are also among the simpler of distributed applications, As the architectures and applications become more complex, the asynchronous model will become increasingly important both for performance and to keep systems loosely coupled.
Posted Monday, June 09, 2003 10:12:32 AM