I'm looking to get some discussion, links, and opinions on the subject of availability.
In some cases, an application inside the OS may be designed to provide some kind of failover and high availability to another instance of that application on another system, without using something like HA at the virtualization layer.
The application components which are distrubuted among different systems can respond to an application outage caused by OS, physical server, or hypervisor issues by itself.
Then there is the option of using something like HA, to provide that high availability without relying on the application to failover.
What are the technical factors that determine when availability should be provided at the application layer and when it should be designed into the virtualization layer? I'm concerned with factors that are technical and not financial at this point.