.Net Scalability problem

  • Thread starter Thread starter Refky Wahib
  • Start date Start date
R

Refky Wahib

Hi
Actually I need Technical Support
I finished a Great project using .Net and SQL Server and .Net Mobile
Control
My Business case is to implement this Program to accept about 1
Million concurrent users
So I designed the project as master Node that has all administration
project and about 10 client Nodes
Those subscribers will login and I configured the replication at
Server that can publish any change to the Nodes
And I tried this technique and every thing is perfect.
NOW I am at final test
I want to proof that my project at every Node is scalable up to 100
000 concurrent users
My problem is
1- I have not Any Test tool to generate this Huge connections
2- I do not Know How to configure the tool to let me got reasonable
Result
3- I do not know if My Environment is suitable for real test or not
4- Finally I do not know where is the hole at my program that made a
bottle neck in this project

The Problem in detail

I tried to Download ANTS program and tried it but unfortunately it
gave me only 5 client to test I do not know if it possible to increase
this value at another test program or not?
I tried to using Microsoft Test Center but I do not know How to
configure the parameter
for Example the Only parameter that gave me is No of client and No of
Titrations?
No of client is very limited to 2000 and you can specify huge no of
titration
but I still do not understand is it possible that 100 000 concurrent
users login at same time ?
is the network latency and bandwidth is it a huge bottle neck that
will permit the concurrent user to login in different time
I think that the average no of request depend on the bandwidth of
channel that established between client and server
So I think that the MTC generate concurrent connection and per
connection try to do it several time
Real Test
I tried with 2000 concurrent user and 1000 Iteration
at NT2003 Server with MS SQL Server 1 G.B RAM and 3GHz
and the result was very very strange
the program at first connection establish a pool with minimum 20 and
max is 100 {I do not know is it suitable for my project or not}
I see the performance monitor and I found that the connection begin
with 20 connections and increase linearly up to 1000 connections
and the result of the test is fail and the error was different and I
could not understand the result
after that I tied manually to run the application at I could not I
found the curser is busy and no reply
in the program it was configured that after the db connection time out
it reply with error it never happen
I wait more than 2 minutes and still busy
So I assumed that problem happen in db I restart SQL Server and I
found that still problem exist the site too busy and nothing happen
after that I restart the IIS and nothing Happen
this result very strange because it means the Server feel a very high
traffic contention at his resource but this resource is not DB or IIS
sessions
So what type of this resource??
Suggestions
Is this problem because .Net with every hit Create many object and
leave it to Garbage collection to release and the connection was very
fast so it makes a problem before triggering the garbage collection??
is this problem because I did not use the COM+ for pooling ?{but I
read an article at .NET help called that no need to use COM+ at
pooling because
..NET with SQLClient is automatically use the pooling and He advises to
do not complicate program with using this technique use it only with
..net with OLEDB like oracle or any db Actually I tried this manually
and it was work but with few no of connections and observing NT
Performance monitor with SQL server connections}
Actually I have no clue How to pin the COM+ to OS and dose I need to
special tool or I can do it using .NET?
Is this problem is due to limitation of SQL Server and Windows 2003
Server as Development tool limitation Actually this server was
completely installed with toolkit that shipped with .NET enterprise
this toolkit have SQL Server2000 and windows 2003 windows 2000 and
exchange server and ecommerce,…
So is it for Development purpose did not support a huge connection??
Note: I tried to limit the IIS for only 1000 concurrent connections
and I found the MTC still send connection and it was more than 1000
connection and still work without error ? SO I have doubt of the
program.
is the problem that I load a lot of information from web.config with
each connection to program like get the db connection?

I NEED IF IT Possible
1-Good test program with the minimum configuration to reach my target
100 000 concurrent users
2-Article about the bottle neck at any project with .NET and SQL
Server and .Net Mobile Controls that may be cause a problem?
3-If is Microsoft Test Center is good How Can I configure this test to
reach my target 100 000 concurrent user
And how can I test it?
3- Finally I will write the source code of the main 3 Part
the Source Code

connection to database
public Message Connect()
{
UTIL util=new UTIL(session);
if(myConnection!=null)if(myConnection.State==System.Data.ConnectionState.Open)
{
return new
Message(true,"Is Already opened",0);
}
try
{

myConnection = new SqlConnection();
if(util.ConnectionString.Trim()==String.Empty)util.ConnectionString=UTIL.UserApp.GetFromUserPart("DATABASENAME");
if(util.ContentDataConnectionString.Trim()==String.Empty)util.ContentDataConnectionString=UTIL.UserApp.GetFromUserPart("CONTENTDATABASENAME");
myConnection.ConnectionString =
util.ConnectionString;
if( myConnection.State.ToString().ToUpper()
!="OPEN" ) myConnection.Open();
return new Message(true,"",0);
}//try
catch(Exception ex)
{
return new Message(false,ex.Message,-1);

}
}

Retrieve data From db
public Message Retreive(string sql,DataSet dataResult)
{
long val;

try
{
Connect();
SqlDataAdapter myDataAdapt=new
SqlDataAdapter(sql,myConnection);
if(dataResult!=null)dataResult.Clear();
myDataAdapt.Fill(dataResult,"myData");
/*result.l_No*/
val=(long)dataResult.Tables["myData"].Rows.Count;
Disconnect();
return new Message(true,"",val);
}
catch(Exception e)
{
Disconnect();
return new Message(false,e.Message,-1);
}

}
 
Refky Wahib said:
Hi
Actually I need Technical Support
I finished a Great project using .Net and SQL Server and .Net Mobile
Control
My Business case is to implement this Program to accept about 1
Million concurrent users

I'm uncharacteristically speechless...

Let me see if I can figure out how to say this...

You've got one test server, right? (don't lie to me...; OK, you've got a
separate database server. Fine.)

Use conventional stress testing tools on your server, to figure out just
about how many concurrent users, with normal traffic patterns, that server
can support. Don't start with astronomical loads and disbelieve the test
results. Work up from below, adding clients until something starts to bend
under the stress. No specialized tools required for this part so far, yes?

Profile what you've got going so far. Database server doing OK? Front-end
servers starting to show some stress?

Keep this up until you find out what's starting to sweat. Do some
performance optimization until something else is the problem. Then work on
that. Keep adding more clients...add more replicated database servers if
that's what's holding things up...add more clients...

Build a small server farm, understanding that it's not just a case of
dividing the load by the number of servers, that there's a price to pay for
mediating the traffic among the servers. Add more clients...

Divide one million by the number of concurrent users you can support on your
best-optimized test configuration with acceptable performance.

OK, that's the absolute minimum configuration you need. Now think about
periodic peak loads...

Get the idea?

Good luck,
Tom Dacon
Dacon Software Consulting
 
Back
Top