Upgrading web applications can be very expensive if your storefront is the web. Weekend maintenance windows, or downtime in general can give an entire company heartburn. Survey data shows that web application downtime can cost some companies up to $72,000 per minute. Yet the cost of not constantly rolling out new features and bug fixes can equally penalize a company in the competitive online markets today.
Previously, to upgrade an application on Tomcat and avoid downtime, system administrators would have to set up multiple instances of Tomcat and do some very clever stuff with load balancers. This equals extra hardware costs as a permanent part of the company’s infrastructure.
Now with the advent of parallel deployment in Tomcat 7, you can have multiple versions of the same application installed at the same time on a single server. Users with active sessions can continue to use the old application and new users will be routed to the new version. This way, no user sessions will be interrupted, and the old application can gracefully phase out.
Parallel deployment is a function of the Context Container. The Context element represents a web application, which in turn specifies the context path to a particular Web Application Archive (WAR) file that is the application logic. Parallel deployment allows you to deploy multiple versions of a web application with the same context path concurrently. When choosing what version of the application for any given request, Tomcat will:
If you have clustered Tomcat, configured using the FarmWarDeployer, you can achieve parallel deployment within that cluster. The FarmWarDeployer is a component which lets you deploy a WAR file across an entire cluster. By placing the WAR file on the designated host, clustered Tomcat will automatically replicate that deployment across every server in the cluster.
Because of the sophistication and cost savings this feature brings to enterprise deployments of Tomcat, this feature, built by VMware’s SpringSource, was initially looked at being part of VMware vFabric's tc Server, but once we got building it, it couldn’t be done cleanly without putting some hooks into Tomcat that didn’t fit naturally into the architecture. After careful consideration of what was best for Apache Tomcat, VMware decided to still fill the need to build this feature out, but donate it to the Apache Tomcat project at large.