|
YOUR FEEDBACK
Did you read today's front page stories & breaking news?
SYS-CON.TV |
TOP THREE LINKS YOU MUST CLICK ON Feature Java Messaging Services Clustering Part 2
JMS clustered architectures, colloaction, and distributed load balancing
By: Raffi Basmajian
Jun. 21, 2005 01:00 PM
In Part 1 of this article series we discussed the fundamental aspects of clustering JMS resources in a WebLogic cluster. In Part 2 we will discuss JMS clustering in the context of design and configuration strategies that demonstrate how to create efficient JMS architectures.
The concept of collocation is important to consider in any clustered application. The idea behind collocation is simple: target your application server resources, such as JMS and JDBC, to physical server instances where clients are located and need access to those resources. For example, a JMS message producer first must find a connection factory, and then establish a connection to a JMS server for accessing a specific destination. If the JMS client uses a connection factory located on a remote server instance, a remote connection will be created. Additionally, if the connection factory and JMS server hosting the destination are located on separate physical servers, a remote JMS connection is created. While there is nothing preventing the JMS client from using remote connection factories and JMS resources, a more efficient approach is to collocate the JMS client with the connection factory and JMS resources it needs, thereby avoiding the use of remote connections and reducing network traffic. With distributed load balancing, WebLogic allocates the work load to all server instances in the cluster to provide uniform use of available resources. In a JMS cluster configuration, for example, messages sent to a distributed queue are load balanced among the destination members hosted by JMS servers on separate server instances. This approach helps to ensure accurate contribution of processing capacity from all physical servers in the cluster based on the preconfigured load balancing scheme for the distributed destination. Collocation and distributed load balancing in the context of JMS are key concepts in this article. The next series of architectures illustrate different configurations and how they affect the behavior of clustered JMS applications.
Internal JMS Clients Let's first look at the location of the connection factory, CF1. By targeting CF1 to the cluster, WebLogic first attempts to load balance consumers and producers on the same physical server instance. As depicted on WebLogic Servers 1 and 3, the JMS clients first connect locally to CF1. The connection factory then creates a JMS connection to the local JMS server on that WebLogic instance, connecting the clients with a local member destination of DQ. In this case, local JMS connections are created for the JMS clients. It should be clear from Figure 1 that all JMS clients, including the connection factories, JMS servers, and distributed destination members, are collocated. This is ideal for WebLogic as it avoids the cost of load balancing across the remote member destinations of DQ while routing messages to collocated destinations instead. To ensure WebLogic will first load balance locally, enable Server Affinity from the WebLogic Administration console for any connection factory collocated with JMS resources. In Figure 1, we enabled this option on CF1, and then targeted the connection factory to the entire cluster. Note that connection factories are clients to JMS servers, so it is good practice to collocate these types of administered objects as well, not just JMS producers and consumers. WebLogic Server 2 does not host any queue members for DQ, so we don't target JMS clients to that server instance to avoid routing messages to remote destinations members. This architecture is suitable for systems that prefer increased performance at the cost of some distributed load balancing. This expense is attributed to the preference of local resources over remote resources. Even the persistent stores configured for the JMS servers use a local file resource. The file stores may be configured for superior performance by setting the Synchronous Write Policy to Disabled (configurable from the Administration console for each file store), which completes transactions once they are stored in memory. In terms of reliability, however, this is the least desirable policy, and is not recommended for applications that cannot afford to lose messages. The default policy Cache-Flush, which forces all writes to disk before transactions are complete, is a good trade-off between performance and transactional reliability.
External JMS Clients The external JMS clients may also use CF1 to access DQ, but this may cause unnecessary remote connections and remote routing of message traffic. As depicted in the illustration, MP2 connects to CF1 on WebLogic Server 2. The connection factory must now connect MP2 with a physical queue member of DQ. Connection factory CF1 is enabled with Server Affinity, so it first attempts to connect MP2 with a local member destination of DQ. Since JMSServer2 does not host a collocated queue member, CF1 is forced to create a remote JMS connection to MQ1 on WebLogic Server 1, which effectively routes all message traffic from MP2 across that remote connection. This can create an undesirable network-intensive process if MP2 is generating hundreds, if not thousands, of messages per day, such as in a financial trading application that publishes stock prices nonstop to trader desks throughout the daily trading session. BEA WEBLOGIC LATEST STORIES
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
|
SYS-CON FEATURED WHITEPAPERS MOST READ THIS WEEK BREAKING NEWS FROM THE WIRES
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||