A system comprising: a processor and memory; and machine readable instructions stored in the memory, when executed by the processor, configure the processor to: receive a request to deploy a virtual machine on a node from a plurality of nodes running a plurality of virtual machines in a cloud computing system; receive a predicted lifetime for the virtual machine from a prediction engine; receive a predicted average lifetime of virtual machines running on each of the plurality of nodes; allocate the virtual machine to a first node of the plurality of nodes when a first policy of collocating virtual machines with similar lifetimes on a node is adopted and when the predicted lifetime is within a predetermined range of the predicted average lifetime of virtual machines running on the first node; allocate the virtual machine to a second node of the plurality of nodes when a second policy of collocating virtual machines with dissimilar lifetimes on a node is adopted and when the predicted lifetime is not within the predetermined range of the predicted average lifetime of virtual machines running on the second node; and only if a confidence of lifetime prediction by the prediction engine is above a threshold, update the predicted average lifetime of virtual machines on the first node or the second node when the virtual machine is allocated to the first node or the second node; and update the predicted average lifetime of virtual machines on the first node or the second node when one or more virtual machines terminate on the first node or the second node respectively, based on a predicted lifetime from the prediction engine for each of the one or more terminating virtual machines. a processor and memory; and machine readable instructions stored in the memory, when executed by the processor, configure the processor to: receive a request to deploy a virtual machine on a node from a plurality of nodes running a plurality of virtual machines in a cloud computing system; receive a predicted lifetime for the virtual machine from a prediction engine; receive a predicted average lifetime of virtual machines running on each of the plurality of nodes; allocate the virtual machine to a first node of the plurality of nodes when a first policy of collocating virtual machines with similar lifetimes on a node is adopted and when the predicted lifetime is within a predetermined range of the predicted average lifetime of virtual machines running on the first node; allocate the virtual machine to a second node of the plurality of nodes when a second policy of collocating virtual machines with dissimilar lifetimes on a node is adopted and when the predicted lifetime is not within the predetermined range of the predicted average lifetime of virtual machines running on the second node; and only if a confidence of lifetime prediction by the prediction engine is above a threshold, update the predicted average lifetime of virtual machines on the first node or the second node when the virtual machine is allocated to the first node or the second node; and update the predicted average lifetime of virtual machines on the first node or the second node when one or more virtual machines terminate on the first node or the second node respectively, based on a predicted lifetime from the prediction engine for each of the one or more terminating virtual machines. receive a request to deploy a virtual machine on a node from a plurality of nodes running a plurality of virtual machines in a cloud computing system; receive a predicted lifetime for the virtual machine from a prediction engine; receive a predicted average lifetime of virtual machines running on each of the plurality of nodes; allocate the virtual machine to a first node of the plurality of nodes when a first policy of collocating virtual machines with similar lifetimes on a node is adopted and when the predicted lifetime is within a predetermined range of the predicted average lifetime of virtual machines running on the first node; allocate the virtual machine to a second node of the plurality of nodes when a second policy of collocating virtual machines with dissimilar lifetimes on a node is adopted and when the predicted lifetime is not within the predetermined range of the predicted average lifetime of virtual machines running on the second node; and only if a confidence of lifetime prediction by the prediction engine is above a threshold, update the predicted average lifetime of virtual machines on the first node or the second node when the virtual machine is allocated to the first node or the second node; and update the predicted average lifetime of virtual machines on the first node or the second node when one or more virtual machines terminate on the first node or the second node respectively, based on a predicted lifetime from the prediction engine for each of the one or more terminating virtual machines. update the predicted average lifetime of virtual machines on the first node or the second node when the virtual machine is allocated to the first node or the second node; and update the predicted average lifetime of virtual machines on the first node or the second node when one or more virtual machines terminate on the first node or the second node respectively, based on a predicted lifetime from the prediction engine for each of the one or more terminating virtual machines.