可扩展性是系统中的一个非常重要的非功能性需求。但系统中可能有多个瓶颈会阻碍系统的扩展性。在这篇文章中,我们尝试分析软件基础结构成为瓶颈的案例,而不考虑硬件资源上的限制(如CPU、磁盘空间、网络速度等)。下面我们将探讨一下这个问题。
下面是一些整篇文章中用到的一些术语:
·吞吐量:系统支持的每秒能够处理的事务个数。
·服务请求:每个事务中特定硬件的使用率,等于硬件使用率除以吞吐量。
·硬件资源:指处理器、内存、磁盘和网络。
·软件资源:指WEB线程、执行线程、BEAN池及数据库连接池等。
·预计时间:用户预计两次并发提交请求之间的时间。
·短时间法则:一个验证测试及确信测试环境不是瓶颈的法则。
·响应时间:用户等待他提交的请求返回响应的时间。
理论基础
任何J2EE应用通常都有下面几个层次,如图1:
1、硬件基础结构资源(处理器、内存、磁盘和网络)
2、软件基础结构资源(JVM,WEB服务器、应用服务器、数据库服务器)
3、软件应用(J2EE应用)

Figure 1. Snapshot of a J2EE system
这儿有两个可能性导致瓶颈:硬件成为主要瓶颈或者软件成为主要瓶颈。在第一种情况,硬件资源不足够而软件资源很充分,如图2。随着负载的增加,硬件资源成为瓶颈,而软件可以继续扩展。减轻这个瓶颈的方案通常是扩大或者增加硬件。

Figure 2. The hardware pipe becomes a bottleneck
