How to evaluate the hardware needed to support X number of users / transactions?

I am curious how everyone approaches the question of the following character:

'we need to create application A (for example, an e-commerce site). He will use technology B (e.g. java). It must support a C (e.g. 200) number of concurrent users. What equipment do we need?

The hardware specification will include the number of CPUs required and possibly the amount of memory for the main response.

To simplify my example, I will stick with Java technology in my question, but I really need technology-based advice.

I understand that this issue includes many additional factors. For example, another structure (Wicket vs Struts vs Spring vs. the pure EJB J2EE architecture), the number of distributed levels (one window installation or 3 level configuration).

But, given that a person may not have any previous experience with this technology (or perhaps there is no way to perform a stress test to find out what the necessary equipment is), and such a question always arises during the initial discussion of the project (and an answer is necessary as a baseline for moving forward) how are you going to give an answer?

I thought about solving the memory problem by evaluating the amount of memory that each user session can perform, but there will definitely be overhead for the infrastructure / virtual machine.

But, in general, I just can’t talk about a good solution to this issue, which always seems to pop up. The download test will definitely help to solve the problem, but then by this time the project is ready, and this is the question that the client usually needs to answer before the project.

We hope that the community can recommend good approaches to this.

Thanks.

+6
architecture
source share
5 answers

You really need to make some assumptions about your user experience in order to make an initial no-load assessment for concurrent users. Start with some suggestions about user sessions. Acceptable assumptions about the approximate ball (this may not be possible depending on the complexity or simplicity of your site):

  • Each user clicks a new page or resource every 5 seconds (assuming AJAXy)
  • Each request takes an average of 200 ms to process.
  • In general, it is good to have an average use, which is 25% of the capacity that allows the use of bursts, even more for social network sites where the spikes may be larger.

Then you would say:

200 users (200 ms / 5s) => 8 Average processor demand * 4 (for 25% of the load) => 32 processors.

I do not think this is especially important for the language. The memory is not expensive, enough.

+3
source share

Personally, I believe that anyone who tells you that the general solution to this problem lies with you. This is especially true if they are equipment suppliers.

You can only make such estimates based on similar loads on the expected load. You will find out later that you made a mistake because the real load does not really look like the “similar” load that you used as an estimate.

I hope you find out about this and make a more accurate assessment next time.

+1
source share

Honestly, I have not seen a good way to get a reasonable estimate without performing a sample load test. A simple number of variables in an application of any size: hardware (memory architecture, number of processors, disk architecture), software (implementation details, operating system, virtual machine [if any], database system, etc. etc. ), Environmental (network, cooling) and others.

This is basically a dedicated performance testing application. The wisest people on this issue have repeatedly and clearly stated that you need to get numbers. Therefore, the best advice I can give is to lay down the plan necessary for the prototypes to work at an early stage, so that you can get these numbers and so that these numbers change over time to get prototypes or work versions at each control point for re-checking throughout the project timeline.

Your early grades will probably not have much to do with your final numbers, but at least you can fix it at critical junctions as needed, rather than finish it to realize that there is no time in the fix schedule.

+1
source share

You ask how to quantify your hardware requirements.

However, I approach him from a different point of view. Create an application so that it can scale (for any level). From there, expand iteration # 1 of your equipment. Launch some public beta. Collect some real life figures. And reconfigure the system to achieve higher performance. Repeat.

0
source share

The required equipment depends on the complexity and quality of the software much more than on the number of users or transaction loading. The only people who claim otherwise are equipment suppliers.

0
source share

All Articles