Is BizTalk Rocky's "Super-Router"?

Service Station, by Aaron Skonnard

Syndication

I just read Rocky's piece titled A SOA Versioning Covenant, which is a great read. The article discusses the differences between syntactic and semantic contracts. The latter is what he calls a covenant. The basic gist is that SO applications should focus more on semantic contracts while providing the ability to process a variety of message types, allowing applications constantly adjust to changing syntactic contracts over time (e.g. versioning).
 
He's basically arguing for the IDispatch of Web services, where the actual contract is embedded in the implementation and the endpoint simply becomes a message router capable of recognizing and dealing with the variety of incoming messages. He also suggests the possibility of a "super-router" that fills this intermediary role for all service implementations.
 
You could build this type of infrastructure with Indigo, via the messaging layer and various extensibility points, or even with ASMX/WSE today. But the thing they lack for making this approach easy for developers are the tools for taking care of the syntactic massaging. The RPC-driven API approach promoted by most toolkits as the primary model is why we have to have so many discussions on contract design, interop, etc.
 
I believe that BizTalk is the "super-router" Rocky is looking for today. The architecture Rocky describes is exactly what BizTalk is good at. With BizTalk you define ports (endpoints) that can receive a variety of different message types. You can then configure ports with a pipeline and a collection of maps (XSLT) for moving between the different external messages formats and the internal message formats that you want to build the semantic contracts against. Then you create subscriptions with the BizTalk pub/sub engine to route these messages to the appropriate business processes. The business processes define the semantic contracts of the system while ports deal with syntactic massaging. And BizTalk provides some nice developer tools specifically designed for dealing with these tough issues in a highly productive manner.
 
I think Rocky is right on with his observation and BizTalk is very close to what he's after. As more orgs realize this I think it's likely that many of them will move towards BizTalk for external facing interactions, and the various WS frameworks for building the majority of their internal plumbing.
 

Posted Apr 26 2005, 01:52 PM by Aaron Skonnard
Filed under: ,

Comments

David Ing wrote re: Is BizTalk Rocky's "Super-Router"?
on 04-26-2005 10:47 AM
While I agree that BizTalk would be a good router here, but I reckon versioning is a tougher nut to crack than just at the message level.
http://www.from9till2.com/#a365ef3a7-4456-4b0d-bbba-74fe1fb5c83e

Besides Aaron, aren't you getting a bit obsessed - I mean maybe BizTalk could make a good alternative to Firefox now too (ducks :).

- David
Aaron Skonnard wrote re: Is BizTalk Rocky's "Super-Router"?
on 04-26-2005 11:11 AM
LOL. You'll have to forgive me. I feel like a little kid with a shiny new toy. :-P

I enjoyed your post and agree that in general versioning entails more than just massaging messages. In fact, in my experience, changes deep within a system are what typically bubble up to impace the message formats over time. Hence, the ability to easily deal with variant-but-largely-similar-messages greatly simplifies the overall landscape and your coupling with external consumers.
SOAphisticated wrote On versioning
on 04-26-2005 3:16 PM
Jon Fancey wrote re: Is BizTalk Rocky's "Super-Router"?
on 05-03-2005 3:13 AM
Interesting stuff. I agree that BizTalk exhibits some of the features Rocky is looking for.

I blogged on something similar a while back about where I differentiated the routing as early or late binding. Late binding being a deferral of what implementation is actually invoked for a given operation based on what is actually received at runtime. Systems such as asmx support early binding through strong typing. However, I think there are a few points worth mentioning:

There is clear separation between processes (orchestrations) and endpoints in BizTalk. But endpoints are a coupling between Uris and ports. For example, for SOAP this means that a particular uri (vDir) is bound to a particular port of a particular type. This affects BizTalk's own routing flexibility. A consequence of this scheme is that you can't have two ports sitting on the same Uri and therefore can't have a truly flexible router with a fixed (or even dynamic) type set in the way Rocky describes (you'd use multiple ports for the SAME orchestration with different Uris). Of course you can go the XmlDocument-type route but then you must handle the routing yourself maybe with a complex routing orchestration/custom code.

To really push things into the implementation the client should be unaware of the binding as the contract (schema) is the only thing they know, together with the endpoint, which for different versions of the same thing should, I'd argue (like Rocky), be the same for all versions, as opposed to IService.DoWork, IServiceEx.DoWork. Otherwise you've got the API/contract pair issue again.

Because of this, I'm not sure it's really IDispatch either because there is no built-in plumbing support to 'get' the services and make the service call. And arguably IDispatch is a client-side routing feature not server-side, putting all the decisions into the client.

Also, it is the subscription mechanism not the implementation that decides whether to 'drop' incompatible messages. Without going loosely-typed you can't get round this.

Another thorny issue that Rocky kind of alludes to in his 'keep things separate' is about reuse. OO encourages reuse but as Rocky says, this by definition, is a change of semantics opportunity. It's unrealistic for implementations not to reuse where appropriate. But reuse through extension (or restriction) is a change of semantics. It seems the only way to guarantee semantics is to leave the v1 code (WSDL, XSD and implementation) alone. This sounds like the implementation is going to get pretty heavy.

Or maybe I'm way off base here..?

It will be interesting to observe how BizTalk and Indigo will coexist in the future as I would expect that as Indigo grows it will encroach more on the feature set of BizTalk (and vice versa). MS have already announced orchestration support in the Longhorn timeframe and provided with the o/s and there's already an Indigo adapter...
Jonas wrote re: Is BizTalk Rocky's "Super-Router"?
on 05-17-2005 2:25 PM
BTS is nice in enterprise scale or above (federation). Will Microsoft provide tools or applications similar to Biztalk but for an application scaled down scenario (i.e. working with SO in an appdomain). BTS makes SO interesting, but way to heavy. I want a BPEL4WS orchestration engine as part of the framework (i.e. a light version of bts). Well, I think BTS is too heavy even for enterprise SOA. Too much EAI retro stuff in there.

Add a Comment

(required)  
(optional)
(required)  
Remember Me?