I haven't worked with websphere but here are my 0.02$
For my part when i worked on a J2EE project, we were running mysql.
Even with 3000 queries it was still pretty fast (because the queries
were local).
You said you were getting 1M hits a weak, what's your peak load? how is
it distributed? What is your projected maximum concurrent load?
Also, you mentioned you used MVC, did you ever think of using other
design patterns within your applications? Could using a Command pattern
with a write queue probably help you instead of this handling of
concurrent calls. Thread synchronization is very, very costly. If you
can elliminate aspects of your application that are concurrent onto even
a queue-based system, then it can go a long way.
Also I read that "We have very little time", "Our current IVR is getting
1M hits a week" and "I have little java help". At 1M hits a week, lets
use a gross horrible estimate of 1M/7days = 14000 hits/day (your actual
distribution, even on a weekday basis is probably what you want to go
on). If you are down for even 1 day you would loose 14 000 connections
(probably more). I would b e *VERY* carefull how you desing this if
this is the load conditions you are working on. Maby even ask a
Software Engineer (an actual Engineer, or a CS with a specialty in
realtime systems) to go and help you because to me, this sounds like a
project in trouble. If not now then soon when you need to go back and
patch this code, and try migrate it when 300 calls are coming in. If
you get it out there and there are bugs, your maintenance is going to be
very, very hard. Unless it is expected that there can be some downtime
but i would be very weary about that. If your current load is 1M/wk,
would next years be 1.5M/wk? How will this project grow? How will you
deal with this in a year?
Did you consider doing load-balancing across an array of servers?
Notes:
1) Usually probability distributions of telephone loads are poisson
distributions, according to studies.
2) Anywhere you can save synchronizing, load time, function calling,
moving from O(n) better datastructures. This type of stuff can really
improve your load.
3) Run your program through a profiler with a variety of test loads.
Try to optimize the sections that the profiler returns as being the most
costly.
I would need more information on what you are trying to do (sorry its
late :) ) to help you any further, hope it helps.
James wrote:
We are writing a web based application which primarily will serve
information to run an ivr. Based on our current IVR getting 1000000 hits a
week, this is going to be heavy duty. We have very little time, we have
data retrieval classes and a struts based MVC. I'm contemplating a
CallManager to hold call variables critical for tracking and writing. Since
there are sever small tables it reads from, I am loading those into memory
with a ServletContextListener when the server first comes up. These are
read only and they are stored in a hashmap using String[] objects. We also
potentially bring back a lot of data. What are the basic guidelines for
keeping the session under control so we can handle a decent amount of
concurrent calls. Is the saving of thousands of table reads worth the table
load into the context? The size of the tables is not bad, although one 10
col table has over 2000 rows, mostly single or double character fields.
Any thoughts from the pros would be appreciated. we are using struts 1.1
within our companies framework. I really have little Java help so a tip or
two would be terrific.
JT