• No results found

Using WebLogic Server Clusters to Improve Performance

Tuning WebLogic Server 6

6.7 Using WebLogic Server Clusters to Improve Performance

A WebLogic Server cluster is a group of WebLogic Servers instances that together provide fail-over and replicated services to support scalable high-availability

operations for clients within a domain. A cluster appears to its clients as a single server  but is in fact a group of servers acting as one to provide increased scalability and

reliability.

A domain can include multiple WebLogic Server clusters and non-clustered WebLogic Server instances. Clustered WebLogic Server instances within a domain behave

similarly to non-clustered instances, except that they provide failover and load  balancing. The Administration Server for the domain manages all the configuration

parameters for the clustered and non-clustered instances.

For more information about clusters, see "Understanding WebLogic Server Clustering"

in Administering Clusters for Oracle WebLogic Server.

6.7.1 Scalability and High Availability

Scalability is the ability of a system to grow in one or more dimensions as more resources are added to the system. Typically, these dimensions include (among other

Using WebLogic Server Clusters to Improve Performance

things), the number of concurrent users that can be supported and the number of transactions that can be processed in a given unit of time.

Given a well-designed application, it is entirely possible to increase performance by simply adding more resources. To increase the load handling capabilities of WebLogic Server, add another WebLogic Server instance to your cluster—without changing your application. Clusters provide two key benefits that are not provided by a single server:

scalability and availability.

WebLogic Server clusters bring scalability and high-availability to Java EE applications in a way that is transparent to application developers. Scalability expands the capacity of the middle tier beyond that of a single WebLogic Server or a single computer. The only limitation on cluster membership is that all WebLogic Servers must be able to communicate by IP multicast. New WebLogic Servers can be added to a cluster dynamically to increase capacity.

A WebLogic Server cluster guarantees high-availability by using the redundancy of multiple servers to insulate clients from failures. The same service can be provided on multiple servers in a cluster. If one server fails, another can take over. The ability to have a functioning server take over from a failed server increases the availability of the application to clients.

Clustering in the Messaging Service is provided through distributed destinations;

connection concentrators, and connection load-balancing (determined by connection factory targeting); and clustered Store-and-Forward (SAF). Client load-balancing with respect to distributed destinations is tunable on connection factories. Distributed destination Message Driven Beans (MDBs) that are targeted to the same cluster that hosts the distributed destination automatically deploy only on cluster servers that host the distributed destination members and only process messages from their local

destination. Distributed queue MDBs that are targeted to a different server or cluster than the host of the distributed destination automatically create consumers for every distributed destination member. For example, each running MDB has a consumer for each distributed destination queue member.

6.7.2 How to Ensure Scalability for WebLogic Clusters

In general, any operation that requires communication between the servers in a cluster is a potential scalability hindrance. The following sections provide information on issues that impact the ability to linearly scale clustered WebLogic servers:

Section 6.7.2.1, "Database Bottlenecks"

Section 6.7.2.2, "Session Replication"

Section 6.7.2.3, "Asynchronous HTTP Session Replication"

Section 6.7.2.4, "Invalidation of Entity EJBs"

Section 6.7.2.5, "Invalidation of HTTP sessions"

Section 6.7.2.6, "JNDI Binding, Unbinding and Rebinding"

Note: Provided that you have resolved all application and

environment bottleneck issues, adding additional servers to a cluster should provide linear scalability. When doing benchmark or initial configuration test runs, isolate issues in a single server environment  before moving to a clustered environment.

Using WebLogic Server Clusters to Improve Performance

6.7.2.1 Database Bottlenecks

In many cases where a cluster of WebLogic servers fails to scale, the database is the  bottleneck. In such situations, the only solutions are to tune the da tabase or reduce

load on the database by exploring other options. SeeChapter 8, "Database Tuning" and Chapter 11, "Tuning Data Sources".

6.7.2.2 Session Replication

User session data can be stored in two standard ways in a Java EE application: stateful session EJBs or HTTP sessions. By themselves, they are rarely a impact cluster

scalability. However, when coupled with a session replication mechanism required to provide high-availability, bottlenecks are introduced. If a Java EE application has Web and EJB components, you should store user session data in HTTP sessions:

HTTP session management provides more options for handling fail-over, such as replication, a shared DB or file.

Superior scalability.

Replication of the HTTP session state occurs outside of any transactions. Stateful session bean replication occurs in a transaction which is more resource intensive.

The HTTP session replication mechanism is more sophisticated and provides optimizations a wider variety of situations than stateful session bean replication.

See Section 17.2, "Session Management".

6.7.2.3 Asynchronous HTTP Session Replication

Asynchronous replication of http sessions provides the option of choosing asynchronous session replication using:

Section 6.7.2.3.1, "Asynchronous HTTP Session Replication using a Secondary Server"

Section 6.7.2.3.2, "Asynchronous HTTP Session Replication using a Database"

6.7.2.3.1 Asynchronous HTTP Session Replication using a Secondary Server Set the PersistentStoreType to async-replicated or async-replicated-if-clustered to specify asynchronous replication of data between a primary server and a secondary server.

