Is an Enterprise Service Bus (ESB) appropriate for volume-performance critical consumer applications?
In response to my SOA/ESB Level Set blog entry, I got the following question from cparziale:
"In researching esb direction, I'm trying to assess if a "service bus" is a just another service 'on the side' of the primary services, to be used when needed, like UDDI, or if it will become a physical mediator of all service consumer-provider conversations. I ask because I'm trying to visualise what to do when we have high volume-performance critical consumer applications (such as in a financial institution) who have well defined providers and don't need externalized orchestration, transformation or even routing and do not want to to incur the overhead or support of additional mediation tiers. So will the ESB concept become mediation-integration fabric, like DNS, or will it become an application tier that must be managed and accounted for in a queuing/performance analysis? Any thoughts in this space are appreciated
This is a great question, and it prompted me to write this blog entry to answer this and some related questions...
I believe the value proposition for an ESB drops considerably unless it is the mediator for all service consumer-provider conversations. The advantage of an ESB over point-to-point service invocations is mostly about managing services across the enterprise. If "rogue applications" bypass the service bus, you will lose much of its value.
At the heart of cparziale's question is the gnawing concern:
"We do not want to incur the overhead or support of additional mediation tiers."
This is obviously a legitimate concern, and one that every ESB architect must address.
What additional overhead (latency) is incurred by invoking a service via an ESB versus invoking it directly?
There are many factors to consider beyond this concern to determine whether or not an ESB is appropriate for your company, but we must still answer this question as best we can.
The answer will depend on the architecture of the specific ESB, but I believe that it is quite possible that the additional overhead could be quite low.
An ESB allows you to abstract the address of the service endpoint that you wish to invoke. To make this work, the ESB has to map the logical address of the service to a