Performance Tuning JCAPS

We're getting close to (finally) deploying our JCAPS rewrite to production. Our final task is to load test and "tune" the application - making sure it will handle the expected production transaction load.

Prior to executing the load test, we added logging statements to report on the amount of processing time spent in each JCD (or processing unit for those non-JCAPpers out there). Using this info, we can determine the slow running processes and optimize them. For this optimization we could follow a traditional approach and profile the code, or we could take an easier route and configure JCAPS to throw more resources at the bottlenecks. This second option is done in the JCAPS connectivity map by increasing the maximum number of threads allocated to run the process. Clicking the input line to the JCD to open the properties, you can set the "Server session pool size" in the Advanced tab (NOTE: this setting is only for JCDs listening to JMS queues or topics).

I'm not sure how I feel about this really. On one hand, it's pretty cool to have this level of control. On the other hand, I'm wondering why I even have to deal with this. I mean, I don't ever need to set the maximum number of requests a web service can handle. The server automatically scales to the number of requests it receives until it runs out of resources.

I'm wondering why JCAPS JMS services cannot follow a similar approach as load becomes heavy? Maybe something similar to a database connection pool that could grow and reuse JMS listeners would provide an extensible solution?

Another question I have is why the architect of this application chose JMS over HTTP for the SOA medium between these services? We have no requirement for guaranteed delivery. This is a real time system, so there's no need to queue up messages if a certain component cannot respond for a while (those transactions will simply timeout). To me, JMS does not seem like the right fit for this application.

I'd be interested to hear other thoughts on this architecture choice. Is it possible I'm missing something? The people who made these decisions are no longer around to ask...

Comments

Unknown said…
So is it true that JCAPS uses SOAP over JMS for communication between bussiness processes? We are just using eGate so I don't know. How do you check that? I wonder what's more efficient anyway.
Have you measured this?

In IS, even thought this is not neccessary for the web cointaner, you must configure a pool size for EJBs and MDBs. So I think that JCAPS just allows you to configure a different value for each component. It is true, though, that they could have a value of 0 meaning "use the default configuration for this logicalhost".
Vinnie said…
You can send anything over the JMS wire (it doesn't have to be a SOAP envelope). We currently send an XML string in most instances, but sometimes we send just a simple string.

Also know that you don't have to use JMS. You can use TCP, HTTP, MQ or just about any other messaging medium to tie your processes together.

My question was really the use of JMS over a lighter weight protocol (and no I haven't measured any of this).

I also asked this question on StackOverflow and got varying responses.
eingfoan said…
i would just say it will give you a lot of functionality when your soloution is growing and maybeb gets fitted to more globally requirements and other usecases

Popular posts from this blog

I Believe...

FRail :include

Performance Tuning JCAPS - Part 2