设计和开发后期
在一个企业级应用的开发后期阶段我们必须关注与性能相关的部分对整个系统进行调整。余下的4点就是针对工程的这个阶段。
9.模拟实际运行环境进行调整
这里的策略是查看整个系统,包括Web服务器,应用服务器和数据库服务器。可以考虑执行以下任务:
- 运行整个应用程序
- 使用厂家推荐的版本和补丁
- 模拟实际运行的数据
- 使用实际运行的资源(比如设备)
- 利用负载测试工具模拟用户负载
10. 利用工具识别性能瓶颈
在这个方法中,我们使系统高负载并监视所有机器的CPU,内存 , I/O和网络的使用情况。识别性能瓶颈的地方后,反复测试,查看具体的问题所在。代码段1列出了各种用于测试程序的各方面性能的工具。要使EJB 应用程序取得高性能,重要的一点是识别性能瓶颈。
11.调整系统参数
应用程序中的许多参数是是可调的。例如,在操作系统中,我们可以调整TCP/IP参数,文件限制数,进程限制数和 IPC限制数。在应用服务器上则可以调整连接池参数,EJB池大小,线程数,JVM个数以及JVM堆栈大小。在数据库服务器上,我们可以调整连接和进程的个数,共享池的大小,缓冲区大小,索引和SQL查询提示。在Web服务器上,可以调整保持连接的参数,线程/进程的个数和连接的backlog.
12.采用群集来满足高负载或考虑升级硬件
有时达到了某种程度时调整代码乃至整个系统会比增加新硬件的开销更大。这种情况下群集有显著的优势。大多数应用服务器都提供了群集的特性。一个EJB本质上就是在多台机器上运行的一组EJB服务器,用于增加系统的马力。一般群集中的每台应用服务器都含有相同的 EJB。服务器群集采用各种不同的算法来实现负载均衡,例如round robin, random, sticky bit, server load等。可以在多个层次上采用群集,如图2所示。

图2: 群集的群集:在不同层次的群集增加了系统的马力
以上12点可以帮助我们设计和实现一个高性能的基于EJB的企业级应用。综合使用这些技巧以使我们的应用程序达到最优化。
代码段 1. 一个设计欠佳的远程接口
若使用以下接口,客户端必须多次调用才能获取数据。我们可以通过使用粗粒度的方法加速这个过程。
public interface Person extends EJBObject
{
public String getFirstName()
throws RemoteException;
public void setFirstName(String firstName)
throws RemoteException;
public String getLastName()
throws RemoteException;
public void setLastName(String lastName)
throws RemoteException;
public int getPersonId()
throws RemoteException;
public void setPersonId(int personId)
throws RemoteException;
}
