A dynamic Web site comprises a number of different elements, any one of which can act as a bottleneck and slow down or stop traffic. Tracking down a problem to a specific piece of your Web site is the first step toward fixing it.
Bandwidth By some counts, the majority of all Web site performance issues arise on the perimeter of the sites LAN: insufficient outbound bandwidth, poor firewall performance, and/or glitches in routing, switching or load balancing. While very common, these issues are typically easy and inexpensive to address.
Web Server Web servers are by far the least common source of performance bottlenecks, though they can cause problems when collecting content from multiple separate servers or when theyre used to process business logic. While tuning and optimization can help, Web server bottlenecks are perhaps the only type of performance problem in which adding additional hardware is often the best solution.
Application Server From a processing perspective, app servers do the bulk of the heavy lifting in a well-designed Web site, and it is therefore not surprising that they are often a veritable breeding ground for performance bottlenecks of every size and description. Most often these choke points are a matter of server tuning; in most app servers there are hundreds of different settings to tweak, which can have profound impacts on performance. According to Steve Caplow of Empirix, "The good news is that if you get it right, you can dramatically improve performance without major changes to your code or infrastructure. The bad news is that server tuning is something of a black art."
Problems with application components are less common, as they are often discovered in functional testing or early in the testing process. When they do arise, however, they can prove devastating; a serious performance flaw in application code can require rewriting the entire application and all subsequent work that relies upon it.
Difficulties also can arise in the interaction between the app server and database server. Because the app server acts as a gateway for queries to the database, small communications errors between the two can produce a large obstacle for traffic.
Database Database servers are particularly vulnerable to stress because, unlike Web application servers, their functionality is often difficult to distribute across more than one machine. Though they are typically shielded from the brunt of the Web sites load, an imperfectly optimized database server can easily be swamped by queries from a bank of app servers.