CPU throttling: the next generation
IIS 7 has a CPU throttling function that prevents unruly sites from gobbling up too much CPU. Unfortunately, it has an all-or-nothing flavor to it which makes it less useful than it ought to be.
First, when you have throttling set for a site, the only form of throttling available is to kill the site process entirely for a particular length of time. You can set the CPU threshold and kill length, but it means the site is completely disabled for whatever that length of time is. There is no native way to configure IIS to have a site only use 90% of CPU for processor X (or all processors) at any time.
Second, IIS 7's CPU throttling is bound to a given application pool. This isn't so terrible if you have a separate pool for each website, and that by itself isn't a terrible thought if you have the CPU cores to throw at such a proposition. (Even if you only have one core, it's still not a terrible thought for low-CPU sites.) But if you have multiple sites that share the same application pool, they all go offline if CPU throttling kicks in for only one of those sites.
IIS 8's solution to all this is to add two new actions to the way CPU throttling works: Throttle and Throttle under load. Throttle caps CPU for a given worker process, and any outcome processes spawned by that worker as well. Throttle under load allows a site to use as much CPU as is available, but will throttle that process back if it starts competing for CPU with other processes.
This allows throttling to be done without killing the process wholesale, and adds that much more flexibility in multi-tenancy environments. You can run that many more sites side-by-side, with or without setting candid processor affinities for their worker processes, and not have them stomp all over each other.
Another minor change is the Application Initialization Module, which allows a site to acknowledge requests for pages and respond with a friendly message while the site code itself is still being spun up. This feature can keep public from pounding on their browser's refresh button when a change to a library forces a recompile.
SSL improvements
I've never liked the way IIS has handled SSL. “Clunky” and “cumbersome” are two of the less vitriolic adjectives I've used to give reasons for the total process of adding and managing SSL certificates to IIS. Thankfully, IIS 8 has three major new improvements to its handling of SSL.
Centralized certificate management. IIS 7 forces you to import each certificate into each instance of IIS, which is a headache if you're managing a total farm's worth of servers. IIS 8 lets you initiation a Central Certificate Store, or CCS. This allows all the certificates needed across your farm to be placed in a single place. The name of the certificate file can be used to automatically map and bind the certificate to the domain in question, and multiple-domain certificates are also supported owing to this scheme (you just make multiple copies of the certificate and rename it appropriately).
Server Name Indication help (for using SSI with host headers). Not long ago I learned for myself, the very hard and painful way, how hard it is to have SSI on a server where multiple sites share a single IP address and use host headers. A new technology named Server Name Indication allows SSI to be used on sites that can only be reached via host headers, but it requires both a server and a client that can help it. IIS 8 fixes the “server” end of the equation, and most recent browsers provide help (with one glaring exception being any version of IE on Windows XP).
Scalability. Thanks to improvements in how certificates are loaded and managed, SSL-enabled sites now scale far more efficiently, and you can help many more of them on the same hardware (up to thousands). On the same note, IIS's handling of configuration files (*.config) have been reworked for the same kind of scale.
Join the conversation! Your thoughts help the community grow.