Dynamically Modifying A Server
Bill Clementson and James Robertson have some reflections on how to modify Lisp and Smalltalk server applications on the fly. This is a huge issue if you want to build a high availability application; if you're taking a server down for maintenance, you either need a fallover server, or you need to avoid taking the server down altogether. Mainframe vendors have known this for years and an IPL on a mainframe is a big deal, you just don't restart a mainframe because you installed a patch, even to the OS itself.
In a clustered environment, you can take servers offline for maintenance, but this can be difficult to automate. When you're using an external load balancer, you have to coordinate between the server and load balancer; if you take a server down, it can take the load balancer a few seconds to realize that, and you could lose messages in the meantime. App servers like WebSphere have a "ripple" feature that propagates code changes across a cluster with a single command. I don't know of anything like this for .NET, though AppCenter may do that for you. On .NET, you can replace assemblies in a server application, but that forces an application restart, so you lose any state stored on the server. It sounds like in James' scenario, he relies on using loadable components along with an administrative API to get the server to reload components, which makes me wonder if you could do something similar for a .NET web application, where the application itself is just a driver that loads components from elsewhere. It certainly wouldn't be a standard design though.