Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 317
  • Last Modified:

What's the best strategy to deploy my web system to large pool of users (using JBoss and Oracle DB)

Hi,
  We have developed our system using JBoss 3.0.4 (tomcat 4.1.12). We're using Oracle 8i database. We also interface information from other Oracle database using dblink (the Siebel and Peoplesoft applications which is stationed at different machines).

  Now we need to roll out our system to 1,500 users. So, the concurrent access at one time can reach 1,500.

  We have heard so far a lot of system encountered problem when they go life to large pool of users, for eg: connection limit reached, exceeded the cursor limits, web server crash, etc.

  Is there anybody can guide me on the roll out strategy? (not from the business perspective, as we cannot control the number of users using the system at any time). Any info that can help to roll out smoothly, like the architecture, what kind of configurations needed to be made at JBoss as well as Oracle DB.

  So far, is there anybody using JBoss and Oracle DB and the system has been rolled out to a few thousand users and the system still working fine? Can someone share the experience/learning points with me?

  Somebody has proposed to me use 2 web server with standalone database. At the end of the mth, synchronize the data back to the centralised database. Not too sure is this strategy good, but the maintenance is high. Especially when you need to view the report of the data and if there are changes to some code values which are shared by all. The synchronization cost is high.

  Our another problem is the machine issues. We can't afford high end machines.

  Hope someone can help me. Thanks.
0
littletortoise
Asked:
littletortoise
  • 2
1 Solution
 
vzilkaCommented:
What we usually do is use a product that simulates the behavior of users.
We define a normal user transaction (or several of them), write a script, and run the tool.
I can suggest some open source tools for you, for example at http://deluge.sourceforge.net/

Or you can buy a commercial tool, like a tool from Mercury Interactive (called LoadRunner) but that is very expensive.

About the number of users - usually not all 1500 users are logged on the same time, so maybe your requirements are a bit too high.

But if your application doesn't require too much memory, then two-three PCs should suffice (but it depends on many issues, like size of HTTPSession, number of EJBs, use of transactions and more).

I work for a consulting company and we know some applications that work in this load.
0
 
eelguetaCommented:
Have you taken a look at Oracle RAC?

That's the clustering technology from Oracle in Linux.

For the web part, usually a DNS-based load balancing among two or three servers is enough.
0
 
littletortoiseAuthor Commented:
Hi vzilka and eelqueta,
  Thanks for your replies.

  We're currently trying to look into JMeter to do the load stress. It's really rush. I think developers actually should do incremental performance test along the way, but not the last minute lump everything for stress test. Well, this is just a way of life :)

  For Oracle RAC, I think this feature requires a separate license, does not come together with database. If so, I think we can't afford that.

  Does anybody know how to do the configuration for  size of HTTPSession, number of EJBs, use of transactions and more? Which file should I modify?

  Thanks.
0
 
vzilkaCommented:
Size of HTTPSession is determined by your application.
The more you use HTTPSession object in servlet (and the session object in a JSP), the more you make the HTTPSession object larger.
Number of EJBs is also determined on your development. However, you can configure the properties of the EJB-Pool in JBoss in the jboss.xml file.

For example:
<cache-policy-conf>
  <min-capacity>50</min-capacity>
  <max-capacity>1000000</max-capacity>
  <overager-period>300</overager-period>
  <max-bean-age>600</max-bean-age>
  <resizer-period>400</resizer-period>

Unless you need Transactions in your application, I strongly suggest to remove them. You can do this in the ejb-jar.xml file, under the <container-transaction> tag. The default for an EJB method is Supports, which means that unless you created a transaction - nothing happens. If you use a different type of parameter (like NotSupported, Required or something similar) make sure you do it on purpose.

About stress testing - I strongly recommend stressing the application during the development process. If you check extreme programming techniques, you'll see they recommend having very frequent builds. At least on every other build you should stress test your application.

One more tip - after making sure the application works in load (lets say in a test which is about 2 hour long), do a very long test - like 48 hours. Make sure you have no memory leaks and the application (and the app server) is stable.

Good luck
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now