| | h1. Enterprise Service Bus |
| | |
| | An [enterprise service bus|http://en.wikipedia.org/wiki/Enterprise_service_bus] (ESB) is an architectural pattern for a set of connectivity to enable service invocation between the service consumers and service providers that make up the [composite application]s in a [service-oriented architecture]. |
| | |
| | \\ |
| | h2. Definitions |
| | |
| | It sometimes seems like everyone you ask has a different (but similar) definition of what an ESB is and does. Here are a few of the most authoitative ones (from IBM, at least): |
| | |
| | * "[IBM SOA Foundation: An architectural introduction and overview|http://www.ibm.com/developerworks/webservices/library/ws-soa-whitepaper/]":\\ |
| | {quote}An enterprise service bus is an architectural pattern. |
| | |
| | The presence of an ESB is fundamental to simplifying the task of invoking services -- making the use of services wherever they are needed, independent of the details of locating those services and transporting service requests across the network to invoke those services wherever they reside within your enterprise.{quote} |
| | \\ |
| | * [IBM SOA Glossary|http://www.ibm.com/soa/glossary/]:\\ |
| | {quote}An Enterprise Service Bus (ESB) is a flexible connectivity infrastructure for integrating applications and services by performing the following actions between services and requestors: ROUTING messages between services, CONVERTING transport protocols between requestor and service, TRANSFORMING message formats between requestor and service, and HANDLING business events from disparate sources.{quote} |
| | \\ |
| | * "[Discover how an ESB can help you meet the requirements for your SOA solution|http://www.ibm.com/developerworks/architecture/library/ar-esbpat1/]": |
| | {quote}The ESB is a key architectural pattern in the Foundation reference architecture, enabling loosely coupled interconnectivity between service requesters and service providers in service-oriented solutions. Loose coupling permits a clean _separation of concerns_ (temporal, technological, and organizational) between the parts in a solution, enabling flexibility and agility in both business processes and IT systems.{quote} |
| | \\ |
| | |
| | | h2. My Definition |
| | |
| | I tend to find each definition to be somewhat unsatisfactory. I'm looking for less of a statement about what an ESB _is_ and more about what it _does_. So here's a definition I'm working on. |
| | |
| | First, I should say that I haven't found the term "enterprise" in ESB to be very helpful. An enterprise tends to be a company or organization, yet many buses provide connectivity in a scope much smaller than a complete company, or even larger to include business partners. A truly company-wide bus tends to actually be a federation of many smaller buses. So I tend to ignore the enterprise part and focus more on what a service bus is and does. |
| | |
| | Second, of those quoted above, I tend to like the last one because it has more detail. I'd like more detail still, especially around two of the main capabilities an ESB gives you: service virtualization and mediation. |
| | |
| | So with that in mind, here's a working definition: |
| | |
| | {quote}A *service bus* is an _architectural pattern_ for a messaging layer that achieves _service integration_ by enabling and managing remote _invocation_ of _services_ in a [service-oriented architecture]. It enables _service requestors_ to invoke _service providers_ remotely and manages the invocations. The bus' management of service invocations helps to decouple requestors and providers and enables _service virtualization_ and _mediation_. A bus provides connectivity to service providers running outside of the bus; the service providers do not run in the bus. |
| | |
| | *Service virtualization* decouples a _service requestor_ from its _service provider_ by hiding the provider's identity, _service interface_, and _invocation_ mechanism. It enables multiple providers to act as a single provider of the requestor's _service_. When a requestor invokes a virtual service, it does not know nor care which provider ultimately _executes_. Service virtualization allows for: load distribution of service invocations across multiple providers, service providers to be added and removed without affecting the requestors, and providers to be avoided while they are busy or not operating properly without affecting the requestors. |
| | |
| | *Mediation* enables _service invocations_ to be adjusted inside the bus. Mediation for a particular service is implemented as a _mediation flow_ composed of a series (a.k.a. microflow) of _mediation primitives_. Mediation performs a combination of three basic tasks: |
| | * Routing - Enables the bus to direct a _service invocation_ to one of multiple different _services_ without needing to transform between _interfaces_. The target service produces the same behavior as the source service, but is a generalization, a specialization, or backward-compatible version of the source service. |
| | * Transformation - Enables the bus to fulfill a _service invocation_ by invoking another _service_ that has a different _interface_ but produces the same behavior. For a service invocation, corresponding transformations are applied to both the request and response. |
| | * Conversion - Enables the bus to fulfill a _service invocation_ between a _service requestor_ and _service provider_ even when they connect to the bus via different network transports or APIs. The source and target service implement the same interface and behavior. For a service invocation, corresponding conversions are applied to both the request and response.{quote} |
| | |
| | h2. Resources |
| | |
| | Some places to learn more (a certainly incomplete list, but a start): |
| | * [ESB - Enterprise Service Bus|http://www.ibm.com/software/integration/esb] (IBM) |
| | * [Enterprise Service Bus (ESB) Guidance|http://www.microsoft.com/biztalk/solutions/soa/esb.mspx] (Microsoft) |
| | * [Enterprise Service Bus (ESB) Learning Guide|http://searchwebservices.techtarget.com/general/1,295582,sid26_gci1085711,00.html] (SearchWebServices.com) |
| | * [My blog's SOA/ESB/Web Services category|http://www.ibm.com/developerworks/blogs/page/woolf?tag=soaesbws] |
| | * _[Enterprise Integration Patterns]_ -- A book not specificly on ESBs, but very applicable to ESBs |