I hate airplanes. They need to reorganize the layout of planes into First Class, Business, Coach, and Contagious. Walking disease vectors can have their own little self contained universe in the plane, cut off from recycling their plagues into our breathing space. Can you tell I'm sick? Well, at least it happened at the end of my vacation.
Regardless of my sore throat, I lurched my way to Victoria Code Camp yesterday. It was a great event, many kudos to the organizers. One of the best talks of the day was from Richard Campbell of Strangeloop Networks on the scalability and load testing of ASP.Net applications. Even though I was familiar with most of the metrics Richard talked about, you always gain insight from listening to experts pontificate on their areas of specialty. I was fascinated by the Performance Equation that he presented (taken from the book "Field Guide to Application Delivery Systems" by Peter Sevcik and Rebecca Wetzel). Here it is:
Basically what this shows is that as you scale up an application, given adequate bandwidth and a constant client computation time of your pages, server code becomes a larger and larger performance factor. But until you're dealing with hundreds of requests a second? Get the rest under control! Wise words IMHO.
Aside from the above nerdsplosion, I took much more away from Richard's talks. It was clear that he had dealt with many clients who had given up on ASP.Net as not being able to meet the same performance milestones as other solutions. He mentioned PHP specifically, along with J2EE and WebSphere, as things that his clients had told him they wanted to migrate to because of ASP.Net's poor performance. And Richard thus spake to his clients:
"Microsoft configured ASP.Net for ease of application development out of the box. Microsoft did not configure ASP.Net for fastest performance out of the box. That doesn't mean it isn't performant!"
I can't stress how important a point this is. The more you let the ASP.Net pipeline coddle your development along, the more overhead it is doing for you on every web request. This is fine for small sites, but when you hit the big time, you need to know about caching, deadlocks, session storage, garbage collection, and how your worker processes recycle. I've seen people recompile PHP from source to take out one compile option to increase their web performance by 1%. ASP.Net is just as configurable, it can run just as fast, and it can do the job in a managed environment that you have full control over. Just like anything else, you simply need to know how to do it.
Incidentally, Richard got IIS on his laptop up to 600 requests per second under load, and it was happy as a clam. He's apparently personally pushed IIS Servers to 1000 requests per second in production environments.
I'll be getting back to my website project this week and am anxious to try out some of Richard's suggested tools and techniques. And of course blogging about it. We should have some interesting mono and performance related posts coming up soon.