1. A computer processor-implemented method for updating an application having a plurality of functional components that are executed on a plurality of different virtual machines (VMs), the method comprising: receiving, by a deployment module, a specification for the application to be updated, wherein the specification identifies a set of software components representing an updated version of the application and containing machine architecture independent code which implements each of the functional components of the application; identifying at least one functional component that is to be updated by comparing the set of software components for the updated version of the application and a set of software components that have been deployed for a currently-deployed application; and directing an agent in each of the VMs that is executing as an instance of the identified functional component to install one or more software components in the VM, thereby causing the VM to execute as an updated instance of the functional component of the application; wherein the machine architecture independent code which implements each of the functional components of the application comprises a script configured to, when executed by an agent in one of the VMs executing as an instance of the functional component, cease acceptance of new work for the instance of the functional component and suspend operation of the instance of the functional component upon completion of any existing work.