Availability belongs to the service, not the component

A user experiences a service: an application that responds, a transaction that completes. That service depends on a chain of layers, and it is available only when every layer it needs is available at the same moment.

For layers in series, availability multiplies. As an illustration only, three layers that are each available 99.9% of the time give a combined figure of about 99.7%. Redundancy raises the figure for a layer by placing two or more units in parallel, so that the layer fails only when all of them fail together. The design task is therefore to find which layer limits the whole chain, not to buy the most resilient version of every component.

Walk the stack, layer by layer

The table lists the nine layers that should each be examined. For every layer, the question is the same: what happens to the service if one unit here fails, and what happens during planned maintenance?

High-availability review by layer
LayerTypical failureCommon mechanismsWhat to verify
PowerFeed loss, UPS fault, distribution faultDual feeds, A/B distribution, UPS, generatorEach device with two power supplies is wired to both feeds
ComputeHost or component failureClustering, host restart, spare capacityRemaining hosts can carry the load after one fails
StorageController, shelf or path failureDual controllers, redundant paths, replicationMultipath is active and tested, not only configured
NetworkSwitch, link or route failureRedundant uplinks, dual core, routing convergenceConvergence time is within application tolerance
VirtualisationHost failure, management lossCluster HA, live migration, reservationsRunning workloads survive loss of the management layer
DatabasesInstance failure, replica lagClustering or replication with defined failoverFailover completes without data loss beyond the stated objective
ApplicationsProcess failure, dependency failureMultiple instances behind load balancersSession handling survives the loss of an instance
BackupBackup target loss, corrupt backupsReplicated copies, immutable copiesA restore has actually been performed
Management systemsMonitoring, identity or DNS unavailableRedundant management services, out-of-band accessOperators can still reach and manage equipment during a fault

Remove, tolerate or manage each single point of failure

Every single point of failure found in the review needs a recorded decision. Removing all of them is rarely proportionate, but leaving one unrecorded is a design gap.

  • Remove it: add a parallel unit or path, when the cost is justified by the impact of failure.
  • Tolerate it: accept the outage, document the expected restoration time and make sure the business owner has agreed.
  • Manage it operationally: keep a spare, a runbook and a monitored alert so that restoration is fast and rehearsed.

Look for shared dependencies that defeat redundancy

Two redundant units that share something are not independent. Common examples are two switches fed from one power distribution unit, two firewalls managed from one controller, two sites relying on a single DNS or time source, or two clusters using the same identity service for administrator login.

A dependency walk, starting from each critical application and following every call, name lookup, authentication request and storage path, is the practical way to find these.

Plan for degraded operation

After a failure, the system runs with less capacity. A cluster sized to carry the peak load with all hosts will not carry it with one host down and another in maintenance. Capacity is therefore sized for the load the service must carry during the degraded conditions it is expected to tolerate, which is the same discipline described in the capacity-planning work for the data centre.

Test failover, and record the result

Redundancy that has never been exercised is an assumption. Failover tests should be part of acceptance: remove a power feed, fail a controller, disconnect an uplink, stop an application instance, and record how long the service took to recover and what users experienced. Repeat selected tests after major changes.

  • Each layer has a documented failure mode and mechanism.
  • Every single point of failure has a recorded remove, tolerate or manage decision.
  • Shared dependencies have been traced and documented.
  • Capacity has been checked for degraded operation.
  • Failover tests have been run with recorded results.
  • Monitoring detects each failure and alerts a named owner.