A must read from Sean
A must read from Sean McGrath:
The mashup phenomenon is all about pull-centric design. The mashup phenomenon begs a very pertinent question: can all application integration scenarios that we naturally express in push-centric language, be implemented with pull-centric designs? Is there a limit to what you can do with a mashup - something that would force you to a push-centric approach instead? If every time A needs to send something to B why not get A to publish it, with an RSS/Atom feed instead. Then B can just poll the published information as it sees fit. How far can we push (no pun) that idea?
Personally, I’m convinced that RSS/Atom feeds are a much better way to solve notification scenarios than e.g. WS-Eventing. Polling is good for you. At least on the Web, and quite probably in any similar integration scenario — which is to say, wherever you don’t control both ends of the wire.
Polling is good…. so email must be a rubbish way of working given that its a push mechanism (I send the emails to their destinations via a routing mechanism (DNS)). Ditto for SMS.
Polling is the first thing that every person does as its the simplest for them to implement, its also the most resource intensive, bandwidth intensive and least scalable way of getting selected information to various sources. Polling is also massively rubbish at doing time critical information (what do you do, poll every millisecond?).
You can argue that in the limited world of HTTP that polling is a “better” (only?) solution, but that really just highlights why HTTP is about only a subset of the challenges of service, application and integration design. It works sometimes but is a long way away from working all the time.
Eventing & Pub/Sub are equally a good thing for certain scenarios and rubbish at others.
Of course I’m painting things in black and white here for the sake of the argument, and polling is not appropriate everywhere. But I object to the idea that it’s not scalable — on the contrary, given the Web’s support for caching of GET requests, syndication using RSS and Atom scales extremely well.
Oh, and last time I checked, neither POP3 nor IMAP were push protocols — mail is more than SMTP. (And DNS is most definitely not routing my mail.)
Okay, let’s pull everything, or at least pretend that we’re pulling everything. Let’s pull acknowledgements. Let’s build a service whose semantic is “consume one update” or better said “acknowledge the successful consumption of one update”, invoke it with a business-data payload, and pull the acknowledgement that they got it, intact.