Monday, June 15, 2009

OSB & ESB Performance comparison

With the release of OSB 1.3.1 with JCA adapter support I can finally compare the OSB with the ESB. I will run this performance test on my Dell laptop ( Core2Duo T9400 2.53 GHz with 3,5 Gb memory ) and try to use the same components in the OSB and the ESB. For example I will use a memory JMS Queue in the Oracle Application server as starting point for the ESB and a file based JMS Queue in WLS as starting point for the OSB process. Both OSB and ESB processes has to fill the same four tables in the Oracle 11G database and they will use the same Toplink database mappings.
For the test I will disable the JMS adapter in the ESB console or stop the queue consumption in the WLS console. Then fill the Queues and start the Service Bus processes . Before the test I will do some test runs so I know everything is alright and the Service Bus is warmed up.
Here is a picture of the ESB process. This process reads the Queue and pass it asynchronous to the next Router. This message with a XML anytype element is transformed with XSLT to a specific message schema and the last Router transforms it to the database adapter XSD.

The OSB process works almost the same as the ESB process but in the OSB I will use XQuery instead of XLST and use Proxy Services as Routers and a Business service as Database Adapter.
Here you see a process schema of Messaging proxy service. It start with a PipelinePair to do some XSD validation on the incoming message. Then the Proxy Service determines the message type in in the RouteNode, do the first XQuery transformation to make the specific message XML and start the next specific Message Proxy Service.

The specific message Proxy Service validates the XML and in the RouteNode ( Mapped to the JCA database adapter Business Service ) the next XQuery takes place, so the Business Service get the right XML for the Toplink database mapping.

Here are my test results
OSB 10.3.1 with JRocket JVM

Total MessagesSize Message in KBTime in Seconds
With validation
Time in Seconds


Total MessagesSize Message in KBTime in Seconds
With validation
Time in Seconds


The OSB is the overall winner with 15% a 90% better performance than the ESB. Off course this is not the best testcase and there are other areas of the Service Bus where you can do tests for, but with this case the OSB is much faster especially with big messages ( even with JRockit ) . This OSB process does even more then the ESB process, the OSB process returns a message with the result of the database adapter and put this message in a WLS Queue.
Don't know why OSB has a better performance, maybe Weblogic is faster or the ESB instance logging is the problem. In the next Soa Suite patchset, I can test the ESB processes on WebLogic server and compare this with these results.


  1. Hi Biemond,

    I am working on a proxy service based on WSDL-A.

    I have to do a service callout (sc1) to another business service with a particular parameter.
    From the response of that sc1 i need to pick two variables var1 and var2 and use it the request of stage2 and stage 3.

    Stage- 2

    I have to do another service callout (sc2) to the same business service with a particular parameters including var1 returned by sc1

    Stage- 3
    I have to do another service callout (sc3) to the same business service with a particular parameters including var2 returned by sc1


    I need to Use the response of sc1, sc2 and sc3 and transform that to the desired response.

    My only concern is I have to wait for stage 2 to complete to start with stage 3 when I have no real dependency on stage 2.

    How can I ensure that My stage 2 and stage 3 can be processed in parallel. ?

    Can any one please explain How I can achieve that?

  2. Hi, I saw you already got a answer.

    Here is a example of a split -join

    thanks Edwin

  3. The best of performance is from vtd-xml, which will blow all competition...