Re: Deployment scenario
Tom Blenko <[email protected]> Thu, 3 Feb 2005 17:27:43 -0800
| Newsgroups | gmane.comp.web.webobjects.admin |
|---|---|
| Message-ID | <[email protected]> |
Ute -- The answer, of course, is that it all depends. I have analyzed/fixed deployments on several sites, including some that were heavy. I've never seen the webserver become the bottleneck. You might want two webserver machines with a random router in front to increase reliability but I doubt you will want them for performance reasons. The only times I've seen a database server become the bottleneck was when the tables weren't indexed, the application was incorrectly generating lots of spurious requests (100's/page), or the database server wasn't a database server: it was a proprietary query processor that was similar to a database server from an architectural point of view but didn't deliver the throughput you expect from a database server. The real question you (always) need to answer, from an engineering point of view, is how much throughput (requests processed/second) the site can sustain. And that's the number you are going to engineer for. You can then back that up to a number of simultaneous users by making an assumption about user-requests/minute that will certainly turn out to be wrong. You can measure the throughput and you should. Almost-simultaneous requests are not an problem, in and of themselves, requests that can't be processed get queued (up to some number that should be pretty large and is limited by the port configurations, I believe). If you know what your throughput is and you know how many simultaneous requests you might receive than you can figure out the longest/average service time for processing those requests and that is what should tell you the point at which performance is unacceptable. Number of instances is always a question. In this day and age, physical memory shouldn't be an issue so that shouldn't be a constraint. It appears to be popular on the mailing lists to enable concurrent request processing in instances, and that's probably going to reduce the number of instances you deploy. I can't tell you how it will affect your performance, my guess is that it reduces it. I have never turned on simultaneous request processing because I've never found a reason to. The case against is that it makes the application harder to write/maintain, it increases the exposure of users to program errors (if you're using fewer instances with concurrent request processing then if the instance goes down it takes more users with it), and I suspect such a configuration doesn't have as good bandwidth to the database server, per user (I haven't measured this). On current-technology processors I suggest you start with between 8 and 16 instances/processor. Then do some throughput measurements and adjust the number of instances accordingly. It should only be 1-2 days work if you already know the app and have the site set up. Hope that helps, Tom