tags:

views:

60

answers:

3

Our app is a simple portal (will be deployed as azure webrole) with following features -

  1. Login
  2. See details particular to that account (no heavy calculations, only showing details already saved in the DB)
  3. See a list of events published to all accounts
  4. Basic account management like password change

What I am trying to gather is what do you think is a reasonable number of concurrent logins for an app like this on one small Azure instance? (I know two instances are needed for better uptime, but lets say we have only one)?

The backend is SQLAzure for legacy reasons (and not windows azure storage). To give an idea about datasize, about a 1000 users data will be stored within 50 MB of storage (images are present only for events and will be pulled from windows azure blobs).

+1  A: 

For a thousand users, you should not be worried.

IIS7 handles up to ten-thousands concurrent users or more, but it boils down to the hardware. Since it will differ depending on what you actually do in code I would recommend publish your app to azure and stress test it.

This tells you if you need more than one front-end or if it's the db which is holding you back.

Also implement logging in azure to time different events.

[Edit]

Another thing to consider is what is a "concurrent user"? If you demand response time of 1 second, and the actual call takes .2 seconds, then you can perform 5 calls consecutively, and still regard them as concurrent.

Mikael Svenson
Thanks Mikael - we will be having a lot more than 1000 users (edited in the comment above), the ratio is just to give an idea how the data is sized for every 1000 users. Also I agree that stress test will be a good thing, but right now its in initial stages, and I am to do an economic viability study to see what our per user cost will work out to be.
Roopesh Shenoy
If you are a Microsoft partner you have access to free use of Azure for 8 months thru MSDN, in order to test it. The most hits I've had on my azure site is about 2000 a day, so not really comparable, but I do SQL calls and external downloads, and have had no issue what so ever. I also added a line about what is a concurrent user to my answer.
Mikael Svenson
Thanks Mikael - we are already bizspark partners and have the free quota, though used it only for testing walkthroughs till now.
Roopesh Shenoy
@Mikael - the 8 months is now extended to 16 months :) hurray!
Roopesh Shenoy
@Roopesh: Yes, at least for those who already were on the previous 8 months free use :) New users might only get 8. But who knows.
Mikael Svenson
+2  A: 

Just use the appropriate architecture and you'll be able to host thousands of concurrent users on a single Web role without even noticing the load or stressing the underlying persistence (whether it is RDB or full event storage). If the numbers of concurrent users go higher, problem of scaling will be just merely about adding another web role or command processor (depending on the type of the load).

I recommend to start looking towards CQRS architectures that go really well with the cloud computing and notion of almost-infinitely scalable solutions.

Rinat Abdullin
Thanks Rinat will take a look at it.
Roopesh Shenoy
Nice read - although the main idea that struck me was to have better reads at the cost of writes to improve performance. But that still does not give me any numbers - reason I am so particular is that some of our initial pricing discussions with interested customers will depend on it. You can understand how it will look if we say something now and end up charging twice of that later!
Roopesh Shenoy
I am accepting this answer, though I have still to confirm that it can actually host thousands of users :). Hoping thats true.
Roopesh Shenoy
Numbers are going to depend on the actual implementation. However, if your web UI only has to read prepared view models, deserialize them using some fast serializer (I strongly recommend Google ProtoBuf for a number of reasons) and bind results to the UI - I doubt that it's going to be heavy operation. StackOverflow itself is an example of high-performant ASP.NET MVC application.
Rinat Abdullin
A: 

Defining your concurrent users is important. A single instance running in a Role isn't going to handle a thousand actual concurrent users, not effectively, but bumping up the instances will give you the ability to scale that out no problem. However, keep in mind that each instance is a compute instance, thus charging $$.

Once you figure out what Role & Instance provisioning you want to make available for the application you can then get a real idea of what you'll need. Also, keep in mind that load balancing and other issues that could come into play if the site is truly huge. You might need to contact Microsoft to appropriately plan at that level, and possibly even more to two Roles with multiple Instances in each of those Roles.

Anyway... just adding some additional things to think about.

Adron
hmm.. but I thought load balancing is take care of by Microsoft in Azure - you just say we need x instances of this web role and voila.. they are there, fully load balanced!
Roopesh Shenoy