by Jürgen Kress, Berthold Maier, Hajo Normann, Danilo Schmeidel, Guido Schmutz, Bernd Trops, Clemens Utschig-Utschig, Torsten Winterberg
Answers to some of the most important questions surrounding the term "enterprise service bus" using concrete examples, so that the areas of application that can be deemed "correct" for ESBs can be clarified.
Part of the Industrial SOA article series
Everyone seems to need to use an enterprise service bus (ESB) nowadays, but there is much confusion about its actual benefit and the various concepts this term entails. This uncertainty is revealed in statements like, "Help! My boss says we need an ESB," or "Why do I need an ESB at all? Can't I achieve the same thing with BPEL or BPMN?" or even "We can do everything ourselves in language X." This article is an attempt to answer some of the most important questions surrounding this term using concrete examples, so that the areas of application that can be deemed "correct" for ESBs can be clarified:
An accepted definition for this term has yet to be firmly established that is most likely caused by a lack of industry standards, whereas standards like BPEL and BPMN 2.0 exist for process engines and other components. The term “Enterprise Service Bus” was coined by Gartner in 2002, and further introduced by the analyst Roy Schulte to describe a category of software products that he observed were available on the market at that time. Ten years later, there is still very little agreement on what exactly an ESB is or what it should deliver. There are different definitions depending on the manufacturer or source. Among other things, an ESB is defined as:
"A style of integration architecture that allows communication via a common communication bus that consists of a variety of point-to-point connections between providers and users of services."
"An infrastructure that a company uses for integrating services in the application landscape."
"An architecture pattern that enables interoperability between heterogeneous environments, using service orientation." (Figure 1)
The ESBs that are available in today's market essentially differ in terms of the architecture of their systems. As shown in the preceding figure, they are mostly based on the following architectures:
These systems correspond to the original definition of ESB and typically distribute multiple nodes across the network, using a MOM infrastructure to support reliable messaging and event-driven processing among the nodes. Although the ESB nodes communicate using a proprietary protocol, service endpoints don't need to be aware of the MOM. Services can be exposed using a WSDL or other protocols.
Over the last five years, traditional integration broker vendors have been adding support for Web services and repositioning their products as ESBs. These systems are more standards-compliant than they once were but still tend to be more proprietary than most ESBs. They also tend to provide a very centralized solution in which all messages pass through a centralized broker.
A number of ESB vendors use a Java EE application server as the basis for their ESB products. These products are typically stronger in terms of service creation and composition than they are in legacy integration. They tend to be rather centralized, although they do support distributed nodes.
A few ESB vendors support an extremely distributed model that implements service mediation at the service endpoint, and supports heterogeneous communications using a channel plug-in architecture
Although these products don't technically qualify as ESBs because a service platform is provided, more than one vendor has been known to label this type of product as such. Mediation agents can be centralized or distributed and support service mediation. There are also related product categories that implement parts of ESBs but are not officially marketed as ESBs by manufacturers [REF-1]:
XML gateways are hardware appliances that primarily support service mediation, which is one of the key features of ESBs. In fact, XML gateways often support service mediation capabilities that ESBs do not or cannot support, such as transformation acceleration and the decryption and encryption of XML documents. However, XML gateways do not provide a service platform, a feature that is typically associated with ESBs.
Message-oriented middleware is middleware that is based on the asynchronous sending and receiving of messages to offer looser coupling between applications. The format of the messages is not defined, although, in practice, XML has become established as the preferred format. A MOM product usually supports communication via message queuing and publish/subscribe. There is usually no provision for the transformation of messages in the MOM, and an application's interface to the message-oriented middleware is relatively complex and not well standardized. A MOM can be used as the basis for reliable message forwarding by an ESB.
Some developers of traditional EAI tools are now positioning their products as ESBs. These products are often complex and proprietary and typically based on a hub-and-spoke architecture. The broker acts as the central message exchange (hub) around which the senders and recipients (spokes) are arranged radially. Connections to the broker are made via adapter ports that support the required message format.
Some ESB developers view service orchestration and automated business process management (BPEL, BPMN) as ESB characteristics, while others consider service buses to be a separate product that belongs to the BPMS category. This is especially the case when business aspects are expressed in process models or the category of an "Orchestration Engine," when technical integration processes can be expressed as a long process chain that calls services in a distinct order.
Many ESB platforms offer a service platform for building and hosting services. In this case, the ESB is also an application server. Many application servers provide containers for operating services and also offer a restricted capability for message processing and policy enforcement. Application server adapters support the integration of legacy systems through technologies such as Java EE Connector Architecture (JCA). In most cases, an application server only supports a few protocols, and a precise separation of ESB and application servers is difficult. Many developers require an application server as the basis for their ESB.
Companies and organizations aim to expose access to a subset of their key services and data to business partners and customers in an easy-to-use, standardized manner in the form of an API. This implies distinct security, performance, integration concerns that can then be addressed by API gateways. They encompass features for threat protection to ensure Quality of Service. They are not an ESB but do provide a certain overlap in terms of features. Examples for such shared features are transformations
A general rule of thumb to note is that when services are exposed to the outside world, an API gateway is a tool to be considered. It is positioned outside of the Intranet, typically in the DMZ. It manages only the subset of services that is communicating with external parties.
An ESB is used for service virtualization, typically manage a much larger set of services, and is positioned inside the Intranet.
Are there best practices to determine when the implementation of an ESB is worthwhile? The use of an ESB is worth considering when three or more applications or services need to be integrated. A simple point-to-point integration is significantly easier and much more cost-effective when connecting two applications. An ESB can also be worthwhile if services are going to be incorporated from external service providers over which the company has no control. The ESB can then be used to monitor the service level agreements that the external provider guarantees. The impact of the adjustments to service contracts can further be kept to a minimum, as the ESB continues to provide a stable interface while making the necessary changes to the messages.
If many different protocols, such as HTTP, SOAP, and FTP, are to be used and standardized to one protocol like SOAP, the ESB can perform the necessary protocol transformation. If services are to be consistently incorporated into an architecture to be able to receive, process, and produce messages, then the use of ESB is also suitable. This is also applicable if a collection of pre-defined components and adapters need to be accessed, which allows various protocols and legacy applications to be integrated in a standardized fashion. If messages need to be reliably and securely processed, the ESB can simplify the implementation of transactional message flows between two heterogeneous transactional data sources.
Using an ESB can become problematic if large volumes of data need to be sent via the bus as a large number of individual messages. ESBs should never replace traditional data integration like ETL tools. Data replication from one database to another can be resolved more efficiently using data integration, as it would only burden the ESB unnecessarily.
An ESB should support stateless message flows if long-term business processes are to be implemented. Long-running business processes are stateful and can best be implemented using BPEL and/or BPMN. These are not usually available via the ESB, but rather via a business process management
Due to the lack of standardization, the ESB market is rather confusing. There are many products that claim to be ESBs but offer quite different solutions and are based on different architectures. To allow for more effective evaluation of ESB products, the various functions that are assigned to an ESB have been arranged into a blueprint (Figure 2).
The ESB blueprint diagram doesn't include an "orchestration" or "process choreography" component, as it is considered to be part of the BPMS category. These offer dedicated runtime environments for long-running, stateful business processes that are optimized for this and support languages such as BPMN or BPEL. ESBs should be stateless and configured to process messages as efficiently as possible.
The following functional components in this module enable reliable operation and management of the enterprise service bus. Statistics & Status provides the services' ESB statistics, such as their number of errors, minimum and maximum response times, and number of processed messages. Alerting offers a mechanism for sending alert messages that can be sent via various channels so that existing monitoring environments can also be incorporated. SLA Rules are rules that can be defined on the basis of information from the Statistics & Status functional component. This allows SLAs to be measured and monitored. Any SLA infringements are notified using the Alerting component.
Message Tracking provides the option of easily tracking messages within the ESB, and should be activated whenever required so as to minimize any associated overhead. Message Redelivery ensures that messages that aren't processed immediately are automatically resent after a pre-defined period of time. The number of attempts and the interval between them can be configured. This component is primarily suitable for technical errors that only last a certain length of time, such as temporary network outages. Endpoint Failover enables the option of specifying an alternate service provider that is automatically called whenever the primary service provider is not available.
Load Balancing allows several service endpoints to be listed for one logical service provider endpoint. It uses redundant service implementations that are called alternately for each request according to a defined strategy, which can be round-robin or according to message priority or load dependency.
Message Throttling makes it possible to define a maximum number of messages per unit of time for a service endpoint that should be sent to the service provider. It prevents the service provider from being overloaded at peak times by buffering messages that lie over the threshold in a queue in the ESB. Message Throttling can also support message priorities so that messages of higher priority are always processed first. Logging & Reporting allows messages to be logged and then easily displayed at a later time. It can also provide functional auditing.
Configuration Management enables secure configuration adjustments to the ESB on an operational system, while constantly upholding the integrity of the configuration. Artifacts and attributes can be adapted and replaced during operation. A history of the changes can also be kept so that an ESB service can be rolled back to an earlier status at any time. Service Registry offers the option of registering and managing services on the ESB. High Availability ensures that the services provided by the ESB are failsafe, regardless of the status of the server on which it is operated.
The Error Hospital is the destination for the messages that can't be processed after multiple redelivery attempts, where they can be viewed, corrected if necessary, and reprocessed. Deployment offers the option of installing services automatically on the ESB. Environment-specific parameters such as endpoint URIs are typically overridable by this component. Service Usage allows the use of services to be logged and charged to the user.
The mediation module contains the functional components that are used to implement the message flow of an ESB service. Message Routing allows messages to be forwarded to a particular service endpoint depending on their content. The criteria for forwarding may originate from the message body or the message header, if the protocol used or the message format supports a header area that is independent of the message body.
Routing based on headers can be an attractive option to improve service performance and scalability, as direct access to the header is more efficient than parsing the routing information from the body. This is of particular consequence for larger messages.
Message Transformation enables conversion from one message format to another that is applicable to text and binary messages as well as XML formats. In addition, there is also the option of converting from text, such as the CSV format, to XML and vice versa. XML transformations use the well-known standard XSLT, which enables declarative descriptions of transformations and has graphical resources with drag-and-drop functionality for creation purposes.
A major drawback of XSLT transformations is a high memory usage if large documents are being processed, which may restrict the scalability of a solution. It is preferable if the ESB offers transformation options that support XML streaming, such as via XQuery.
Service Callout offers the option of accessing other services within a message flow in the ESB, such as to enhance a message. A service may be a Web service but the ESB can conceivably enable program code that's installed locally on the ESB to be called directly, such as a Java class method. Reliable Messaging is the support of reliable message transfer using queuing or WS* standards, such as WS-ReliableMessaging.
Protocol Translation means the possibility of switching from a certain communication protocol to a different one without any programming effort, such as from TCP/IP to HTTP. Message Validation ensure that messages are valid. In the case of XML, this means that the message contains well-defined XML and corresponds to a certain XML schema or WSDL. However, the ESB can also offer other validation means, such as Schematron or a rules engine.
Message Exchange Pattern (MEP) is the support of message exchange patterns, such as synchronous and asynchronous request/reply, one-way call, and publish/subscribe. Result Cache provides the option of saving results from a service call in a cache, so that each subsequent call returning the same result can be answered from the cache without calling the service again. This particularly applicable if the data is static or requires sporadic or infrequent changes. Potentially expensive operations, such as accessing a legacy system, can be reduced significantly.
Transaction allows ESBs offer transactional integrity through message processing. The persistent queues that the ESB uses to support Reliable Messaging generally work as transactional data sources, and can therefore participate in heterogeneous transactions. In addition, the ESB can offer a distributed transaction manager that can coordinate distributed transactions via heterogeneous data sources using the two-phase commit protocol.
Message Resequencing allows a flow of messages that belong together but aren't in the correct order to be resequenced. In a message-oriented solution with parallel processing of messages, the sequence in which the messages enter the ESB can be lost. Message Resequencing can be incorporated into the message flow If the sequence is of import for the service provider. A resequencer contains an internal buffer that processes the messages until the complete sequence is available and can be sent.
Pass-Through Messaging provides efficient forwarding of messages by the ESB. This is useful if the ESB is to be used for service virtualization and the messages are forwarded from the service consumer to the service provider unchanged. In this case, it is applicable if the ESB doesn't touch the message and simply passes it on as is.
This module supports both the transport-level and message-level security using a number of components. Authentication authenticates service consumers when they access the service in the ESB and verifies ESB authentication for the service provider. Authorization provides an authorization system for services that can often be configured via XACML to be assigned to users or roles.
Security Mediation provides support for interactions that communicate outside of security domains by converting credentials from one domain to the corresponding credentials of the other domain. Encryption/Decryption supports the encryption and decryption of the content of a message.
This module includes adapters for connecting services that are provided by the ESB via the Service Hosting module. The ESB can be assumed to provide a set of adapters from the ground up, and also has the option for customers or third-party developers to develop additional adapters for
This module allows services to be installed and operated directly on the ESB and is usually required if the ESB is based on an application server. Service Container provides one or more containers in which the services are installed and service lifecycles managed. It offers the service access to technical cross-sectional functions, such as transactions and security.
The Component Model provides an abstract component model, such as Java EJB, Java Spring Framework, or Microsoft COM+, on the basis on which the services are created.
The symbols shown in Figure 3 are used to graphically describe the various scenarios without needing to refer to products and tools. The symbols have been taken from  and further added to, in accordance with ESB functionalities.
Service consumers tend to prefer hard-wiring the actual endpoints of services, particularly in BPEL processes, because it's easy to perform with the tools that are provided. However, changes to the address of a server during runtime must not be able to produce changes that require redeployment at the service consumer side. An elegant solution around this problem is provided by the use of an ESB to virtualize endpoints. Figure 4 illustrates this scenario with a service provider that is providing a Web service interface that is no longer being directly used by the service consumer but by the ESB instead. The ESB can deliver the interface exactly as is to potential service consumers.
Any changes that need to be made to endpoint addresses can be easily implemented in the configuration of the ESB so that service consumers can continue to run as before. However, the ESB needs to be able to be incorporated into an existing message flow. The service virtualization also allows the use of the ESB's monitoring functions that extend to service statistics, so that SLA compliance can be checked and the appropriate actions configured if noncompliant. Service virtualization can be performed if the service provider makes a change to the service contract but doesn't want to impact the service consumer. In this case, a simple transformation of the exchanged messages can resolve the issue.
When services with functional interfaces are incorporated, a situation often arises in which service consumers and service providers do not speak the same language at the protocol level. Figure 5 depicts two service providers that are technically offering the same service, since one provides a SQL interface and the other a FTP interface. The enterprise service bus can be used as a protocol converter to leave the interfaces untouched, since it provides the means to ensure that the defined interfaces are used.
Similar to Scenario 1, the ESB can ensure that no subsequent changes need to be made on either the service consumer or service provider side if the communication protocol were to change in the future.
An ESB is also capable of supporting traditional integration scenarios in which the primary purpose is to forward messages from one system to another. Figure 6 illustrates a scenario in which the ESB consumes messages from an external queue, enriches them with a service callout to a Web service, and sends them to the destination system via a DB adapter.
Processing in the ESB is transactional, meaning message flows are configured to become involved in a distributed XA transaction as additional participants. The transaction starts when the message is consumed from the queue, and also comprises the database operations that are discharged by the DB adapter. If the message flow is completed successfully, then committing of the distributed
Services tend to change over time, and requirements that necessitate the introduction of a new and incompatible version are usually added. In such cases, the ESB can be used to perform the transformation from the "old" interface to the "new" interface. Figure 7 depicts a scenario in which the service provider introduces version 2.0 of a service that Service Consumer B immediately installs. Service Consumer A has been using Interface 1.0 and doesn't want to switch to version 2.0, since it wouldn't bring any added value to their business. However, the service provider doesn't want to keep running the two versions in parallel. Running the two interfaces simultaneously may be difficult or not even technically possible, as well as unnecessarily tie up resources.
The situation can be simplified if the ESB delivers version 2.0 directly via a pass-through that is similar to Scenario 1. At the same time, it has to keep providing version 1.0 of the interface while adapting the existing message flow so that version 1.0 is no longer called from the service provider. The message is instead transformed from versions 1.0 to 2.0 and sent to the new service. This transformation can be relatively complex, depending on how great the differences are between the two versions. Additional enrichment of the version 1.0 message may be necessary in order to deliver all of the information that is required to call version 2.0.
The transformation and Interface 1.0 in the ESB needs to be maintained until none of the service consumers are using the old interface. The reasons behind the decision to perform this transformation in the ESB instead of mapping from versions 1.0 to 2.0 within the service provider are as follows:
An ESB is a middleware solution that uses the service-oriented model to promote and enable interoperability between heterogeneous environments. There is no specification that defines exactly what an ESB is, or which functions it should provide. Even though an ESB is mostly associated with concepts like "mediation" and "integration," it is also suitable as a platform for providing services in a way that is similar to an application server. The ESB represents the consolidation of the product categories that are called "integration" and "application server."
One of the key features of an ESB is service virtualization. The ESB blueprint proposed in this article offers an orderly arrangement of its various functionalities and forms the basis for evaluating
[REF-1] Anne Thomas Manes: "Enterprise Service Bus: A Definition," Burton Group