views:

390

answers:

4

Hello experts,

I need to create a web application for tasks delegation, monitor and generate reports for a organization.

I am thinking about ASP.Net and MVC should be the architecture to support so many concurrent users. Is there any other better architecture that I should be looking for ?

What kind of server configuration will require to hold this application ? How do I test so many users connected before I launch this application, is there any free/economical testing tools available ?

Thanks in advance. anil

A: 

Is there any other better architecture that I should be looking for ? MVC is the best I could suggest. I have used Monorail which is similler to ASP.NET MVC in a project where number of concurrent users are even more your figure (yes it is; ) ) and it worked like a charm (given that the client had adequate hardware).

What kind of server configuration will require to hold this application ? What we did was split the system into different subsystems and deployed each subsystem in different servers (a web farm). Also you could think of clustering your Databases as well.

How do I test so many users connected before I launch this application, is there any free/economical testing tools available ? There are plenty of load testing tools around. I just dont remember a free one but you could goolgle it?

Bumble Bee
A: 

For a setup this large I would highly recommend using a Distributed memory caching provider to be layered above your database. I would also really suggest using an ORM that has built in support for the memory cache, like NHibernate since in an application of this scale your biggest bottleneck will definitely be your database.

You will most likely need a webfarm for this scenario, if a single server is strong enough for it currently at some point in the near future you will most likely out grow a single box which is why it's important to architect in the distributed cache first so you can grow your farm out and not have to re-architect your entire system.

Chris Marisic
A: 

Cache Cache Cache Cache :-) a smart caching policy will make even one server go a long way ... aside from that, you will need to find out where your bottleneck will be. If your application is database heavy, then you will need to consider scaling your database either by clustering, or sharding. If you expect your web server to be the bottleneck (for example if you are doing a lot of processing, like image processing or something), then you can put a load balancer to distribute requests between N number of servers in your webfarm.

Joel Martinez
Totally agree. We dropped server load by about 80% by adding a layered caching mechanism to our web applications.
Patonza
Can you suggest any smart caching policy ?
ANIL MANE
That depends on the volatility of your data. If it's data that does not change often, then aggressively cache it. If it's data that is likely to change often, you can consider something like SqlDependencyCache to invalidate it when the data changes
Joel Martinez
+2  A: 

the choice of MVC versus webforms have little/nothing to do with the ability for the app to handle load. Your problems will be reading/writing to the DB, and that doesn't change no matter which of the two you choose. ideas for improving ability to handle load:

first and foremost: absolute minimum is two servers: web server and DB server, they should NEVER run on the same box.

DB: Efficient queries towards the DB, indexes in the DB, denormalizing tables that are hit a lot, CACHE, CACHE CACHE, running the DB in a cluster, oh, and did I mention CACHING?

Processing: if you need heavy processing, do this in web services that can run on separate machines from the web servers so that you can scale out (buy more servers and put them behind a load balancer if needed)

WEB: avoid the need for server affinity (so that it doesn't matter which web server serves a given user at any given time) this means using DB or StateServer to store sessions, syncing the MachineKey on the servers.

the decision of using MVC or not have NO impact on the ability to handle 10k concurrent users, however it's a HUGE benefit to use MVC if you want the site to be unit-testable

remember: Applications are either testable or detestable, your choice

AndreasKnudsen