Several types of architectures are now used to increase availability of computer systems. Duplicate hardware systems with fully replicated components is the traditional hardware structure for achieving high availability. The traditional software model for utilizing this hardware is one system that runs the application while the other sits idle, acting as a standby ready to take over if the primary system fails. The drawbacks of this approach include increased hardware costs, with no improvement in system throughput, and the lack of protection from intermittent application failures.