How to deploy the Web site on production with minimal impact for users


I'm trying to find the best server architecture solution to deploy monthly updates to an external public facing website. What I'm looking for are ways to release a new version of a website with minimal impact to users. Besides deploying the standard way (ie. stop IIS, copy new website over existing website, start IIS), what are some "better" solutions for deployment out there? It would be nice if they kept their session and didn't have to see a "Website under maintenance" message during the update.

My server configuration

We have 2 IIS web servers (2003) and are trying to figure out the best way to utilize them for deployments. My first thought was to update the non-active web server with the latest release. Then to gracefully point the web traffic to that server with minimal impact to users (best case, the user doesn't lose his session). How would you go about "repointing" the web traffic from server 1 to server 2? Changing firewall NAT? Changing DNS records? Some other way?? We need to be able to test the live site immediately after we release the new changes (duh).

BTW, we are using nant and cruise control to automate the builds, and a custom web service to deploy the build to production. So it's all automated with the click of a button.

Could a better solution be achieved using a 3rd server? If so how?

The way we do is

We have a load balancer from netscaler,

take one webserver out of loadbalancer , do all deployments, do a iisreset and the put back in load balancer.

Do the same thing for server2 .

Finally invalidate loadbalancer cache.