Tuesday, April 8, 2008

Performance with ESB and BPEL UDDI runtime lookups

Well, nothing new with it, as long as you are using SOASuite 10.1.3.3.1 you should have both of them out of the box. Just to recap:

BPEL run-time look-ups:


1) You have to define/publish wsdl in service registry. If you publish wsdl through User Interface, it creates unique sequence id for registry key which you can change using registry user interface. You can also use registry API to publish wsdl of the service.

2) Define registryServiceKey as property of partnerlink


You can either edit bpel.xml or edit the partnerlink to achieve it:




3) Define registry URLs in domain.xml


URL for uddiLocation should be http://host:port/registry/uddi/inquiry.


ESB run-time look-ups:


1) You have to define/publish wsdl in service registry. If you publish wsdl through User Interface, it creates unique sequence id for registry key which you can change using registry user interface. You can also use registry API to publish wsdl of the service.


2) Define registryServiceKey as end point property for service


3) Define registry URLs in integration/esb/config/esb_config.ini file



I have tried both ESB and BPEL run-time look-ups and they work great. Although there are some really bad performance issues I saw:

After enabling run-time look-ups ESB or BPEL calling any service via UDDI was taking longer than 1 minutes to invoke (it was couple of milliseconds earlier). Upon analysis we find out the actual invocation was not the issue but preparing the call (get-wsdl, parse wsdl and store in specific cache) was taking the longest time.

Also we saw that if load on BPEL and ESB if not very high, I don't see many performance issues but as soon as load increases (with number of threads) things get really slow. We did look at service registry logs and it's response time, service registry was extremely fast.

Here is what we found the reason behind slowness: ESB and BPEL both caches WSDL into their cache in specific format. If we do run-time look-ups BPEL and ESB gets the WSDL using service registry (which is pretty fast), but analyzing those wsdl and storing them in structure which BPEL and ESB run-time engine can understand takes a long time.

In conclusion, all this stuff BPEL, ESB, OSR - run-time look-ups looked like an ideal approach but had some performance drawbacks. All that glitters is not gold :)

12 comments:

Unknown said...

Chintan,
I just tested BPEL runtime lookup of service (either another BPEL process or a regular web service). I did detect any performance issue. For the Audit trail, every thing finished within 1 second. For my test cases, no difference can be detected with static or dynamic service lookup.
Mingsheng Xie

Chintan Shah said...

Was it under stress test? It won't make any difference if you are running just one instance.

Anonymous said...

I think that you should look at VTD-XML (http://vtd-xml.sourceforge.net). It can fundamentally solve any ESB related performance issue

Tomaž said...

Hi!

I followed your steps and published all of my services in the Oracle service registry. Then I created associated properties for partner links and endpoint properties for services.

I'm now having problems registering the ESB in the production environment which is inside a VPN.

The problem is that our development environment is outside the private network, which means that all of the defined WSDL files in our BPEL processes and ESB systems are also outside the VPN and consequently not visible durring compile time and deployment.

Is there a workaround?

Anonymous said...

Already found one. I replaced the URL locations of WSDLs with locally stored files. And guess what. It works like a charm.

Thanks again for a great post.

Anonymous said...

Hi,
I am relatively new to SOA. I am interested in knowing how webservices are registered in the UDDI registry. I went through your blog and i found it very informative. I have a question on this?
Just adding registryservicekey in bpel.xml and making configurations will register te services or this need to be taken care by ANT script

Tomaž said...

Yes, adding the key in your BPEL process and registering services in UDDI is enough.

Those services will be automatically picked up durring runtime.

Anonymous said...

Hi,
I want to know the steps involved in publishing wsdls and xsds.How can I use this published wsdls and xsds while developing BPEL services and ESBs. Is there any doucumentation available which has the detailed steps.

Simran said...

Mamta: Hi Chintan, We are facing the same slow response time in ESB. Is there any resolution for the same.

Chintan Shah said...

Hello Mamta,

We got patch from Oracle Support to fix this issue. But the down side was, it will only check OSR at the startup time, so changes in OSR will not get propagated to BPEL.

Based on situation, you can ask Oracle support for this patch.

Thanks,

Chintan

Anonymous said...
This comment has been removed by the author.
Anonymous said...

Hi,


A 100% opensource ESB (eBay uses the WSO2 ESB to process over 1 billion transactions per day), which provides very good performance is WSO2 ESB.
WSO2 has its own Governance Registry, which supports fast runtime lookup, discovery & UDDI compatibility. WSO2 ESB uses this registry for lookups (service,API). WSO2 has their own BPEL engine called WSO2 Business Process Server(BPS). Services with business processes can be implemented using BPEL in WSO2 BPS.

WSO2 ESB (http://wso2.com/products/enterprise-service-bus/)