Designing for Availability
Availability is the ability of an application to tolerate failures in server resources. This means that the client continues to be served through the failure and that, ideally, the failure is transparent to the client. Obviously, the failure can come from either hardware or software sources, so you must develop for both cases.
Availability can be affected by the following factors:
- Application model. For highest availability, ensure that the critical application logic is conducted using the COM+ transactions service. In addition, using a compensation mechanism can be effective in ensuring that resources remain in a healthy state after failures.
- Client model. Integrate "retry on failure" logic into the client application, and strive for a graceful degradation in the application if resources or services are unavailable. Understand what the client is expecting from the application, and create a design that allows for alternatives when a failure occurs.
- Data/state availability. For consistent access to persistent data, use Windows Clustering to provide failover support.
- Service availability. You can use Network Load Balancing to load balance incoming IP requests across a cluster of servers.