应用程序设计注意事项
本主题描述有关应用程序设计和调整的体系结构建议。
设计应用程序信息包含应用程序的体系结构建议和实现。对于现有应用程序,这些建议可能要求更改现有的实现。调整应用程序服务器和 resource 参数对设计严谨的应用程序的性能影响最大。
使用本主题中的设计应用程序注意事项作为提示,以确保对应用程序进行周全的设计和调整。这些注意事项包括 Web 站点和其他有关查找最佳实践的理念,这些最佳实践用于设计 WebSphere® 应用程序(特别是在 Java™ Platform, Enterprise Edition (Java EE) 规范的 WebSphere 扩展领域中)。
Java EE 应用程序在关系数据库中装入、存储、创建和除去数据,此过程通常称为持久性。大多数企业应用程序会频繁访问数据库。持久层的体系结构和性能对于应用程序的性能是非常关键的。因此,在选择要求性能折衷的体系结构时,持久性是要重点考虑的一个方面。此指南建议首先将重点放在具有干净体系结构的解决方案上。干净体系结构考虑该解决方案的数据一致性、安全性、可维护性、可移植性和性能。尽管此方法可能达到的绝对峰值性能不会有通过手动编写解决方案(它会忽略所提及的服务质量)那么高,但此方法可以达到数据一致性、可维护性、可移植性、安全性和性能的相应平衡。
Java EE 中提供了用于持久性的多个选项:一些使用实体 Bean(包含容器管理的持久性 (CMP) 或 bean 管理的持久性 (BMP))的会话 Bean、一些使用 Java 数据库连接 (JDBC) 的会话 bean 以及一些使用 JDBC 的 Java Bean。对于先前提到的原因,由于它提供了最大的安全性、可维护性和可移植性,因此请考虑 CMP 实体持久性。同时,建议使用 CMP 以获得良好的性能。有关调整企业 Bean(更确切地说,CMP)的信息,请参阅调整应用程序服务器主题的“调整 EJB 容器”一节。
如果应用程序需要使用企业 bean 而不使用 EJB 实体,那么持久性机制通常会涉及 JDBC API。因为 JDBC 需要手动编码,即对数据库实例运行的结构化查询语言 (SQL),所以对应用程序中使用的 SQL 语句进行优化非常关键。而且,还应配置数据库服务器以支持这些 SQL 语句获取最佳性能。最后,使用特定 JDBC API 时必须考虑包括预编译语句和批处理。
不管考虑哪一种持久性机制,都应使用容器管理的事务,其中 bean 会将事务的管理委托给容器。对于使用 JDBC 的应用程序,可通过使用会话面模式来轻松实现这一点,该模式会将所有 JDBC 功能与无状态会话 bean 合并到一起。
最后,有关调整 EJB 实体 bean 或 JDBC 通信所基于的连接的信息,可在调整应用程序服务器主题的“调整数据源”一节中找到。
一种标准的 Java EE 编程体系结构是“模型 - 视图 - 控制器 (MVC)”体系结构,其中对控制器 Servlet 的调用可能会包含一个或多个子 JavaServer Pages (JSP) 文件以构造该视图。MVC 模式是应用程序体系结构的建议模式。此模式要求视图(JSP 文件或表示逻辑)、控制器 (servlet) 和模型(业务逻辑)完全分离。使用 MVC 模式使得能够分别优化每一层的性能和可伸缩性。
那些避免存储客户机用户状态的实现可以更好地调整规模和性能。设计实现以避免存储状态。如果需要存储状态,那么确保状态数据的大小和存储状态的时间保持为最小的可用值。而且,如果需要存储状态,那么应考虑发生故障时重新构造状态的可能性,而不是通过复制来保证故障转移。
- 会话管理调整
- EJB 调整技巧
- 使用高速缓存监视器对动态高速缓存进行调整
大多数 Java EE 应用程序工作负载的读操作多于写操作。读操作要求请求通过若干拓扑级别,这些级别由下列各项组成:前端 Web 服务器、应用程序服务器的 Web 容器、应用程序服务器的 EJB 容器以及数据库。WebSphere Application Server 允许在包含 Web Service 的所有网络拓扑和 Java EE 编程模型级别上对结果进行高速缓存。
在设计应用程序体系结构时,由于高速缓存将在编程模型的大多数级别进行集成,因此应用程序设计者必须考虑高速缓存。高速缓存是在应用程序中强制执行 MVC 模型的另一个原因。将高速缓存和 MVC 组合在一起,可以在独立于表示技术以及在应用程序客户机不存在表示的情况下提供高速缓存。
在执行网络规划时,由于高速缓存也会在网络拓扑的大多数级别进行集成,因此网络设计者必须考虑高速缓存。对于在公共因特网上提供的应用程序,当 WebSphere Application Server 高速缓存扩展至公共因特网时,网络设计者可能要考虑 Edge Side Include (ESI) 高速缓存。在 Proxy Server for WebSphere Application Server、WebSphere Edge Component Caching Proxy 和 WebSphere 插件中提供了网络高速缓存服务。
Java EE 工作负载通常由两种类型的操作组成。必须执行第一种类型的操作以响应系统请求。在完成启动该操作的用户请求后,可异步执行第二种类型的操作。
这里有一个此差别的示例。有一个允许您提交购买订单的应用程序,它允许您继续进行,而系统会验证订单、查询远程系统并在将来通知您购买订单的状态。此示例可与等待响应的客户端同步实现。同步实现要求应用程序服务器资源和您进行等待,直到整个操作完成。如果进程允许您继续进行,同时以异步方式计算结果,那么应用程序服务器会将该处理安排在相对其他请求最佳的时间进行。可以通过电子邮件或应用程序中的其他某个界面来触发对您发出通知。
因为异步方法支持优化安排工作负载以及最低程度地使用服务器资源,所以应考虑使用异步体系结构。WebSphere Application Server 支持通过 Java EE Java 消息服务 (JMS) 和消息驱动的 Bean (MDB) 以及 Java EE 的并行实用程序异步编程。这些对象将在“调整 Java 消息服务”主题和“调整 MDB”主题中进行说明。
验证应用程序使用的所有库是否可同时用于提高服务器端性能。某些库可在客户机应用程序中正常工作,但在考虑服务器端性能问题(如内存利用率、同步和池)时,那么不能使用。建议使用对应用程序使用的测试方法,对未作为应用程序一部分进行开发的所有库进行性能测试。
其他参考:IBM® WebSphere Developer Technical Journal:最受欢迎的 10 个 Java EE 最佳实践在 XML 应用程序中提高性能,第 2 部分