A method for deploying a multi-node distributed application, the method comprising: receiving, by a deployment module, a specification for the application, characterized by: receiving the specification for the application wherein the application has a plurality of functional components that are executed on a plurality of different nodes, the nodes providing application services to a user, wherein each node is configured in a manner to provide a virtualization environment that supports execution of a plurality of virtual machines (VMs), is configured to execute an instance of a functional component and includes component software applications and/or libraries to perform one or more specialized tasks of the functional component within multi-node application, and wherein the specification specifies (i) a number of instances of each functional component of the application that is to be deployed, and (ii) hardware properties that would be required by any node executing any one of the functional components; requesting a virtual infrastructure platform to launch a plurality of virtual machines VMs that is sufficient to execute each instance of a functional component in a separate VM, wherein each of the VMs (i) is configured to support hardware properties required by at least one of the functional components, and (ii) includes an agent component configured to communicate with the deployment module; and directing each of the agent components in each of the VMs to install code in the VM that implements one of the functional components that is compatible with the hardware properties of the VM, thereby causing the VM to execute as one of the instances of the functional components of the application. receiving, by a deployment module, a specification for the application, receiving the specification for the application wherein the application has a plurality of functional components that are executed on a plurality of different nodes, the nodes providing application services to a user, wherein each node is configured in a manner to provide a virtualization environment that supports execution of a plurality of virtual machines (VMs), is configured to execute an instance of a functional component and includes component software applications and/or libraries to perform one or more specialized tasks of the functional component within multi-node application, and wherein the specification specifies (i) a number of instances of each functional component of the application that is to be deployed, and (ii) hardware properties that would be required by any node executing any one of the functional components; requesting a virtual infrastructure platform to launch a plurality of virtual machines VMs that is sufficient to execute each instance of a functional component in a separate VM, wherein each of the VMs (i) is configured to support hardware properties required by at least one of the functional components, and (ii) includes an agent component configured to communicate with the deployment module; and directing each of the agent components in each of the VMs to install code in the VM that implements one of the functional components that is compatible with the hardware properties of the VM, thereby causing the VM to execute as one of the instances of the functional components of the application.