Performance and Reliability Patterns
This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. Please see the patterns & practices guidance for the most current information.
Performance, scalability, and reliability are important attributes of any enterprise application. Although there are many ways to increase performance and improve reliability, this patterns cluster focuses how to combine multiple systems that serve any number of applications or users for greater scalability and improved availability. The patterns in this chapter provide a basis to effectively adapt to changes in load and peak traffic, and to increase availability.
Meeting Operational Requirements
Today's enterprise applications have to meet ever-increasing operational demands, including higher availability, improved performance, and the ability to maintain these demands as the load on applications increases. This creates the need for application and supporting infrastructure designs that maximize scalability and availability.
Scalability is the ability of a system or systems to handle increasing demands while maintaining acceptable performance levels. To scale a system effectively, you must identify the nature of the increasing demand and understand its impact on the various system components. After you identify the limiting component, you can either scale up or scale out.
Scaling up is a strategy that increases the capacity of a resource (for example, processor, memory, or storage) in a single server to handle load. For example, you can scale up a database cluster that is built on a multiprocessor operating system by increasing the number of processors or memory.
Scaling out is the strategy that increases the capacity of an infrastructure tier to handle load by adding servers, thereby increasing the aggregate capacity of those servers.
Availability is the measurable run time of a server, the software running on a server, or an application and depends on careful design and operational discipline, including change controls, rigorous testing, and quick upgrade and fallback mechanisms. To achieve the highest levels of availability, it is important to isolate all single points of failure in the design. A highly available design process should analyze each component of the architecture to verify that overall system performance does not depend on any single piece of hardware or software performing a specific function or providing access to a specific piece of information.
This patterns cluster starts off with Server Clustering, which focuses on using server clusters to design an infrastructure tier that meets specific availability and scalability requirements. A server cluster is two or more servers that are interconnected to form a unified virtual computing resource.
Clustering servers increases the availability of a system by ensuring that if a server becomes unavailable because of failure or planned downtime, another server in the cluster can assume the workload, ensuring that the application remains available to users. Clustering also enhances scalability by supporting more users at the current level of performance or by improving application performance for the current users. Clustering servers for scalability adds server redundancy, helping to increase system availability, as mentioned earlier.
The Server Clustering pattern focuses on clustering as a general design technique, which is applied to two additional design patterns: Load-Balanced Cluster and Failover Cluster. Figure 1 shows the Performance and Reliability patterns cluster.
Figure 1: Performance and Reliability patterns cluster
The Load-Balanced Cluster pattern addresses how to maintain acceptable performance through the design and implementation of a scalable infrastructure tier. This pattern describes the common ways to balance incoming Internet Protocol (IP) traffic across a set, or farm, of read-only or application servers.
Load balancing enhances the performance, availability, and scalability of infrastructure tiers, which contain servers such as Web servers, streaming media servers, and virtual private network (VPN) servers, by distributing requests across all of the healthy servers in the server farm (see Server Farm). Load-balanced servers also serve a failover function by redistributing load to the remaining servers when a server in the load-balanced cluster fails.
The Failover Cluster pattern helps you design a highly available application infrastructure tier that protects against loss of service due to the failure of a single server or the software that it hosts. The pattern describes failover clusters and how they provide high availability for read/write stores such as databases, messaging systems, and file and print services.
In a failover cluster, if one of the servers becomes unavailable, another server takes over and continues to provide the service to the end-user, a process known as failover. When failover occurs, users continue to use the application and are unaware that a different server is providing it.
Performance and Reliability Patterns
Table 1 lists the patterns in the Performance and Reliability patterns cluster. The patterns are arranged so that later patterns build on earlier patterns. This implies a progression from more general patterns (such as Server Clustering) to more specific patterns (such as Failover Cluster).
Table 1: Performance and Reliability Patterns
|Server Clustering||How do you provide an infrastructure for your application that meets specific operational requirements, such as availability and scalability?|
|Load-Balanced Cluster||How should you design a scalable infrastructure tier that accounts for changes in load while maintaining an acceptable level of performance?|
|Failover Cluster||How should you design a highly available infrastructure tier that protects against loss of service due to the failure of a single server or the software that it hosts?|