In my last project we had to sell ASP solutions to client. The software works on our servers and the clients have to connect remotely.
The projet has been launced by a small non-IT company, mantain a Server Park for them is not possible. For this reason we opted for dedicated server managed by exernal service provider.
The problem of this solution is that one server is very expensive and the approach to create multiple instances of Tomcat, mysql, … is a big risk in case of problem of one instance and it’s complicated in the configuration phase.
The solution adopted is to install VMWare Server (you can do the same with Virtuozzo, XEN, …) and install an Ubuntu VM for each client. Ubuntu has a server edition conceived for the VMs (Ubuntu JEOS). It needs only 128MB ram and 200 MB HD. We used Tomcat 6 (thanks Spring!!!) for this product (max 200MB for instance). 512 MB dedicated for each VM is largely sufficient.
Each client has a different ip port to connect to the appication. Configuring the nat.conf of VMWare on the server we can easily redirect the client request to his ‘dedicated server’. On a typical server with 4GB of ram we can install 8 VMs reducing the costs for us and the client.
A big advantage is the possibility to create locally the VM and transfer it to the ‘production’ when it’s ready copying the files. The maintenance is easier because when we have to upgrade the version we can redirect the port to a different VM with the updated product. This last options is not implemented yet because we preferred to maintain the DB server in the VM with tomcat. In the future (after benchmarks) it could be interesting to install a ‘service’ VM with the DB and access it directly from the VMs.