BizTalk as an ESB
Mohan commented on my earlier blog and asked my views on BizTalk as an Enterprise Service Bus (ESB). My take is that if we look at the functionality that ESBs are meant to provide, BizTalk does fit in pretty well, however if we look at some of the deployment considerations (like feature specific deployment), then BizTalk doesn't fit in, since we have to install the entire package. We can however, selectively enable certain funtionality by appropriate configuration.
Considering the better processing power we can get these days, I would tend to put more weightage to the features than deployment aspects. The deployment requirements might result in higher costs, but then there could be various other factors forcing organizations to anyway go in for high end servers.
Getting back to feature set, there are a few definitions of ESB out there. At a high level ESB fits in the middleware category and is primarily about intergration applications using standards based bus (messaging engine). Below, I will try and list the key features that we expect from an ESB and then see where BizTalk fits into it. This list is from wikipedia.
- It is not an implementation of Service Oriented Architecture --> This is more of concept behind ESB and hence we need not map BizTalk to this.
- It is usually operating system and programming language agnostic; it should enable interoperability between Java and .Net applications, for example --> BizTalk isn't OS or programming language agnostic by itself, but can help interoperate/integrate Java and .net applications via say the SOAP adapter.
- It uses XML (eXtensible Markup Language) as the standard communication language --> Though BizTalk can work with any document type, most of features are best used when working with XML. In fact, a common myth is that it is necessary to convert all input documents to XML before sending them for processing within BizTalk.
- It supports Web services standards --> BizTalk has SOAP adapter that helps you work with web services. It also has adapter for working with Web Services Enhancements (WSE) 2.0.
- It supports messaging (synchronous, asynchronous, point-to-point, publish-subscribe) --> BizTalk inherantly works on pub-sub model. Messages are published into the BizTalk Message box database and orchestrations and send ports subscribe to them. BizTalk also support message routing, message translation, short and long running transactions and various other message delivery related features. Via use of specific adapters like MSMQ, asynchronous message delivery can be easily achieved.
- It includes standards-based adapters (such as J2C/JCA) for supporting integration with legacy systems --> BizTalk has a plethora of out-of-box and third party adapters that can be used to integrate with various legacy and LOB systems. A list of such adapters is available here. BizTalk also can work closely with Host Integration Server to connect to mainframes.
- It includes support for service orchestration & choreography --> Orchestration is one of the key features of BizTalk. BizTalk conforms to Business Process Execution Language (BPEL) standards. Not only does BizTalk provides orchestration execution features, it also has a rich designer support well integrated with Visual Studio 2005. Additionally, it has Orchesration Designer for Business Analysts (ODBA) that integrates with Visio and business users can use it to designing orchestrations.
- It includes intelligent, content-based routing services (itinerary routing) --> BizTalk supports content based routing via promoted properties concept.
- It includes a standardized security model to authorize, authenticate, and audit use of the ESB --> BizTalk has mechanisms in place to provide security. It can even work with Certificates and supports ability to resolve incoming requests via these certificates.
- It includes transformation services (often via XSLT) between the format of the sending application and the receiving application, to facilitate the transformation of data formats and values --> BizTalk has extensive support for data transformation via the Mapper functionality. It provides host of funtoids out-of-box to manage the transformations and also includes ability to custom script additionaly functionality that isn't available via the functoids. For this transformation and schema creation itself, BizTalk again has great tool that integrates with VS. We don't have to worry about writing XSLT manually.
- It includes validation against schemas for sending and receiving messages --> The pipelines in BizTalk provide mechanisms to validate messages based on published schemas.
- It can uniformly apply business rules, enrichment of the message from other sources, splitting and combining of multiple messages, and the handling of exceptions --> BizTalk supports interchange handling (splitting messages) and also allows aggregation of messages. Via pipelines and mappers we can work with the messages and modify them. There is good business rules engine (BRE) support via which we can define rules and policies and use them in orchestrations. The policies are managed external to the orchestration and hence can be changed at any time without having to touch the orchestartions. Since BizTalk supports long running transactions, it also has mechanisms for compensating transactions.
- It can conditionally route or transform messages based on a non-centralized policy - meaning that no central rules engine needs to be present --> Already discussed this above in terms of content based routing and mapping functionality.
- It is monitored for various SLA (Service-Level Agreement) thresholds message latency and other characteristics described in a Service Level Agreement --> BizTalk has Business Activity Monitoring (BAM) features that provide a portal based approach to track the messages and orchestration progress. Additionally, extensive performance monitor counters are available that can be used to get additional information about message processing speeds etc.
- It (often) facilitates "service classes," responding appropriately to higher and lower priority users --> This is managed more by appropriate deployment and configuring specific features on specific servers.
- It supports queuing, holding messages if applications are temporarily unavailable --> BizTalk can work with adapters like MSMQ that provide such features. It also has capabilities of setting retry count and retry intervals.
- It is comprised of selectively deployed application adapters in a (geographically) distributed environment --> BizTalk has to be deployed in full, thought post that selective features can be enabled on the machines.
So in a nutshell, as stated earlier, from feature standpoint BTS does offers features that make it a worthy ESB.