See session-descriptor section of Developing Web Applications, Servlets, and JSPs for Oracle WebLogic Server. To tune batched replication, adjust the SessionFlushThreshold parameter.

Replication behavior depends on cluster type. The following table describes how asynchronous replication occurs for a given cluster topology.

Table 6–3 Asynchronous Replication Behavior by Cluster Topology 

Topology Behavior

LAN Replication to a secondary server within the same cluster occurs asynchronously with the "async-replication" setting in the webapp.

MAN Replication to a secondary server in a remote cluster. This happens asynchronously with the "async-replication" setting in the webapp.

Using WebLogic Server Clusters to Improve Performance

The following section outlines asynchronous replication session behavior:

During undeployment or redeployment:

– The session is unregistered and removed from the update queue.

– The session on the secondary server is unregistered.

If the application is moved to admin mode, the sessions are flushed and replicated to the secondary server. If secondary server is down, the system attempts to

failover to another server.

A server shutdown or failure state triggers the replication of any batched sessions to minimize the potential loss of session information.

6.7.2.3.2 Asynchronous HTTP Session Replication using a Database Set the

PersistentStoreType to async-jdbc to specify asynchronous replication of data to a database. See session-descriptor section of Developing Web Applications, Servlets, and  JSPs for Oracle WebLogic Server. To tune batched replication, adjust the

SessionFlushThreshold and the SessionFlushInterval parameters.

The following section outlines asynchronous replication session behavior:

During undeployment or redeployment:

– The session is unregistered and removed from the update queue.

– The session is removed from the database.

If the application is moved to admin mode, the sessions are flushed and replicated to the database.

6.7.2.4 Invalidation of Entity EJBs

This applies to entity EJBs that use a concurrency strategy ofOptimistic orReadOnly with a read-write pattern.

Optimistic—When anOptimistic concurrency bean is updated, the EJB container sends a multicast message to other cluster members to invalidate their local copies of the bean. This is done to avoid optimistic concurrency exceptions being thrown by the other servers and hence the need to retry transactions. If updates to the EJBs are

frequent, the work done by the servers to invalidate each other's local caches become a serious bottleneck. A flag calledcluster-invalidation-disabled (default false) is used to turn off such invalidations. This is set in therdbms descriptor file.

ReadOnly with a read-write pattern—In this pattern, persistent data that would otherwise be represented by a single EJB are actually represented by two EJBs: one read-only and the other updatable. When the state of the updateable bean changes, the container automatically invalidates corresponding read-only EJB instance. If updates to the EJBs are frequent, the work done by the servers to invalidate the read-only EJBs  becomes a serious bottleneck.

WAN Replication to a secondary server within the cluster happens asynchronously with the "async-replication" setting in the webapp. Persistence to a database through a remote cluster happens asynchronously regardless of whether

"async-replication" or "replication" is chosen.

Table 6–3 (Cont.) Asynchronous Replication Behavior by Cluster Topology 

Topology Behavior

Monitoring a WebLogic Server Domain

6.7.2.5 Invalidation of HTTP sessions

Similar to Section 6.7.2.4, "Invalidation of Entity EJBs", HTTP sessions can also be invalidated. This is not as expensive as entity EJB invalidation, since only the session data stored in the secondary server needs to be invalidated. HTTP sessions should be invalidated if they are no longer in use.

6.7.2.6 JNDI Binding, Unbinding and Rebinding

In general, JNDI binds, unbinds and rebinds are expensive operations. However, these operations become a bigger bottleneck in clustered environments because JNDI tree changes have to be propagated to all members of a cluster. If such operations are performed too frequently, they can reduce cluster scalability significantly.

6.7.3 Running Multiple Server Instances on Multi-Core Machines

With multi-core machines, additional consideration must be given to the ratio of the number of available cores to clustered WebLogic Server instances. Because WebLogic Server has no built-in limit to the number of server instances that reside in a cluster, large, multi-core servers, can potentially host very large clusters or multiple clusters.

Consider the following when determining the optimal ratio of cores to WebLogic server instances:

The memory requirements of the application. Choose the heap sizes of individual instance and the total number of instances to ensure that you're providing

sufficient memory for the application and achieving good GC performance. For some applications, allocating very large heaps to a single instance may lead to longer GC pause times. In this case the performance may benefit from increasing the number of instances and giving each instance a smaller heap.

Maximizing CPU utilization. While WebLogic Server is capable of utilizing multiple cores per instance, for some applications increasing the number of instances on a given machine (reducing the number of cores per instance) can improve CPU utilization and overall performance.

6.7.4 Improving Cluster Throughput using XA Transaction Cluster Affinity

XA transaction cluster affinity allows server instances that are participating in a global transactions to service related requests rather than load-balancing these requests to other member servers. WhenEnable Transaction Affinity=true, cluster throughput is increased by:

Reducing inter-server transaction coordination traffic

Improving resource utilization, such as reducing JDBC connections

Simplifying asynchronous processing of transactions

See "Configure clusters" in Oracle WebLogic Server Administration Console Online Help and "XA Transaction Affinity" in Administering Clusters for Oracle WebLogic Server.