8 Replies Latest reply on Jan 28, 2009 3:43 PM by stlecho

    JBossESB vs Mule Performance

    nandant

      We are evaluating performance of JBossESB and Mule on JBoss Application Server using simple EJB3 stateless session bean (empty function without any business logic).

      Here is our test scenario:

      JBossESB:
      Browser ----> HTTP ---> JBoss ESB ----> HTTP Router ---> Servlet (JBoss AS) ---> Session Bean(JBoss AS)

      Mule ESB:
      Browser ----> HTTP ---> Mule ESB ----> OutboundPassThroughRouter to HTTP ---> Servlet (JBoss AS) ---> Session Bean(JBoss AS)

      Note: We are HttpRouter from tfennelly_https workspace (http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4142035#4142035) which can call external URL. JBossESB 4.2.1 GA's HttpRouter cannot can only another Http Endpoint so we had to use work-in-progress version of JBossESB.

      We are using JMeter with load of 5 users and 100 loops with rampup time of 0 which means 5 concurrent requests will be sent to the server and the test will be repeated 100 times.

      Here is the results we are getting:
      -------------------------------------------------
      Response Time |....JBossESB..|.....Mule....|
      .......................|....(in ms).....|....(in ms)..|
      --------------------------------------------------
      Iteration 1........|.....70..........|......22.......|
      --------------------------------------------------
      Iteration 2........|.....69..........|......25.......|
      --------------------------------------------------
      Iteration 3........|.....68.........|......27.......|
      --------------------------------------------------

      As you can see JBossESB's response time is close to 3 times of Mule ESB.

      Want to know if JBossESB's performance is comparable with Mule ESB. If yes, want to know the confirgurations that would help fine tune JBossESB performance for the simple requirement of forwarding http requests to servlet/session bean.

      Here is the configuration file we are using for JBossESB:

      <providers>
      <jms-provider name="JBossMQ" connection-factory="ConnectionFactory" jndi-context-factory="org.jnp.interfaces.NamingContextFactory" jndi-URL="localhost">
       <jms-bus busid="httpServerChannel">
       <jms-message-filter dest-type="QUEUE" dest-name="queue/jbossesb_perfTest_esb" />
       </jms-bus>
      </jms-provider>
      <jbr-provider name="perftest_http" protocol="http" host="0.0.0.0">
       <jbr-bus busid="http_bus" port="9433"/>
      </jbr-provider>
      </providers>
      <services>
      <service category="Https QS Category" name="MyHTTPSService" description="HTTPS Gateway example">
       <listeners>
       <jbr-listener name="Http_Gateway" busidref="http_bus" is-gateway="true"/>
       <jms-listener name="ESB_Aware_Listener" busidref="httpServerChannel" />
       </listeners>
       <actions>
       <action name="httprouter" class="org.jboss.soa.esb.actions.routing.http.HttpRouter">
       <property name="endpointUrl" value="http://localhost:8080/perf/perftester"/>
       <property name="method" value="GET" /> <!-- Currently only supports GET or POST - easy to add more! -->
       <property name="responseType" value="STRING" /> <!-- Response should be set back on message as STRING or BYTES - default STRING -->
       </action>
       </actions>
      </service>
      


      Environment:
      Hardware: Intel (R) Xeon(R) 2 CPU Duo Core, 64 bit 5160 @ 3.00GHz, 2 GB RAM
      Software: Red Hat Linux RHEL 4, JDK 1.6, JBoss 4.2.2 GA, Mule 1.4.3/JBossESB 4.2.1 GA

      We did profiling and found that HttpRouter::process() method is not the cause of the performance degradation so we are assuming it might be because of the usage of JMS Listner for ESB Aware messages.

      Want to know if we can bypass the JMS queue as our requirement is forwarding the http requests to serverlet without any filtering/transformation/etc.

      Any reply would be greatly appreciated.

      Thanks in advance.
      -Nandan