I’m looking at an architectural problem. I’d love to get feedback.
I’m trying to do two things at once: work on a SOA-based system design, and develop SOA-solutions for other applications to use by working with other teams that are also developing SOA-based solutions.
So, one architect, who I respect and enjoy having rigorous debates with, has suggested that SQL Service Broker is, on its face, a SOA technology. SSB detects events, sends messages, and reliably insures their delivery to another SQL Server-based system. It does this by posting information into ‘queue’ tables, and then, using SQL Server, transferring this information into ‘recipient’ tables on another SQL Server. It’s an inherently SQL-to-SQL technology.
My opinion is that SSB is part of a SOA, but by itself, it doesn’t produce messages that are (a) technology agnostic, and (b) able to be intermediated. You can use SSB to generate a message, but you’d need to call out to WCF or ASMX or something to actually transmit the message.
It’s not a question of whether a message ‘needs’ to be intermediated.
I believe that we have message based systems for a purpose, and the purpose is to seperate the caller from the receiver. If we bind them together in an infrastructure where the message cannot be intercepted, then we have removed one of the key benefits of SOA:
Intermediability: SOA should give us the ability to intercept a message going from point A to point B, and react to that message without informing either end of that pipe.
In other words, we should be able to introduce an intermediary at any time, without affecting the caller or the sender. To be clear: We don’t have to “inform” either system if their code and configuration remain unchanged.
Technology independence: SOA should also require that I can replace system A with a system of an entirely different technology, and that does not affect system B, as long as the message is consistent.
In both cases, in my humble opinion, passing a message via SQL Service Broker only, from one SQL Server to another, without calling out to WCF or another messaging based mechanism, fails.
What do you think? Are these elements (Intermediability and Technology Independence) truly integral to SOA? Do you believe that we can deliver on the promise of SOA if we back down on either one?