1. A method for providing a high availability system in a cloud computing environment, the method comprising: creating, by a processor, a virtual machine in response to a user request; creating a snapshot agent for the virtual machine and registering the snapshot agent with a snapshot manager, wherein the snapshot agent is configured to: periodically take snapshots of the virtual machine associated with the snapshot agent, wherein the snapshot includes all of the files that constitute the virtual machine including a state and a data of a virtual machine at a specific point in time; determine a delta image based on a change between a current snapshot and a previous snapshot; remove previous snapshots in the virtual machine; transmit the delta image to the snapshot manager; and monitor a health of the virtual machine and to notify the snapshot manager if the virtual machine experiences abnormal behavior; receiving a recovery image for the virtual machine from the snapshot manager in response to the virtual machine experiencing abnormal behavior; and restoring the virtual machine with the recovery image, wherein the snapshot manager is configured to store the recovery image for the virtual machine and to merge the received delta image with the recovery image to update the recovery image; wherein the snapshot agent comprises a policy engine configured to control snapshot collection, and wherein the policy engine is configured to collect system and application performance information for the virtual machine and to responsively determine how frequently snapshots are taken.