In our previous post we discussed what requirements might exist for web services message buses. I have gotten several questions about this. Am I talking about Enterprise Service Buses? ESBs are a very useful term to hang many interrelated capabilities around. To quote from one early ESB entrant:
An ESB is a standards-based, service-oriented backbone capable of connecting hundreds of application endpoints. ESBs combine messaging, Web services, XML, data transformation and management to reliably connect and coordinate application interaction. The ESB deployment model is an integrated network of collaborating service nodes, deployed in service containers.
All well and good. I am very excited about the ESB category in general and the opportunities it creates for web services infrastructure (for a good recent posting about ESBs in general, see Phil Wainewright's October 30 entry on http://looselycoupled.com/blog)
But the interesting question is just what the messaging bus within this definition is. What are its communications capabilities? What are the APIs, ideally, for interacting with it? Where do the communications capabilities execute? Are they on servers somewhere centrally, replete with failover for any data containers (queues, topics) that are located there? Or is most of the work and data distributed (as some legacy EAI buses, such as Tibco's Rendezvous) are? If the interfaces to the buses facilities are new and, presumably, web service-oriented, does that mean the underlying bus must be new as well? Do companies have to rip and replace their existing infrastructure? Do we need a world of web services that are all loosely-coupled and supporting WS-ReliableMessaging and WS-Security before we can start getting any use out of this bus?
I'd like to put some stakes in the ground of some attributes what the ideal web services bus could look like, if it were available today:
- has set of communications capabilities that are create to support web services communication. In other words: every communication model ever supported by a bus is not necessarily here. But certainly: publication/subscription and other mechanisms of broadcasting to multiple recipients, as well as one-way or two-way asynchronous communication (of various forms), would be supported.
- the capabilities supplied need to be particularly robust in support asynchronous loosely coupled web services (which drives the scenarios for using a bus architecture in the first place)
- all bus features (communications capabilities such as individual message send and receive, and management functionality) are invocable via modern (WS-*) OR simple web services standards (plain SOAP)
- can leverage existing infrastructure that provides reliable messaging (from endpoint perspective sending individual messages). It is not necessary to rip out existing middleware buses that the company already has in use
- can still also be deployed on top of unreliable transport (e.g. http) and use web service standards such WS-ReliableMessaging to provide reliable messaging, where no such existing bus is in place
- can be deployed to provide fault tolerance for all data stored and all service invocations, whether this is provided on explicit servers hosting the service, or in a distributed deployment
- enables easy plugin of not just application participants but also "integration facility participants", that provide many capabilities to ease the integration process, including a standards-based registry and a standardized "utility service plugin interfaces"
- although thriving on loosely coupled coarse grained asynchronous integration expands the universe of potential integration by providing extensive bridging capabilities (as such facilitation services) for "simple endpoints" (everything from providing the reliable messaging capabilities for simple SOAP invokers to making simple synchronous services look like asynch services to providing security services for negotiating and enforcing security policies)
- in factoring out what capabilities are "the communications bus itself" versus what capabilities might be provided by facilitation services, respect the boundaries of transport and envelope versus payload. That is, content routing (in push model), transformation, and content-level subscription are all content-related and are naturally done as "integration facilitation services". Various flavors of asynch communication for one or multiple recipients are all at the communication and transport level and should be provide by the core bus.
- It needs to be easy to manage and monitor the state of the bus and its collective services and plugged in applications at any time: what endpoints are plugged in, what integration utility services are registered to process what documents. A standards-based registry of this information will go a long way toward that goal
What I haven't done here is describe why each of these items is required for a good "web services bus". I also haven't described really what such a bus would look like: what are its components, interfaces and value-added services. I'll be posting on this topic fairly soon.