A load balancer is often used to distribute incoming messages amongst multiple service instances. A “stateful” service is a service that tracks state as messages are received. Accordingly, for load balancers that distribute messages to stateful services, the load balancer may “affinitize” messages belonging to the same state to the same service instance. On the other hand, for all new messages which are not yet associated with a service instance, the load balancer need not be concerned with affinitization, but can distributed the messages to whichever backend machine is deemed most available.
Affinitization can be advantageous in services where once a service instance begins to process a particular client, that service instance cannot be moved to other machines in the server farm. Basically the state of the service instance could be stored in memory of the local machine and hence cannot be moved to other machines in the farm. As a result, such services might use message affinitization for them to work when deployed on a scaled out server farm.
In other cases, the service deployed on the server farm shares a common state store. And as a result of various other factors including the implementation technology of the service, it is possible that the service instance can be brought back up on a different machine from where it was originally started. Even then, however, if the load balancer continues to pick the same backend machine for processing messages belonging to the same service instance, then it would provide a substantial performance improvement as opposed to spraying messages to various backend machines.
Embodiments described herein related to the use of a message forwarding intermediary for multiple service instances, while allowing the service instance to control whether or not messages are processed under a transaction. Optionally, the use of a message forwarding intermediary may also perform stateful-session based affinitization of the messages, such that message that belong to the same stateful-session tend to get processed by the same service instance.
In one embodiment, the message forwarding intermediary performs a peek-lock of a message from the forward-end peek-lock enabled message pool, an example of which being a queue. The message forwarding intermediary evaluates the message to identify that, of a plurality of service instances, a particular service instance is to process the message. This identification may involve, as previously mentioned, affinitization of the message to the particular service instance based on the service instance's processing of message(s) from the same stateful session as the message being currently evaluated. The message forwarding intermediary dispatches the message towards a backward-end message pool corresponding to the particular service instance such that the message is ultimately received into the backward-end message pool.
In one embodiment, the service instance responds by performing a peek-lock of a message from the backward-end peek-lock enabled message pool. The service instance processes the message, perhaps under a transaction. Upon successful processing of the message, the service instance performs a delete of the message in the backward-end message pool, or otherwise indicates that processing is complete. The backward-end message pool responds by causing the forward-end peek-lock enabled pool to perform a delete of the message in the forward-end peek-lock enabled message pool under the transaction created at the particular service instance.
This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
In order to describe the manner in which the above-recited and other advantages and features can be obtained, a more particular description of various embodiments will be rendered by reference to the appended drawings. Understanding that these drawings depict only sample embodiments and are not therefore to be considered to be limiting of the scope of the invention, the embodiments will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:
In accordance with embodiments described herein, a message forwarding intermediary intermediates messages for multiple service instances, while allowing the service instance to control whether or not messages are processed under a transaction. Optionally, the message forwarding intermediary may also perform stateful-session based affinitization of the messages, such that messages that belong to the same stateful-session tend to get processed by the same service instance. First, some introductory discussion regarding message processors will be described with respect to
A message processor may be implemented in software or hardware, or a combination thereof.
As used herein, the term “module” or “component” can refer to software objects or routines that execute on the computing system. The different components, modules, engines, and services described herein may be implemented as objects or processes that execute on the computing system (e.g., as separate threads). However, as will be described further below with respect to
In the description that follows, embodiments are described with reference to acts that are performed by one or more computing systems. If such acts are implemented in software, one or more processors of the associated computing system that performs the act direct the operation of the computing system in response to having executed computer-executable instructions. An example of such an operation involves the manipulation of data. The computer-executable instructions (and the manipulated data) may be stored in the memory 104 of the computing system 100A.
Computing system 100A may also contain communication channels 108 that allow the computing system 100A to communicate with other message processors over, for example, network 110. Communication channels 108 are examples of communications media. Communications media typically embody computer-readable instructions, data structures, program modules, or other data in a modulated data signal such as a carrier wave or other transport mechanism and include any information-delivery media. By way of example, and not limitation, communications media include wired media, such as wired networks and direct-wired connections, and wireless media such as acoustic, radio, infrared, and other wireless media. The term computer-readable media as used herein includes both storage media and communications media.
Embodiments within the scope of the present invention also include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable media can be any available media that can be accessed by a general purpose or special purpose computer. By way of example, and not limitation, such computer-readable media can comprise physical storage and/or memory media such as RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to carry or store desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer.
Computer-executable instructions comprise, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions. Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described herein. Rather, the specific features and acts described herein are disclosed as example forms of implementing the claims.
Now that example message processors have been described,
The environment 200 includes a forward-end message pool 210. The message pool 210 is “peek-lock enabled”. In this description and in the claims, a message pool is “peek-lock enabled” if it can participate in a “peek-lock” coordination pattern on at least one message (and potentially all messages) in the message pool. A message pool can participate in a “peek-lock” coordination pattern if it can perform a “peek” and a “lock” operation.
The peek operation (also referred to herein as a “non-destructive read”) means that the message pool 1) can receive requests for a message in the pool from a requestor, and 2) responds to the request by providing a view on the contents of the requested message to the requestor, without deleting the requested message from the message pool.
The “lock” operation means that the message pool responds to the request by locking the requested message in the message pool for exclusive access by the requestor until the lock is released. When the message is locked in the message pool, another instance of the message cannot be read again from the message pool for processing before the lock is released. In fact, a locked message in the message pool might not even be perceived by other computing entities other than the requester. Rather, the message pool has granted the requestor an exclusive right to determine the disposition of the message. In a preferred embodiment, that exclusive right is granted with a limited duration. Such a limited duration exclusive right on the lock is referred to herein as a “lease”. As examples, the limited duration might be a fixed interval, or perhaps the lifetime of the receiver's process.
Upon successful processing of the read instance of the message, the message may be deleted from the message pool. For instance, the requestor may choose to convert the non-destructive read performed during the peek operation, into a destructive read (i.e., a delete), thereby resulting in the message begin deleted from the message pool. The requestor might further choose to perform the delete along with other work via a transaction. If that is the case, the transaction coordinates the destructive read with other activities in the system.
Upon unsuccessful processing of the read instance of the message, the lock of the message may be released (i.e., the message may be unlocked) so that the message may be once again read from the message pool for processing. This may be accomplished, for example, by the requestor revoking the grant of the exclusive right to access the message (also referred to herein as an “unlock” operation). Alternatively, the expiration of the lease would also cause the grant of the exclusive right of the requestor to be revoked. Thus, the message becomes unlocked in the message pool, allowing other processes to access the message.
The term “peek-lock” need not be the actual terms (even in source code) that are used when making the commands used to perform the peek-lock operation.
There are two message pools 210 and 241 expressly illustrated in
The message pool 210 is designated in
The environment 200 also includes a message forwarding intermediary 220 and one or more service instances 250. The service instances 250 are illustrated as including four service instances 251 through 254. However, the ellipses 255 represents that there may be other numbers of service instances as well, even as low as one, and perhaps zero at some points in time, or there may be many more instances such as thousands, or even millions of service instances. The number of service instances 250 is not important to the broader principles described herein. The ellipses 255 also represents that the number of services instances may increase (as new service instances are instantiated), or decrease (as service instances are terminated).
In one embodiment, the service instances are running on different machines. As an example only, suppose for purposes of discussion only, that service instance 251 and 252 run on a machine 261, and service instances 253 and 254 run on a machine 262.
The message forwarding intermediary 220 receives messages (i.e., a view of the contents of the now locked message) from the forward-end message pool 210, decides which of the service instances 251 through 254 is to process the message, and dispatches the message contents towards the appropriate service instance. For instance, the remaining example refers to a case in which the message forwarding intermediary 220 dispatches message contents towards the service instance 251. In that case, the message contents is dispatched through a dispatch channel 231 that provides the message contents from the message forwarding intermediary 220 into the backward-end message pool 241. The delivery mechanism for dispatching messages from the message forwarding intermediary 220 into the other service instances 252 through 254 is not illustrated or described herein, except to say that each delivery mechanism may, but not need, be the same as that described for the service instance 251.
In one embodiment, the message forwarding intermediary 220 acts as a load balancer in deciding which of the service instances to which to dispatch the message contents. For instance, the message forwarding intermediary 220 may identify a number of candidate service instances that are capable of processing the message, and select from only one of those multiple instances based on the respective loads of the candidate service instances.
As previously mentioned, the dispatch channel 231 allows for messages to be communicated into the backward-end message pool 241. This may be accomplished, for example, using any protocol. However, in one embodiment, the communication protocol is a two-way communication protocol. An example of this is Transmission Control Protocol (TCP) which uses the Internet Protocol (IP) (also called “TCP over IP”). Thus, incoming message are received one way into the forward-end message pool 210, following which there may be a two way communication communicating the messages from the message forwarding intermediary 220 into the backward-end message pool 241. Finally, the backward-end message pool 241 may expose its services to the service instance 251 in the same way that it would had the backward-end message pool received the messages directly one way. Thus, in this embodiment, the service instance 251 may interface with the backward-end message pool 241 in the same way as it might interface with the forward-end message pool 210 had the message forwarding intermediary 220 been absent, and the service instance 251 coupled directly to the forward-end message pool 210.
The message forwarding intermediary performs a peek-lock (act 301) of a message from the forward-end peek-lock enabled message pool. The message may correspond to a stateful service or session. Recall that in the peek-lock coordination pattern, the message forwarding intermediary 220 requests a message from the forward-end message pool 210. If the message is locked, the request is refused. However, if the message is not locked, the forward-end message pool 210 provides a view on the contents of the message to the message forwarding intermediary 220. The message itself remains in the message pool. In fact, the message is locked in the message pool as part of the peek-lock coordination pattern, so that the message intermediary has exclusive access to the locked message. Accordingly, while the message is locked, another instance of the message is prevented from being dispatched unless and until the lock is released.
The message forwarding intermediary 220 evaluates the message contents (act 302). Based on the message state and/or other circumstances, the message forwarding intermediary 220 will decide a service instance that the message contents should be sent to. In the example that will be described hereinafter, that particular service instance is the service instance 251. In one embodiment, the message forwarding intermediary 220 performs a session-based affinitization load balancing algorithm. As an example, for certain types of services, once the service instance begins to process a particular client or group of messages that belong to the same session, that service instance cannot be moved to other machines in the server farm.
Perhaps the state of the service instance could be stored in memory of the machine and hence cannot be moved to other machines in the farm. In the example, of
In other cases, the service instances deployed on the farm, share a common state store. Furthermore, suppose as a result of various other factors including the implementation technology of the service, it is possible that the service instance can be brought back up on a different machine from where it was originally started. Even then, for potentially improved performance, the message forwarding intermediary may continue to pick the same machine for processing messages belonging to the same service instance.
If there is not yet a service instance that is ready to service the message, the message forwarding intermediary may cause a service instance to be initiated on an appropriate machine. The message forwarding intermediary may keep track of the health of the various servers in a server farm, and distribute the message appropriately. In evaluating the appropriate service instance to dispatch the message to, the message forwarding intermediary might also identify the appropriate server machine to dispatch the message to in the case where there is more than one available server.
The message forwarding intermediary then dispatches (act 303) the message contents towards a backward-end peek-lock enabled message pool 241 corresponding to the particular service instance 251. This is done such that the message is ultimately received into the backward-end peek-lock enabled message pool 241. In other words, although the message forwarding intermediary may not have complete control over the dispatch channel 231, the message forwarding intermediary does inject the message contents into the dispatch channel 231. In one embodiment, the dispatch channel 231 comprises a TCP channel that communicates the message using transmission control protocol. TCP allows the message to be reliably communicated between the message forwarding intermediary 220 and the backward-end message pool 241. The message is then available in the backward-end message pool 241 for the service instance 251. In the case where the backward-end message pool 241 is a queue, there may be some logic that converts the TCP message into a form that may be inserted into the backward-end message pool 241.
The service instance 251 then reads the message from the backward-end message pool 241 (act 311). For instance, this might be accomplished using a peek-lock, although not required, and may be the same type of peek-lock that was performed by the message forwarding intermediary 220 on the forward-end message pool 210.
Possibly, but not necessarily, prior to the receipt of this message, the service instance may have created a transaction under which the message will be processed (act 312). For instance, this transaction might have been previously created due to the processing a prior message under the transaction, or perhaps due to some other preliminary setup of the transaction. The service instance determines (act 313) that the message should be processed under the transaction created at the service instance. If the transaction has already been created (Yes in decision block 314), then the service instance processes the message under this transaction (act 315). Otherwise, (No in decision block 314), the transaction is created (act 312) in preparation for performing the message under the transaction (act 315). Alternatively, the message may be processed outside of a transaction.
Specifically, arrows 401 and 501 represent the message forwarding intermediary acquiring the message from the forward-end message processor. Arrows 402 and 502 represent that message forwarding intermediary dispatching the message into the dispatch channel. Arrows 403 and 503 represent the message being received into the backward-end message pool. Arrows 404 and 504 represent the message being received by the service instance from the backward-end message processor. In the illustrated cases of
Returning to
This delete or completion operation causes the forward-end peek-lock enabled pool to perform a transactional delete of the message (act 321). This may occur by “flowing” the transaction created at the service instance back to the forward-end message pool. In the case of
The service instance then determines whether or not to the service instance is ready to decide whether to commit or rollback the transaction (decision block 331). It is possible that even after the deletion operation in the forward-end message pool, the service instance still is not ready to make a transaction decision (No in decision block 331). For instance, there may be further messages that are expected to be performed as part of the transaction before a transaction decision can be made. In that case (No in decision block 331), the service instance waits until it is ready to make a decision on the transaction (Yes in decision block 331). This may perhaps only occur after the processing of one or more subsequent messages under the transaction.
If the service is ready to make the transaction decision (Yes in decision block 331), then the service instance decides whether or not to commit or rollback the transaction (decision block 332). If the decision is to commit (Commit in decision block 332), then the service instance commits the transaction (act 341), which causes the deletion of the message in the forward-end message processor to be committed 351). On the other hand, if the decision is to rollback (Rollback in decision block 332), the service instance rolls back the transaction (act 342) which is Tx1 in the case of
In one embodiment, to assist with a transaction in which multiple messages from the forward-end message pool 210 are to be processed under the same transaction, the above-described process may be repeated for each message. However, if the message forwarding intermediary determines that any of the messages were not processed successfully by the service instance, the message forwarding intermediary may treat all of the messages as though they were not processed successfully. Thus, for example, if six messages are to be processed under a transaction, and the message forwarding intermediary is signaled by the service instance that the first five messages were processed successfully, the message forwarding intermediary may abstain for the time being from notifying the forward-end message pool of the disposition of the messages. If the sixth message is processed successfully, then the message forwarding intermediary may notify the forward-end message pool of the disposition of all six messages as successfully processed (causing all six messages to be deleted by the forward-end message pool). If the sixth message is not processed successfully, then the message forwarding intermediary may notify the forward-end message pool that none of the six messages were successfully processed (causing all six messages to be unlocked by the forward-end message pool).
When processing multiple messages under a single transaction, the message forwarding intermediary may assign a processing identifier that is unique within the group of messages to be processed under the transaction. When the message forwarding intermediary is made aware of the results of processing of the message, this unique processing identifier may also be provided by the service instance, allowing the message processing identifying to correlate the results with the proper message.
This mechanism allows for messages to be processed in a transactional manner in a message intermediation environment, without requiring that the message forwarding intermediator create the transaction. Instead the service instance may create the transaction. Accordingly, the service instance may process some messages from a client outside of a transaction, and some inside a transaction.
The present invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.
This application is a continuation of U.S. patent application Ser. No. 12/484,741 filed on Jun. 15, 2009 and entitled “ROUTING OF POOLED MESSAGES VIA AN INTERMEDIARY,” which application is expressly incorporated herein by reference in its entirety.
Number | Name | Date | Kind |
---|---|---|---|
5339392 | Risberg | Aug 1994 | A |
5371889 | Klein | Dec 1994 | A |
5452445 | Hallmark et al. | Sep 1995 | A |
5465328 | Dievendorff | Nov 1995 | A |
5592622 | Isfeld | Jan 1997 | A |
5802310 | Rajaraman | Sep 1998 | A |
5913213 | Wikstrom | Jun 1999 | A |
5924097 | Hll et al. | Jul 1999 | A |
5974442 | Adams | Oct 1999 | A |
6185197 | Cheung Yeung | Feb 2001 | B1 |
6263360 | Arnold | Jul 2001 | B1 |
6332150 | Khan et al. | Dec 2001 | B1 |
6353834 | Wong | Mar 2002 | B1 |
6425017 | Dievendorff et al. | Jul 2002 | B1 |
6463480 | Kikuchi | Oct 2002 | B2 |
6484196 | Maurille | Nov 2002 | B1 |
6609178 | Ofer | Aug 2003 | B1 |
6687735 | Logston et al. | Feb 2004 | B1 |
6748583 | Aizenbud-Reshef et al. | Jun 2004 | B2 |
6817018 | Clarke et al. | Nov 2004 | B1 |
6845230 | Syed | Jan 2005 | B2 |
6848108 | Caron | Jan 2005 | B1 |
6848109 | Kühn | Jan 2005 | B1 |
6853617 | Watson et al. | Feb 2005 | B2 |
6886041 | Messinger | Apr 2005 | B2 |
6886169 | Wei | Apr 2005 | B2 |
6968395 | Lee | Nov 2005 | B1 |
6971001 | Rolfs | Nov 2005 | B1 |
6983322 | Tripp et al. | Jan 2006 | B1 |
7068634 | Vanttinen | Jun 2006 | B2 |
7111001 | Harris | Sep 2006 | B2 |
7149976 | Yagati | Dec 2006 | B2 |
7154901 | Chava et al. | Dec 2006 | B2 |
7200676 | Christensen et al. | Apr 2007 | B2 |
7240350 | Eberhard | Jul 2007 | B1 |
7318109 | Liscano et al. | Jan 2008 | B2 |
7330860 | Adiba | Feb 2008 | B2 |
7370329 | Kumar | May 2008 | B2 |
7380135 | Nishimoto et al. | May 2008 | B2 |
7392057 | Lee | Jun 2008 | B2 |
7409428 | Brabec | Aug 2008 | B1 |
7434225 | Groetzner et al. | Oct 2008 | B2 |
7527558 | Lavoie | May 2009 | B2 |
7543181 | Buxton | Jun 2009 | B2 |
7565451 | Cabrera | Jul 2009 | B2 |
7631108 | Kesselman | Dec 2009 | B2 |
7640249 | Smits | Dec 2009 | B2 |
7711788 | Lev Ran et al. | May 2010 | B2 |
7743109 | Kaminsky et al. | Jun 2010 | B2 |
7783610 | Lin et al. | Aug 2010 | B2 |
7802263 | Fuchs | Sep 2010 | B2 |
7865684 | Michaylov | Jan 2011 | B2 |
7937364 | Chandrasekaran | May 2011 | B1 |
7945631 | Chkodrov et al. | May 2011 | B2 |
8095935 | Paramasivam et al. | Jan 2012 | B2 |
20010023482 | Wray | Sep 2001 | A1 |
20020116538 | Chen | Aug 2002 | A1 |
20040186918 | Lonnfors | Sep 2004 | A1 |
20040268357 | Joy et al. | Dec 2004 | A1 |
20050147057 | LaDue | Jul 2005 | A1 |
20050195820 | Betts | Sep 2005 | A1 |
20050219617 | Mochizuki et al. | Oct 2005 | A1 |
20050278270 | Carr | Dec 2005 | A1 |
20060053163 | Liu et al. | Mar 2006 | A1 |
20060080579 | Rothman et al. | Apr 2006 | A1 |
20060085797 | Connelly | Apr 2006 | A1 |
20060101064 | Strong | May 2006 | A1 |
20060136367 | Todd | Jun 2006 | A1 |
20060146879 | Anthias et al. | Jul 2006 | A1 |
20060149865 | Kirstein | Jul 2006 | A1 |
20060155862 | Kathi et al. | Jul 2006 | A1 |
20060187902 | Birch et al. | Aug 2006 | A1 |
20060230062 | Roy-Chowdhury et al. | Oct 2006 | A1 |
20070005613 | Singh et al. | Jan 2007 | A1 |
20070005640 | Klein | Jan 2007 | A1 |
20070027928 | Majumdar | Feb 2007 | A1 |
20070109592 | Parvathaneni et al. | May 2007 | A1 |
20080086567 | Langen et al. | Apr 2008 | A1 |
20080187004 | Johnson | Aug 2008 | A1 |
20080288954 | Fuchs | Nov 2008 | A1 |
20090132671 | Chkodrov et al. | May 2009 | A1 |
20090133036 | Allen | May 2009 | A1 |
20090133037 | Allen | May 2009 | A1 |
20090199208 | Pinto | Aug 2009 | A1 |
20090216793 | Szyperski | Aug 2009 | A1 |
20090222794 | Pinto | Sep 2009 | A1 |
20090282396 | Boyer | Nov 2009 | A1 |
20090319911 | McCann et al. | Dec 2009 | A1 |
20090320044 | Dar et al. | Dec 2009 | A1 |
20100107177 | Pinto | Apr 2010 | A1 |
20110231702 | Allen | Sep 2011 | A1 |
20110264738 | Allen | Oct 2011 | A1 |
Number | Date | Country |
---|---|---|
1198106 | Apr 2002 | EP |
1873643 | Jan 2008 | EP |
WO2006118529 | Nov 2006 | WO |
Entry |
---|
Ceponiene, Lina, et al., “Transformation from Requirements to Design for Service Oriented Information Systems”, ADBIS Research Communications, 2005, pp. 164-177. |
Arbab, Farhad, “The Influence of Coordination on Program Structure”, 1997 IEEE, pp. 300-309. |
Zambonelli, Franco, et al., “Programmable Coordination Infrastructures for Mobility”, 2001, 5 pages. |
Arbab, Farhad, et al., “Coordination through Channel Composition”, 2002, LNCS 2315, pp. 22-39. |
Castro, Eva M., et al., Departamento de Ingenieria de Sistemas Telematicos Universidad Politecnica de Madrid DIT.UPM, “Reliable Multicast for Coordination of Cooperative Applications”, http://jungla.dit.upm.es/˜ecastro/ReliableMulticast/rmulticast.html, 1999, 1 page. |
Guermouche, Abdou, et al., “A study of various load information exchange mechanisms for a distributed application using dynamic scheduling” Jan. 2005, 16 pages. |
Albrecht, Jeannie, et al., “Remote Control: Distributed Application Configuration, Management, and Visualization with Plush”, 2007, 16 pages. |
Aaron Skonnard, Pluralsight, “A Developer's Introduction to Windows Communication Foundation (WCF).Net 4 Beta 1”, Jul. 2009, 57 pages. |
Bhatti, Nina T., et al., “A System for Constructing Configurable High-Level Protocols”, 1995, 13 pages. |
Lee, Whay Sing, et al., “An Efficient, Protected Message Interface”, Nov. 1998, pp. 69-75. |
Bhoedjang, Raoul A.F., “Communication Architectures for Parallel-Programming Systems”, Jun. 2000, 282 pages. |
Nodine, Marian, et al., “Task Coordination Paradigms for Information Agents”, Lecture Notes in Computer Science; vol. 1986, Proceedings of the 7th International Workshop on Intelligent Agents VII. Agent Theories Architectures and Languages, Year of Publication: 2000, 15 pages. |
Onion, Fritz, “State Management in ASP.NET”, informlT, May 30, 2003, 5 pages. |
Allen, Nicholas, “Nicholas Allen's Indigo Blog—Future of Queuing”, Windows Communication Foundation from the Inside, Dec. 1, 2008, 2 pages. |
Load-Balancing for MySQL http://diku.dk/publikationer/tekniske.rapporter/rapporter/03-1.pdf (67 pages) Fall 2003—Dennis haney & Klaus S. Madsen. |
Planning for Reliability and High Availability http://msdn.microsoft.com/en-us/library/ms942932.aspx (32 pages) 2008—Microsoft Coorporation. [Retrieved from the internet May 21, 2008]. |
Distributed Computing with BEA WebLogic Server http://www-db.cs.wisc.edu/cidr/cidr2003/program/p26.pdf (11 pages) Jan. 5-8, 2003—Dean Jacobs—BEA Systems. |
On Affinity Based Routing in Multi-System Data Sharing http://www.vldb.org/conf/1986/P249.PDF (8 pages) Aug. 1986—Phillip S. Yu, Douglas W. Cornell, daniel M. Dias and Balakrishna R Iyler. |
U.S. Appl. No. 12/019,041, Oct. 5, 2011, Office Action. |
U.S. Appl. No. 12/018,401, Oct. 13, 2011, Office Action. |
U.S. Appl. No. 12/767,091, Jan. 18, 2012, Notice of Allowance. |
U.S. Appl. No. 12/019,041, Mar. 12, 2012, Office Action. |
U.S. Appl. No. 12/018,401, Apr. 5, 2012, Office Action. |
U.S. Appl. No. 12/767,091, Jun. 25, 2012, Notice of Allowance. |
U.S. Appl. No. 12/727,066, Jun. 12, 2012, Office Action. |
U.S. Appl. No. 12/018,401, Sep. 28, 2012, Office Action. |
U.S. Appl. No. 12/019,041, Oct. 3, 2012, Office Action. |
U.S. Appl. No. 12/605,236, Oct. 17, 2012, Office Action. |
U.S. Appl. No. 12/727,066, Nov. 2, 2012, Notice of Allowance. |
U.S. Appl. No. 12/484,741, Jun. 27, 2012, Notice of Allowance. |
Notice of Allowance mailed Jan. 4, 2013 cited in U.S. Appl. No. 12/727,066. |
Notice of Allowance dated May 20, 2013 cited in U.S. Appl. No. 12/727,066. |
Office Action dated Mar. 28, 2013 cited in U.S. Appl. No. 12/605,236. |
Office Action dated Apr. 4, 2013 cited in U.S. Appl. No. 12/019,041. |
Notice of Allowance dated Apr. 10, 2013 cited in U.S. Appl. No. 12/018,401. |
Number | Date | Country | |
---|---|---|---|
20130046877 A1 | Feb 2013 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 12484741 | Jun 2009 | US |
Child | 13655162 | US |