| type=page |
| status=published |
| title=Planning your Deployment |
| next=checklist.html |
| prev=concepts.html |
| ~~~~~~ |
| |
| = Planning your Deployment |
| |
| [[GSPLG00002]][[abfcb]] |
| |
| |
| [[planning-your-deployment]] |
| == 2 Planning your Deployment |
| |
| Before deploying {productName}, first determine the performance and |
| availability goals, and then make decisions about the hardware, network, |
| and storage requirements accordingly. |
| |
| The following topics are addressed here: |
| |
| * link:#abfcc[Establishing Performance Goals] |
| * link:#abfcp[Planning the Network Configuration] |
| * link:#abfcy[Planning for Availability] |
| * link:#abfdg[Design Decisions] |
| * link:#abfdn[Planning Message Queue Broker Deployment] |
| |
| [[abfcc]][[GSPLG00019]][[establishing-performance-goals]] |
| |
| === Establishing Performance Goals |
| |
| At its simplest, high performance means maximizing throughput and |
| reducing response time. Beyond these basic goals, you can establish |
| specific goals by determining the following: |
| |
| * What types of applications and services are deployed, and how do |
| clients access them? |
| * Which applications and services need to be highly available? |
| * Do the applications have session state or are they stateless? |
| * What request capacity or throughput must the system support? |
| * How many concurrent users must the system support? |
| * What is an acceptable average response time for user requests? |
| * What is the average think time between requests? |
| |
| You can calculate some of these metrics using a remote browser emulator |
| (RBE) tool, or web site performance and benchmarking software that |
| simulates expected application activity. Typically, RBE and benchmarking |
| products generate concurrent HTTP requests and then report the response |
| time for a given number of requests per minute. You can then use these |
| figures to calculate server activity. |
| |
| The results of the calculations described in this chapter are not |
| absolute. Treat them as reference points to work against, as you |
| fine-tune the performance of {productName} and your applications. |
| |
| The following topics are addressed here: |
| |
| * link:#abfcd[Estimating Throughput] |
| * link:#abfce[Estimating Load on {productName} Instances] |
| * link:#abfcq[Estimating Bandwidth Requirements] |
| * link:#abfct[Estimating Peak Load] |
| |
| [[abfcd]][[GSPLG00054]][[estimating-throughput]] |
| |
| ==== Estimating Throughput |
| |
| In broad terms, throughput measures the amount of work performed by |
| {productName}. For {productName}, throughput can be defined as the |
| number of requests processed per minute per server instance. |
| |
| As described in the next section, {productName} throughput is a |
| function of many factors, including the nature and size of user |
| requests, number of users, and performance of {productName} instances |
| and back-end databases. You can estimate throughput on a single machine |
| by benchmarking with simulated workloads. |
| |
| High availability applications incur additional overhead because they |
| periodically save session data. The amount of overhead depends on the |
| amount of data, how frequently it changes, and how often it is saved. |
| The first two factors depend on the application in question; the latter |
| is also affected by server settings. |
| |
| [[abfce]][[GSPLG00055]][[estimating-load-on-glassfish-server-instances]] |
| |
| ==== Estimating Load on {productName} Instances |
| |
| Consider the following factors to estimate the load on {productName} |
| instances. |
| |
| The following topics are addressed here: |
| |
| * link:#abfcf[Maximum Number of Concurrent Users] |
| * link:#abfcg[Think Time] |
| * link:#abfch[Average Response Time] |
| * link:#abfcj[Requests Per Minute] |
| |
| [[abfcf]][[GSPLG00025]][[maximum-number-of-concurrent-users]] |
| |
| ===== Maximum Number of Concurrent Users |
| |
| Users interact with an application through a client, such as a web |
| browser or Java program. Based on the user's actions, the client |
| periodically sends requests to the {productName}. A user is |
| considered active as long as the user's session has neither expired nor |
| been terminated. When estimating the number of concurrent users, include |
| all active users. |
| |
| Initially, as the number of users increases, throughput increases |
| correspondingly. However, as the number of concurrent requests |
| increases, server performance begins to saturate, and throughput begins |
| to decline. |
| |
| Identify the point at which adding concurrent users reduces the number |
| of requests that can be processed per minute. This point indicates when |
| optimal performance is reached and beyond which throughput start to |
| degrade. Generally, strive to operate the system at optimal throughput |
| as much as possible. You might need to add processing power to handle |
| additional load and increase throughput. |
| |
| [[abfcg]][[GSPLG00026]][[think-time]] |
| |
| ===== Think Time |
| |
| A user does not submit requests continuously. A user submits a request, |
| the server receives and processes the request, and then returns a |
| result, at which point the user spends some time before submitting a new |
| request. The time between one request and the next is called think time. |
| |
| Think times are dependent on the type of users. For example, |
| machine-to-machine interaction such as for a web service typically has a |
| lower think time than that of a human user. You may have to consider a |
| mix of machine and human interactions to estimate think time. |
| |
| Determining the average think time is important. You can use this |
| duration to calculate the number of requests that need to be completed |
| per minute, as well as the number of concurrent users the system can |
| support. |
| |
| [[abfch]][[GSPLG00027]][[average-response-time]] |
| |
| ===== Average Response Time |
| |
| Response time refers to the amount of time {productName} takes to |
| return the results of a request to the user. The response time is |
| affected by factors such as network bandwidth, number of users, number |
| and type of requests submitted, and average think time. |
| |
| In this section, response time refers to the mean, or average, response |
| time. Each type of request has its own minimal response time. However, |
| when evaluating system performance, base the analysis on the average |
| response time of all requests. |
| |
| The faster the response time, the more requests per minute are being |
| processed. However, as the number of users on the system increases, the |
| response time starts to increase as well, even though the number of |
| requests per minute declines. |
| |
| A system performance graph indicates that after a certain point, |
| requests per minute are inversely proportional to response time. The |
| sharper the decline in requests per minute, the steeper the increase in |
| response time. |
| |
| The point of the peak load is the point at which requests per minute |
| start to decline. Prior to this point, response time calculations are |
| not necessarily accurate because they do not use peak numbers in the |
| formula. After this point, (because of the inversely proportional |
| relationship between requests per minute and response time), the |
| administrator can more accurately calculate response time using maximum |
| number of users and requests per minute. |
| |
| Use the following formula to determine T~response~, the response time |
| (in seconds) at peak load: |
| |
| T~response~ = n/r - T~think~ |
| |
| where |
| |
| * n is the number of concurrent users |
| * r is the number requests per second the server receives |
| * T~think~ is the average think time (in seconds) |
| + |
| To obtain an accurate response time result, always include think time in |
| the equation. |
| |
| [[GSPLG00007]][[fygam]] |
| Example 2-1 Calculation of Response Time |
| |
| If the following conditions exist: |
| |
| * Maximum number of concurrent users, n, that the system can support at |
| peak load is 5,000. |
| * Maximum number of requests, r, the system can process at peak load is |
| 1,000 per second. |
| |
| Average think time, T~think~, is three seconds per request. |
| |
| Thus, the calculation of response time is: |
| |
| T~response~ = n/r - T~think~ = (5000/ 1000) - 3 sec. = 5 - 3 sec. |
| |
| Therefore, the response time is two seconds. |
| |
| After the system's response time has been calculated, particularly at |
| peak load, compare it to the acceptable response time for the |
| application. Response time, along with throughput, is one of the main |
| factors critical to {productName} performance. |
| |
| [[abfcj]][[GSPLG00028]][[requests-per-minute]] |
| |
| ===== Requests Per Minute |
| |
| If you know the number of concurrent users at any given time, the |
| response time of their requests, and the average user think time, then |
| you can calculate the number of requests per minute. Typically, start by |
| estimating the number of concurrent users that are on the system. |
| |
| For example, after running web site performance software, the |
| administrator concludes that the average number of concurrent users |
| submitting requests on an online banking web site is 3,000. This number |
| depends on the number of users who have signed up to be members of the |
| online bank, their banking transaction behavior, the time of the day or |
| week they choose to submit requests, and so on. |
| |
| Therefore, knowing this information enables you to use the requests per |
| minute formula described in this section to calculate how many requests |
| per minute your system can handle for this user base. Since requests per |
| minute and response time become inversely proportional at peak load, |
| decide if fewer requests per minute is acceptable as a trade-off for |
| better response time, or alternatively, if a slower response time is |
| acceptable as a trade-off for more requests per minute. |
| |
| Experiment with the requests per minute and response time thresholds |
| that are acceptable as a starting point for fine-tuning system |
| performance. Thereafter, decide which areas of the system require |
| adjustment. |
| |
| Solving for r in the equation in the previous section gives: |
| |
| r = n/(T~response~ + T~think~) |
| |
| [[GSPLG00008]][[fygaj]] |
| Example 2-2 Calculation of Requests Per Second |
| |
| For the values: |
| |
| * n = 2,800 concurrent users |
| * T~response~ = 1 (one second per request average response time) |
| * T~think~ = 3, (three seconds average think time) |
| |
| The calculation for the number of requests per second is: |
| |
| [source] |
| ---- |
| r = 2800 / (1+3) = 700 |
| ---- |
| |
| Therefore, the number of requests per second is 700 and the number of |
| requests per minute is 42000. |
| |
| [[abfcp]][[GSPLG00020]][[planning-the-network-configuration]] |
| |
| === Planning the Network Configuration |
| |
| When planning how to integrate the {productName} into the network, |
| estimate the bandwidth requirements and plan the network in such a way |
| that it can meet users' performance requirements. |
| |
| The following topics are addressed here: |
| |
| * link:#gkvdm[Setting Up Traffic Separation] |
| * link:#abfcq[Estimating Bandwidth Requirements] |
| * link:#abfcr[Calculating Bandwidth Required] |
| * link:#abfct[Estimating Peak Load] |
| * link:#abfcw[Choosing Network Cards] |
| * link:#abfdc[Identifying Failure Classes] |
| |
| [[gkvdm]][[GSPLG00056]][[setting-up-traffic-separation]] |
| |
| ==== Setting Up Traffic Separation |
| |
| You can separate external traffic, such as client requests, from the |
| internal traffic, such as session state failover, database transactions, |
| and messaging. Traffic separation enables you to plan a network better |
| and augment certain parts of the network, as required. |
| |
| To separate the traffic, run each server instance on a multi-homed |
| machine. A multi-homed machine has two IP addresses belonging to |
| different networks, an external IP and an internal IP. The objective is |
| to expose only the external IP to user requests. The internal IP is used |
| only by the cluster instances for internal communication. For details, |
| see "link:ha-administration-guide/clusters.html#GSHAG00266[Using the Multi-Homing Feature With GMS]" in |
| {productName} High Availability Administration |
| Guide. |
| |
| To plan for traffic on both networks, see link:#abfcq[Estimating |
| Bandwidth Requirements]. For external networks, follow the guidelines in |
| link:#abfcr[Calculating Bandwidth Required] and link:#abfct[Estimating |
| Peak Load]. To size the interfaces for internal networks, see |
| link:#abfcw[Choosing Network Cards]. |
| |
| [[abfcq]][[GSPLG00057]][[estimating-bandwidth-requirements]] |
| |
| ==== Estimating Bandwidth Requirements |
| |
| To decide on the desired size and bandwidth of the network, first |
| determine the network traffic and identify its peak. Check if there is a |
| particular hour, day of the week, or day of the month when overall |
| volume peaks, and then determine the duration of that peak. |
| |
| During peak load times, the number of packets in the network is at its |
| highest level. In general, if you design for peak load, scale your |
| system with the goal of handling 100 percent of peak volume. Bear in |
| mind, however, that any network behaves unpredictably and that despite |
| your scaling efforts, it might not always be able handle 100 percent of |
| peak volume. |
| |
| For example, assume that at peak load, five percent of users |
| occasionally do not have immediate network access when accessing |
| applications deployed on {productName}. Of that five percent, |
| estimate how many users retry access after the first attempt. Again, not |
| all of those users might get through, and of that unsuccessful portion, |
| another percentage will retry. As a result, the peak appears longer |
| because peak use is spread out over time as users continue to attempt |
| access. |
| |
| [[abfcr]][[GSPLG00058]][[calculating-bandwidth-required]] |
| |
| ==== Calculating Bandwidth Required |
| |
| Based on the calculations made in link:#abfcc[Establishing Performance |
| Goals], determine the additional bandwidth required for deploying |
| {productName} at your site. |
| |
| Depending on the method of access (T-1 lines, ADSL, cable modem, and so |
| on), calculate the amount of increased bandwidth required to handle your |
| estimated load. For example, suppose your site uses T-1 or higher-speed |
| T-3 lines. Given their bandwidth, estimate how many lines are needed on |
| the network, based on the average number of requests generated per |
| second at your site and the maximum peak load. Calculate these figures |
| using a web site analysis and monitoring tool. |
| |
| [[GSPLG00009]][[fygad]] |
| Example 2-3 Calculation of Bandwidth Required |
| |
| A single T-1 line can handle 1.544 Mbps. Therefore, a network of four |
| T-1 lines can handle approximately 6 Mbps of data. Assuming that the |
| average HTML page sent back to a client is 30 kilobytes (KB), this |
| network of four T-1 lines can handle the following traffic per second: |
| |
| 6,176,000 bits/10 bits = 772,000 bytes per second |
| |
| 772,000 bytes per second/30 KB = approximately 25 concurrent response |
| pages per second. |
| |
| With traffic of 25 pages per second, this system can handle 90,000 pages |
| per hour (25 x 60 seconds x 60 minutes), and therefore 2,160,000 pages |
| per day maximum, assuming an even load throughout the day. If the |
| maximum peak load is greater than this, increase the bandwidth |
| accordingly. |
| |
| [[abfct]][[GSPLG00059]][[estimating-peak-load]] |
| |
| ==== Estimating Peak Load |
| |
| Having an even load throughout the day is probably not realistic. You |
| need to determine when the peak load occurs, how long it lasts, and what |
| percentage of the total load is the peak load. |
| |
| [[GSPLG00010]][[fygai]] |
| Example 2-4 Calculation of Peak Load |
| |
| If the peak load lasts for two hours and takes up 30 percent of the |
| total load of 2,160,000 pages, this implies that 648,000 pages must be |
| carried over the T-1 lines during two hours of the day. |
| |
| Therefore, to accommodate peak load during those two hours, increase the |
| number of T-1 lines according to the following calculations: |
| |
| 648,000 pages/120 minutes = 5,400 pages per minute |
| |
| 5,400 pages per minute/60 seconds = 90 pages per second |
| |
| If four lines can handle 25 pages per second, then approximately four |
| times that many pages requires four times that many lines, in this case |
| 16 lines. The 16 lines are meant for handling the realistic maximum of a |
| 30 percent peak load. Obviously, the other 70 percent of the load can be |
| handled throughout the rest of the day by these many lines. |
| |
| [[abfcw]][[GSPLG00060]][[choosing-network-cards]] |
| |
| ==== Choosing Network Cards |
| |
| For greater bandwidth and optimal network performance, use at least 100 |
| Mbps Ethernet cards or, preferably, 1 Gbps Ethernet cards between |
| servers hosting {productName}. |
| |
| [[abfcy]][[GSPLG00021]][[planning-for-availability]] |
| |
| === Planning for Availability |
| |
| The following topics are addressed here: |
| |
| * link:#abfcz[Rightsizing Availability] |
| * link:#abfda[Using Clusters to Improve Availability] |
| * link:#abfdb[Adding Redundancy to the System] |
| |
| [[abfcz]][[GSPLG00061]][[rightsizing-availability]] |
| |
| ==== Rightsizing Availability |
| |
| To plan availability of systems and applications, assess the |
| availability needs of the user groups that access different |
| applications. For example, external fee-paying users and business |
| partners often have higher quality of service (QoS) expectations than |
| internal users. Thus, it may be more acceptable to internal users for an |
| application feature, application, or server to be unavailable than it |
| would be for paying external customers. |
| |
| There is an increasing cost and complexity to mitigating against |
| decreasingly probable events. At one end of the continuum, a simple |
| load-balanced cluster can tolerate localized application, middleware, |
| and hardware failures. At the other end of the scale, geographically |
| distinct clusters can mitigate against major catastrophes affecting the |
| entire data center. |
| |
| To realize a good return on investment, it often makes sense to identify |
| availability requirements of features within an application. For |
| example, it may not be acceptable for an insurance quotation system to |
| be unavailable (potentially turning away new business), but brief |
| unavailability of the account management function (where existing |
| customers can view their current coverage) is unlikely to turn away |
| existing customers. |
| |
| [[abfda]][[GSPLG00062]][[using-clusters-to-improve-availability]] |
| |
| ==== Using Clusters to Improve Availability |
| |
| At the most basic level, a cluster is a group of {productName} |
| instances—often hosted on multiple physical servers—that appear to |
| clients as a single instance. This provides horizontal scalability as |
| well as higher availability than a single instance on a single machine. |
| This basic level of clustering works in conjunction with the HTTP load |
| balancer plug-in, which accepts HTTP and HTTPS requests and forwards |
| them to one of the instances in the cluster. The ORB and integrated JMS |
| brokers also perform load balancing to {productName} clusters. If an |
| instance fails, becomes unavailable (due to network faults), or becomes |
| unresponsive, requests are redirected only to existing, available |
| machines. The load balancer can also recognize when a failed instance |
| has recovered and redistribute load accordingly. |
| |
| [[abfdb]][[GSPLG00063]][[adding-redundancy-to-the-system]] |
| |
| ==== Adding Redundancy to the System |
| |
| One way to achieve high availability is to add hardware and software |
| redundancy to the system. When one unit fails, the redundant unit takes |
| over. This is also referred to as fault tolerance. In general, to |
| maximize high availability, determine and remove every possible point of |
| failure in the system. |
| |
| [[abfdc]][[GSPLG00029]][[identifying-failure-classes]] |
| |
| ===== Identifying Failure Classes |
| |
| The level of redundancy is determined by the failure classes (types of |
| failure) that the system needs to tolerate. Some examples of failure |
| classes are: |
| |
| * System process |
| * Machine |
| * Power supply |
| * Disk |
| * Network failures |
| * Building fires or other preventable disasters |
| * Unpredictable natural catastrophes |
| |
| Duplicated system processes tolerate single system process failures, as |
| well as single machine failures. Attaching the duplicated mirrored |
| (paired) machines to different power supplies tolerates single power |
| failures. By keeping the mirrored machines in separate buildings, a |
| single-building fire can be tolerated. By keeping them in separate |
| geographical locations, natural catastrophes like earthquakes can be |
| tolerated. |
| |
| [[abfdf]][[GSPLG00030]][[planning-failover-capacity]] |
| |
| ===== Planning Failover Capacity |
| |
| Failover capacity planning implies deciding how many additional servers |
| and processes you need to add to the {productName} deployment so that |
| in the event of a server or process failure, the system can seamlessly |
| recover data and continue processing. If your system gets overloaded, a |
| process or server failure might result, causing response time |
| degradation or even total loss of service. Preparing for such an |
| occurrence is critical to successful deployment. |
| |
| To maintain capacity, especially at peak loads, add spare machines |
| running {productName} instances to the existing deployment. |
| |
| For example, consider a system with two machines running one {productName} instance each. Together, these machines handle a peak load of 300 |
| requests per second. If one of these machines becomes unavailable, the |
| system will be able to handle only 150 requests, assuming an even load |
| distribution between the machines. Therefore, half the requests during |
| peak load will not be served. |
| |
| [[abfdg]][[GSPLG00022]][[design-decisions]] |
| |
| === Design Decisions |
| |
| Design decisions include whether you are designing the system for peak |
| or steady-state load, the number of machines in various roles and their |
| sizes, and the size of the administration thread pool. |
| |
| The following topics are addressed here: |
| |
| * link:#abfdh[Designing for Peak or Steady State Load] |
| * link:#abfdi[System Sizing] |
| * link:#gkvcu[Sizing the Administration Thread Pool] |
| |
| [[abfdh]][[GSPLG00064]][[designing-for-peak-or-steady-state-load]] |
| |
| ==== Designing for Peak or Steady State Load |
| |
| In a typical deployment, there is a difference between steady state and |
| peak workloads: |
| |
| * If the system is designed to handle peak load, it can sustain the |
| expected maximum load of users and requests without degrading response |
| time. This implies that the system can handle extreme cases of expected |
| system load. If the difference between peak load and steady state load |
| is substantial, designing for peak loads can mean spending money on |
| resources that are often idle. |
| * If the system is designed to handle steady state load, it does not |
| have all the resources required to handle the expected peak load. Thus, |
| the system has a slower response time when peak load occurs. |
| |
| How often the system is expected to handle peak load will determine |
| whether you want to design for peak load or for steady state. |
| |
| If peak load occurs often—say, several times per day—it may be |
| worthwhile to expand capacity to handle it. If the system operates at |
| steady state 90 percent of the time, and at peak only 10 percent of the |
| time, then it may be preferable to deploy a system designed around |
| steady state load. This implies that the system's response time will be |
| slower only 10 percent of the time. Decide if the frequency or duration |
| of time that the system operates at peak justifies the need to add |
| resources to the system. |
| |
| [[abfdi]][[GSPLG00065]][[system-sizing]] |
| |
| ==== System Sizing |
| |
| Based on the load on the {productName} instances and failover |
| requirements, you can determine the number of applications server |
| instances (hosts) needed. Evaluate your environment on the basis of the |
| factors explained in link:#abfce[Estimating Load on {productName} |
| Instances] to each {productName} instance, although each instance can |
| use more than one Central Processing Unit (CPU). |
| |
| [[gkvcu]][[GSPLG00066]][[sizing-the-administration-thread-pool]] |
| |
| ==== Sizing the Administration Thread Pool |
| |
| The default `admin-thread-pool` size of 50 should be adequate for most |
| cluster deployments. If you have unusually large clusters, you may need |
| to increase this thread pool size. In this case, set the |
| `max-thread-pool-size` attribute to the number of instances in your |
| largest cluster, but not larger than the number of incoming |
| synchronization requests that the DAS can handle. |
| |
| [[abfdn]][[GSPLG00023]][[planning-message-queue-broker-deployment]] |
| |
| === Planning Message Queue Broker Deployment |
| |
| The Java Message Service (JMS) API is a messaging standard that allows |
| Jakarta EE applications and components to create, send, receive, and read |
| messages. It enables distributed communication that is loosely coupled, |
| reliable, and asynchronous. Message Queue, which implements JMS, is |
| integrated with {productName}, enabling you to create components that |
| send and receive JMS messages, including message-driven beans (MDBs). |
| |
| Message Queue is integrated with {productName} using a resource |
| adapter also known as a connector module. A resource adapter is a Java |
| EE component defined according to the Jakarta EE Connector Architecture |
| (JCA) Specification. This specification defines a standardized way in |
| which application servers such as {productName} can integrate with |
| enterprise information systems such as JMS providers. {productName} |
| includes a resource adapter that integrates with its own JMS provider, |
| Message Queue. To use a different JMS provider, you must obtain and |
| deploy a suitable resource adapter that is designed to integrate with |
| it. |
| |
| Creating a JMS resource in {productName} using the Administration |
| Console creates a preconfigured connector resource that uses the Message |
| Queue resource adapter. To create JMS Resources that use any other |
| resource adapter (including `GenericJMSRA`), you must create them under |
| the Connectors node in the Administration Console. |
| |
| In addition to using resource adapter APIs, {productName} uses |
| additional Message Queue APIs to provide better integration with Message |
| Queue. This tight integration enables features such as connector |
| failover, load balancing of outbound connections, and load balancing of |
| inbound messages to MDBs. These features enable you to make messaging |
| traffic fault-tolerant and highly available. |
| |
| The following topics are addressed here: |
| |
| * link:#abfdo[Multi-Broker Clusters] |
| * link:#abfdq[Configuring {productName} to Use Message Queue Brokers] |
| * link:#abfdx[Example Deployment Scenarios] |
| |
| [[abfdo]][[GSPLG00067]][[multi-broker-clusters]] |
| |
| ==== Multi-Broker Clusters |
| |
| Message Queue supports using multiple interconnected broker instances |
| known as a broker cluster. With broker clusters, client connections are |
| distributed across all the brokers in the cluster. Clustering provides |
| horizontal scalability and improves availability. |
| |
| A single message broker scales to about eight CPUs and provides |
| sufficient throughput for typical applications. If a broker process |
| fails, it is automatically restarted. However, as the number of clients |
| connected to a broker increases, and as the number of messages being |
| delivered increases, a broker will eventually exceed limitations such as |
| number of file descriptors and memory. |
| |
| Having multiple brokers in a cluster rather than a single broker enables |
| you to: |
| |
| * Provide messaging services despite hardware failures on a single machine. |
| * Minimize downtime while performing system maintenance. |
| * Accommodate workgroups having different user repositories. |
| * Deal with firewall restrictions. |
| |
| Message Queue allows you to create conventional or enhanced broker |
| clusters. Conventional broker clusters offer service availability. |
| Enhanced broker clusters offer both service and data availability. For |
| more information, see "link:../openmq/mq-admin-guide/broker-clusters.html#GMADG00041[Configuring and Managing Broker |
| Clusters]" in Open Message Queue Administration Guide. |
| |
| In a conventional cluster, having multiple brokers does not ensure that |
| transactions in progress at the time of a broker failure will continue |
| on the alternate broker. Although Message Queue reestablishes a failed |
| connection with a different broker in a cluster, transactions owned by |
| the failed broker are not available until it restarts. Except for failed |
| in-progress transactions, user applications can continue on the |
| failed-over connection. Service failover is thus ensured. |
| |
| In an enhanced cluster, transactions and persistent messages owned by |
| the failed broker are taken over by another running broker in the |
| cluster and non-prepared transactions are rolled back. Data failover is |
| ensured for prepared transactions and persisted messages. |
| |
| [[abfdp]][[GSPLG00031]][[master-broker-and-client-synchronization-for-conventional-clusters]] |
| |
| ===== Master Broker and Client Synchronization for Conventional Clusters |
| |
| In a configuration for a conventional broker cluster, each destination |
| is replicated on all of the brokers in a cluster. Each broker knows |
| about message consumers that are registered for destinations on all |
| other brokers. Each broker can therefore route messages from its own |
| directly-connected message producers to remote message consumers, and |
| deliver messages from remote producers to its own directly-connected consumers. |
| |
| In a cluster configuration, the broker to which each message producer is |
| directly connected performs the routing for messages sent to it by that |
| producer. Hence, a persistent message is both stored and routed by the |
| message's home broker. |
| |
| Whenever an administrator creates or destroys a destination on a broker, |
| this information is automatically propagated to all other brokers in a |
| cluster. Similarly, whenever a message consumer is registered with its |
| home broker, or whenever a consumer is disconnected from its home |
| broker—either explicitly or because of a client or network failure, or |
| because its home broker goes down—the relevant information about the |
| consumer is propagated throughout the cluster. In a similar fashion, |
| information about durable subscriptions is also propagated to all |
| brokers in a cluster. |
| |
| A shared database of cluster change records can be configured as an |
| alternative to using a master broker. For more information, see |
| "link:../openmq/mq-admin-guide/broker-clusters.html#GMADG00041[Configuring and Managing Broker Clusters]" in Open |
| Message Queue Administration Guide and "link:ha-administration-guide/jms.html#GSHAG00212[Using Message |
| Queue Broker Clusters With {productName}]" in {productName} High Availability Administration Guide. |
| |
| [[abfdq]][[GSPLG00068]][[configuring-glassfish-server-to-use-message-queue-brokers]] |
| |
| ==== Configuring {productName} to Use Message Queue Brokers |
| |
| By default, Message Queue brokers (JMS hosts) run in the same JVM as the |
| {productName} process. However, Message Queue brokers (JMS hosts) can |
| be configured to run in a separate JVM from the {productName} |
| process. This allows multiple {productName} instances or clusters to |
| share the same set of Message Queue brokers. |
| |
| The {productName}'s Java Message Service represents the connector |
| module (resource adapter) for Message Queue. You can manage the Java |
| Message Service through the Administration Console or the `asadmin` |
| command-line utility. |
| |
| In {productName}, a JMS host refers to a Message Queue broker. The |
| {productName}'s Java Message Service configuration contains a JMS |
| Host List (also called AddressList) that contains all the JMS hosts that |
| will be used. |
| |
| [[abfdt]][[GSPLG00032]][[java-message-service-type]] |
| |
| ===== Java Message Service Type |
| |
| There are three types of integration between {productName} and |
| Message Queue brokers: embedded, local, and remote. You can set this |
| type attribute on the Administration Console's Java Message Service page. |
| |
| [[gktcw]][[GSPLG00004]][[embedded-java-message-service]] |
| |
| Embedded Java Message Service |
| |
| If the Type attribute is EMBEDDED, {productName} and the JMS broker |
| are colocated in the same virtual machine. The JMS Service is started |
| in-process and managed by {productName}. In EMBEDDED mode, JMS |
| operations on stand-alone server instances bypass the networking stack, |
| which leads to performance optimization. The EMBEDDED type is most |
| suitable for stand-alone {productName} instances. EMBEDDED mode is |
| not supported for enhanced broker clusters. |
| |
| With the EMBEDDED type, use the Start Arguments attribute to specify |
| Message Queue broker startup parameters. |
| |
| With the EMBEDDED type, make sure the Java heap size is large enough to |
| allow {productName} and Message Queue to run in the same virtual machine. |
| |
| [[abfdu]][[GSPLG00005]][[local-java-message-service]] |
| |
| Local Java Message Service |
| |
| If the Type attribute is LOCAL, {productName} starts and stops the |
| Message Queue broker. When {productName} starts up, it starts the |
| Message Queue broker specified as the Default JMS host. Likewise, when |
| the {productName} instance shuts down, it shuts down the Message |
| Queue broker. The LOCAL type is most suitable for use with enhanced |
| broker clusters, and for other cases where the administrator prefers the |
| use of separate JVMs. |
| |
| With the LOCAL type, use the Start Arguments attribute to specify |
| Message Queue broker startup parameters. |
| |
| [[abfdv]][[GSPLG00006]][[remote-java-message-service]] |
| |
| Remote Java Message Service |
| |
| If the Type attribute is REMOTE, {productName} uses an externally |
| configured broker or broker cluster. In this case, you must start and |
| stop Message Queue brokers separately from {productName}, and use |
| Message Queue tools to configure and tune the broker or broker cluster. |
| The REMOTE type is most suitable for brokers running on different |
| machines from the server instances (to share the load among more |
| machines or for higher availability), or for using a different number of |
| brokers and server instances. |
| |
| With the REMOTE type, you must specify Message Queue broker startup |
| parameters using Message Queue tools. The Start Arguments attribute is ignored. |
| |
| [[abfdr]][[GSPLG00033]][[managing-jms-with-the-administration-console]] |
| |
| ===== Managing JMS with the Administration Console |
| |
| In the Administration Console, you can set JMS properties using the Java |
| Message Service node for a particular configuration. You can set |
| properties such as Reconnect Interval and Reconnect Attempts. For more |
| information, see "link:administration-guide/jms.html#GSADG00020[Administering the Java Message |
| Service (JMS)]" in {productName} Administration |
| Guide. |
| |
| The JMS Hosts node under the Java Message Service node contains a list |
| of JMS hosts. You can add and remove hosts from the list. For each host, |
| you can set the host name, port number, and the administration user name |
| and password. By default, the JMS Hosts list contains one Message Queue |
| broker, called "default_JMS_host," that represents the local Message |
| Queue broker integrated with {productName}. |
| |
| In REMOTE mode, configure the JMS Hosts list to contain all the Message |
| Queue brokers in the cluster. For example, to set up a cluster |
| containing three Message Queue brokers, add a JMS host within the Java |
| Message Service for each one. Message Queue clients use the |
| configuration information in the Java Message Service to communicate |
| with Message Queue broker. |
| |
| [[abfds]][[GSPLG00034]][[managing-jms-with-asadmin]] |
| |
| ===== Managing JMS with asadmin |
| |
| In addition to the Administration Console, you can use the `asadmin` |
| command-line utility to manage the Java Message Service and JMS hosts. |
| Use the following `asadmin` commands: |
| |
| * Configuring Java Message Service attributes: `asadmin set` |
| |
| * Managing JMS hosts: |
| ** `asadmin create-jms-host` |
| ** `asadmin delete-jms-host` |
| ** `asadmin list-jms-hosts` |
| |
| * Managing JMS resources: |
| ** `asadmin create-jms-resource` |
| ** `asadmin delete-jms-resource` |
| ** `asadmin list-jms-resources` |
| |
| + |
| For more information on these commands, see the link:reference-manual.html#GSRFM[{productName} Reference Manual] or the corresponding man pages. |
| |
| [[abfdw]][[GSPLG00035]][[default-jms-host]] |
| |
| ===== Default JMS Host |
| |
| You can specify the default JMS Host in the Administration Console Java |
| Message Service page. If the Java Message Service type is LOCAL, |
| {productName} starts the default JMS host when the {productName} |
| instance starts. If the Java Message Service type is EMBEDDED, the |
| default JMS host is started lazily when needed. |
| |
| In REMOTE mode, to use a Message Queue broker cluster, delete the |
| default JMS host, then add all the Message Queue brokers in the cluster |
| as JMS hosts. In this case, the default JMS host becomes the first JMS |
| host in the JMS host list. |
| |
| You can also explicitly set the default JMS host to one of the JMS |
| hosts. When the {productName} uses a Message Queue cluster, the |
| default JMS host executes Message Queue-specific commands. For example, |
| when a physical destination is created for a Message Queue broker |
| cluster, the default JMS host executes the command to create the |
| physical destinations, but all brokers in the cluster use the physical destination. |
| |
| [[abfdx]][[GSPLG00069]][[example-deployment-scenarios]] |
| |
| ==== Example Deployment Scenarios |
| |
| To accommodate your messaging needs, modify the Java Message Service and |
| JMS host list to suit your deployment, performance, and availability needs. |
| The following sections describe some typical scenarios. |
| |
| For best availability, deploy Message Queue brokers and {productName}s on different machines, if messaging needs are not just with |
| {productName}. Another option is to run a {productName} instance |
| and a Message Queue broker instance on each machine until there is |
| sufficient messaging capacity. |
| |
| [[abfdy]][[GSPLG00036]][[default-deployment]] |
| |
| ===== Default Deployment |
| |
| Installing the {productName} automatically creates a domain |
| administration server (DAS). By default, the Java Message Service type |
| for the DAS is EMBEDDED. So, starting the DAS also starts its default |
| Message Queue broker. |
| |
| Creating a new domain also creates a new broker. By default, when you |
| add a stand-alone server instance or a cluster to the domain, its Java |
| Message Service is configured as EMBEDDED and its default JMS host is |
| the broker started by the DAS. |
| |
| [[abfdz]][[GSPLG00037]][[using-a-message-queue-broker-cluster-with-a-glassfish-server-cluster]] |
| |
| ===== Using a Message Queue Broker Cluster with a {productName} Cluster |
| |
| In EMBEDDED or LOCAL mode, when a {productName} is configured, a |
| Message Queue broker cluster is auto-configured with each {productName} instance associated with a Message Queue broker instance. |
| |
| In REMOTE mode, to configure a {productName} cluster to use a Message |
| Queue broker cluster, add all the Message Queue brokers as JMS hosts in |
| the {productName}'s Java Message Service. Any JMS connection |
| factories created and MDBs deployed then uses the JMS configuration specified. |
| |
| [[abfeb]][[GSPLG00038]][[specifying-an-application-specific-message-queue-broker-cluster]] |
| |
| ===== Specifying an Application-Specific Message Queue Broker Cluster |
| |
| In some cases, an application may need to use a different Message Queue |
| broker cluster than the one used by the {productName} cluster. To do |
| so, use the `AddressList` property of a JMS connection factory or the |
| `activation-config` element in an MDB deployment descriptor to specify |
| the Message Queue broker cluster. |
| |
| For more information about configuring connection factories, see |
| "link:administration-guide/jms.html#GSADG00598[Administering JMS Connection Factories and |
| Destinations]" in {productName} Administration |
| Guide. For more information about MDBs, see "link:application-development-guide/ejb.html#GSDVG00149[Using |
| Message-Driven Beans]" in {productName} |
| Application Development Guide. |
| |
| [[abfec]][[GSPLG00039]][[application-clients]] |
| |
| ===== Application Clients |
| |
| When an application client or standalone application accesses a JMS |
| administered object for the first time, the client JVM retrieves the |
| Java Message Service configuration from the server. Further changes to |
| the JMS service will not be available to the client JVM until it is restarted. |