1. A method for providing a high availability system in a cloud computing environment, the method comprising: creating an 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; 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.