What Influences the Performance of Application Servers?
February 25, 2008 by muralis
No matter which application server software you use, its performance is a critical measurement of cost-effectiveness and the end-user experience of your application. Despite the number of popular benchmarks available, no single benchmark can be used to predict the application server’s performance, which depends on a variety of factors:
The features of the application server :
The access paths into and out of the application server.
The application type.
The deployment topology
Scalability
Features of the Application Server
Application servers provide a variety of features, whose performance affect an application’s response time.
In general, an application server environment provides these features either within or in conjunction with the application server:
Enterprise JavaBeans (EJB) container — A container in which the business logic resides. Subcomponents include container-managed persistence (CMP) and message-driven beans (MDB).
Web container — A container in which the presentation components are run.
Java Message Service (JMS) — An underlying layer that provides the messaging backbone.
Java 2 Platform, Enterprise Edition (J2EE) Connector Architecture — An infrastructure that connects to legacy systems through J2EE adapters.
Authentication — A subsystem that authenticates and authorizes accesses to the application.
Load balancer — A subsystem that distributes requests to various application servers and Web servers to enhance the horizontal scalability.
Java Development Kit (JDK) software — The Java virtual machine in which the J2EE containers and other components run.
Transaction manager — A component that offers transaction-related capabilities, including a two-phase commit, dynamic resource enlistment, transaction monitoring and administration, as well as automatic transaction recovery.
Java Database Connectivity (JDBC) drivers — The drivers that connect to the database; they typically support connection pooling and data caching. Application servers usually also provide connection pooling for databases.
Reverse proxy — A component that redirects requests from the Web server to the application server and back.
HTTP engine — A component that handles requests from the HTTP path to the application server.
Session persistence — A component that provides session data in case of container failure.
XML and Web service runtime — A component that processes XML transactions and that transforms and executes tasks in accordance with requests from applications.
Secure socket layer (SSL) — The layer that performs encryption operations on the data exchanged with the application server.
Server infrastructure — Security, multiprocessing, multithreaded architecture, kernel threads, memory management, and such–all the components that provide virtual server support for the hosting of multiple Web sites from a single instance.
Access Paths
The application server resides at the heart of the data center. Applications that run on an application server can access other resources and can be accessed through a variety of paths. The response time from the server, when accessed from devices or when it access resources, impacts the application’s performance. It is, therefore, important to understand the access paths:
Inbound access paths
Hypertext Transport Protocol (HTTP/S) — Traffic is light inbound but heavy outbound. Web services usually use this path and can have different profiles. Because encryption is CPU sensitive, use of SSL impacts performance.
JMS — Traffic is bidirectional, moderate to heavy. You can also run JMS over different transports. The transport protocol that’s in use affects performance.
Remote Method Invocation over Internet Inter-ORB [Object Request Broker] Protocol (RMI/IIOP) — Traffic is bidirectional, light to moderate.
Outbound access paths
Database — Traffic is bidirectional, heavy from the database. Both the transaction type and the driver type impact performance.
J2EE connectors — Traffic is bidirectional, heavy in both directions. Enterprise systems, such as SAP and PeopleSoft, use these links.
Application Types
Different types of applications use different components and access paths of the application server, both of which affect performance. The applications that run on an application server can be broadly classified as follows:
Bank or e-commerce type applications — These applications constitute the majority of those hosted on application servers. The main elements they rely on are JavaServer Pages (JSP) components, Java servlets, and HTTP access. Typically, security is achieved through authentication and SSL, with data requested from a database.
Web service applications — Many applications are built as Web services to enable interoperability and reuse. The main ingredients are HTTP access, XML transformations, JSP components, and Java servlets.
Wireless applications — These applications are accessed from multiple devices, typically with the underlying HTTP/S transport. Because many applications rely on alerts or notifications, JMS plays a key role in the applications. The main components are HTTP-WAP [Wireless Access Protocol], XML transformation, JSP components, and Java servlets.
Desktop Java applications — These are thick client applications that access, through the RMI/IIOP mechanism, the business logic hosted in the EJB components.
Each type of application has its own performance profile. To benchmark an application server, you would need to rely on performance benchmarks that represent that application. For example, you can use standardized benchmarks, such as ECPerf (now called SPECjAppServer) or the Web service measurement toolkit on the PushToTest site to understand the performance of application servers for specific types of application usage.