Embodiments of the present disclosure relate generally to high performance computing and to providing computing services in a modular, event driven manner.
A computing device may have a limited number of resources in which to process requests. In order to efficiently process the requests, the device may need to manage how the resources may be allocated to which requests. When a resource is assigned to a request, that request may be processed. Devices may see large increases in requests for certain reasons. For example, a server serving web pages for a web site to many users may receive a large number of requests for web pages from users. The users may see delays if resources are not assigned to request in an efficient manner.
The figures depict some embodiments for purposes of illustration only. One skilled in the art will readily recognize from the following discussion that alternative embodiments of the structures and methods illustrated herein may be employed.
A further understanding of the nature and the advantages of the disclosure disclosed herein may be realized by reference of the remaining portions of the specification and the attached drawings.
In one embodiment, modular event driven processing provides a plurality of thread boundaries, each thread boundary comprising functionality to be performed for a given event by a single thread. A plurality of queues may be communicatively coupled to the thread boundaries, such that thread boundaries may be connected by queues through which events may be routed. The division of the computational functionality into thread boundaries enables identification of those portions that may be sensitive to load, because their corresponding queues may fill. Computational resources such as threads may then be dynamically allocated to thread boundaries based on queue depth.
A plurality of tasks may be in a defined relationship to provide a service, where each task may be associated with a thread boundary and includes a unit of code for performing a specific function. A plurality of service utilities may also provided, where each service utility includes a utility that may be accessible by multiple tasks.
In some embodiments, the tasks and the defined relationship between them may be described at a high level externally to the system itself, and capable of according to that high level description. In some embodiments, this high-level description may be in a declarative language, such as Extensible Markup Language (XML). This high-level external description enables dynamic configuration of the tasks and the relationship between them, as well as for authentication thereof.
System 101 provides some functionality (e.g., a service). The functionality may be divided into a plurality of thread boundaries 103, where each thread boundary 103 may encapsulate a portion of the application logic for the desired functionality. The thread boundaries may be connected by thread boundary queues 105. Events 107 (e.g., requests for service, messages) may be input to and output from thread boundaries 103 via thread boundary queues 105.
An event may be any processing that may be required. One example of an event 107 may be a request by a remote client for a service. For example, the client may request to log in, in which case system 101 (e.g., a server) would need to check the client's credentials and then take appropriate action. According to some embodiments, system 101 may handle this request by encapsulating it as an event 107 and passing it though a chain of thread boundaries 103, each of which may be capable of performing a small piece of the service, ultimately outputting either a verification or denial of the log in. Various other examples of events will be apparent to those of ordinary skill in the art in light of this specification, e.g., events may include processing a request for a record from a database, processing of an incoming e-mail message, handling outgoing encoded data, sending an outgoing error message, processing requests for web pages, etc.
A computing system such as a server may need to handle a large number of events simultaneously. Therefore, events 107 between thread boundaries 103 may reside in thread boundary queues 105. Within a thread boundary 103, a single thread may handle an event 107. However, once a first thread boundary 103 completes its processing for an event 107 and places the event 107 in a queue 105, another thread may pick up the event 107 and move it through the next thread boundary 103.
The division of the functionality into thread boundaries 103 enables identification of those portions that may be sensitive to load, because their corresponding thread boundary queues 105 may fill. In some embodiments, a resource allocation module 109 monitors the thread boundary queues 105, and allocates computational resources to the corresponding thread boundaries 103 based on queue depth. For example, a number of events being held in a first queue 105 and a second queue 105 may be determined. Resources may be allocated based on the number of events being held in first queue 105 and second queue 105, respectively. For example, if first queue 105 is longer than second queue 105, more resources may be allocated to first thread boundary 103. Accordingly, the load of a thread boundary 103 may be used to determine how to dynamically allocate resources. Although queue length is described, it will be understood that other techniques of determining the load may be used, such as using a number of events being processed by a thread boundary 103. In the embodiment illustrated in
In some embodiments, the resource allocation module 109 assigns threads from a thread pool 111 to thread boundaries 103 according to the length of their inbound queues 105, or according to other metrics as desired. As will be understood by those of ordinary skill in the relevant art, each event 107 may be handled by a single thread (or multiple threads) within a thread boundary 103. Multiple events 107 can be processed through the same boundary 103 in parallel, and such parallel event 107 processing can be performed by multiple threads (no more than one per event 107 in one embodiment) as desired.
Thus, portions of the system 101 that might otherwise become bottlenecks may receive more resources, thereby smoothing out application flow and improving performance. Since the allocation may be dynamic, the resource allocation module 109 can respond to varying conditions. If the system 101 receives a flood of a certain type of requests, for example, a portion that may not normally a bottleneck may become overloaded. Under such circumstances, the resource allocation module 109 can react accordingly, by dynamically altering computational resource allocation.
This provides advantages because the division of processing into thread boundaries may not involve allocating a single request to one thread, which then performs all processing for the request. Each request may not be treated as being the same in terms of the resources it may require. System 101 may tune itself to load that builds at thread boundaries where events may queue. Thus, the internal performance of system 101 may be monitored and may be tuned in response to load.
Also, system 101 may use queue length of queues for thread boundaries to determine where to allocate resources. This allows system 101 to determine where to allocate resources without introducing complex functionality on how to prioritize events.
It may be understood that although the resource allocation module 109 may be illustrated as a single entity, as the term may be used herein a resource allocation module 109 refers to a collection of functionalities that may be implemented as software, hardware, firmware or any combination of the three. Where the resource allocation module 109 may be implemented as software, it can be implemented as a standalone program, but may also be implemented in other ways, for example as part of a larger program, as a plurality of separate programs, or as one or more statically or dynamically linked libraries.
As illustrated in
Returning to
As illustrated in
Service utilities 115 can be used as the originating sources for events 107. For example, when a client issues a request, a network protocol service 115 may be responsible for packaging the request as an event 107, and inserting it into the appropriate thread boundary queue 105, so as to enter the request into the task flow. Whereas events 107 may be created by service utilities 115 and passed to tasks 113 for processing, tasks typically modify existing events 107, and forward them to other tasks 113.
In some embodiments, service utilities 115 can store state, whereas tasks 113 may be stateless. A list of currently registered users, for example, would typically be controlled by a service 115. A task 113 may access the list by calling a method on the service 115. Although tasks 113 are described as being stateless, tasks 113 may store state in some embodiments.
In one embodiment, tasks 113 may not create threads or have any knowledge about what threads may be controlling internal task 113 procedures. Service utilities 115, on the other hand, may be thread-safe, since they may be accessed by multiple tasks 113 running in different thread boundaries 103. Thus, service utilities 115 may be accessed by multiple threads.
When to utilize a task 113 and when to use a service 115 may vary. In some embodiments, tasks may be used as much as possible. In such embodiments, a service 115 may be used for a utility that cuts across many tasks 113, a component that originates events 107, or a component that manages state. In other embodiments tasks 113 and/or service utilities 115 may be used for more or fewer purposes as desired. It will be apparent to those of ordinary skill in the relevant art in light of this specification that the terms “task” and “service” may be merely used herein to describe various functionalities. This particular naming for these functionalities may not be mandatory or significant, and the mechanisms that implement various embodiments and/or its features may have different names, divisions and/or formats.
As explained above, a plurality of tasks 113 may be in a defined relationship so as to provide desired functionality for a service. The defined relationship between tasks 113 may depend upon the functionality to be provided. For example, tasks 113 may be arranged differently depending on the functionality desired. As explained above, tasks 113 may receive events 107 as input, perform operations thereon, and pass the (possibly transformed) events 107 on to other tasks 113 for further processing. A task 113 can make decisions as to how to process an event 107 and/or where to pass it, based on its contents or other factors.
Specific tasks 113 may be capable of receiving specific input, executing specific processing, and sending specific output. A task 113 may be processing code, with zero or more inputs (in other words, sources from which the task receives data in the form of events 107) and zero of more outputs, through which the task 113 sends events 107 after processing. The input, processing and output associated with a task 113 can be thought of as defining contracts for the task 113. A source contract specifies constraints on events 107 received via the task's 113 input. A sink contract describes the changes the task 113 makes to events 107 that pass through it. The terms “input,” “output,” “source contract,” and “sink contract” are linguistic terms, used herein to describe the underlying functionality. Other names to be used to describe such aspects and functionality may be contemplated.
To illustrate an example of a source contract and a sink contract, a client may request authentication of a user, by transmitting an event 107 (i.e. an authentication request) to the system 101 (e.g., a server). For sake of example, suppose the event 107 contains a string called “username,” a string called “password.” This event 107 may be passed to a validator task 113 whose source contract specifies that it receives a string called “password” and a string called “username.” The task 113 may use these strings to authenticate the user. The authentication result may be passed on to various tasks 113 downstream and the validator task's 113 sink contract may specify that a Boolean called “valid” be added to the event 107. In other cases, a task's 113 sink contract might remove items from an event 107.
In some embodiments, the tasks 113 and the defined relationship between them may be described at a high level externally to the system itself, and configured according to the high level description. In some embodiments, this high-level description is in a declarative language, such as Extensible Markup Language (XML). The high-level description can be stored, for example in an XML configuration file.
This high-level external description enables dynamic configuration of the tasks 113 and the relationship between them, as well as for authentication thereof. As will be readily apparent to those of ordinary skill in the relevant art in light of this specification, the high level description of the tasks 113 and the defined relationship between them may include a description of the task's 113 functionality, inputs and outputs, source contracts and sink contracts, as well as the way in which the plurality of tasks 113 may be related together to provide the desired functionality, and the assignment of tasks 113 to thread boundaries 103. In some embodiments, more or less information may be included in the high-level description.
Dynamic modifications to tasks 113 and/or the relationship between tasks 113 may be made by making corresponding modifications to the high level description. In step 305, the system 101 may dynamically modify a task 113, responsive to a corresponding modification of the high level description. Additionally, in steps 307 and 309, the system 101 may dynamically modify the defined relationship between the plurality of tasks 113, or the assignment of tasks 113 to thread boundaries 103, responsive to a corresponding modification of the high level description.
In step 311, the high level description may also be used to automatically determine whether the defined relationship between the tasks 113 may be logically consistent. Such determination, may, for example, include verification of source and sink contracts.
In one such embodiment, the above-described communication between the components and the administrative module 401 may be performed via the Java Management Extension's (JMX) MBean interfaces. In such embodiments, tasks 113, service utilities 115 and/or thread boundaries 103 may be implementations of an MBean, and thus automatically include an MBean interface exposed to the administrative module 401, which in such embodiments may be built on top of JMX.
JMX separates administration, management, and monitoring of components from the components themselves. This allows the administration front-end of an application to be swappable. As an example, a computing system such as a server could include an administrative module 401 packaged with both a web based graphical user interface 405 and a command line interface 407 for monitoring and controlling components. These interfaces 405, 407 can be developed independently using the rules and interfaces defined by JMX, in a manner that will be apparent to those of ordinary skill in the art in light of this specification. These interfaces 405, 407 can subsequently be used to monitor and dynamically configure tasks 113, service utilities 115 and/or thread boundaries 103, in a manner that will also be apparent to those of ordinary skill in the art in light of this specification. Of course, other embodiments may be implemented in development environments other than JMX, as desired.
As will be understood by one skilled in the art, the disclosure may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. Likewise, the particular naming and division of the modules, features, attributes, methodologies and other aspects may not be mandatory or significant, and the mechanisms that implement embodiments or its features may have different names, divisions and/or formats. Furthermore, as will be apparent to one of ordinary skill in the art, the modules, features, attributes, methodologies and other aspects of the disclosure can be implemented as software, hardware, firmware or any combination of the three. Wherever a component may be implemented as software, the component may be implemented as a standalone program, as part of a larger program, as a plurality of separate programs, as a statically or dynamically linked library, as a kernel loadable module, as a device driver, and/or in every and any other way known now or in the future to those of skill in the art of computer programming. Additionally, embodiments may be in no way limited to implementation in any specific programming language, or for any specific operating system or environment. Accordingly, the disclosure is intended to be illustrative, but not limiting, of the scope of the disclosure, which is set forth in the following claims.
In one embodiment, the term “and/or” may indicate that any combination of elements connected by “and/or” may be used. For example, two words or expressions in a phrase using “and/or” may mean one or the other or both. In one embodiment, the term “substantially” may mean being largely but not wholly that which may be specified, or all that may be specified. In one embodiment, the term capable of may mean configured, adapted, able, etc. For example, the term capable of performing an action may mean an element may be able to perform the action, may be configured to perform the action and/or may be adapted to perform the action.
Embodiments can be implemented in the form of control logic in software or hardware or a combination of both. The control logic may be stored in an information storage medium as a plurality of instructions adapted to direct an information processing device to perform a set of steps disclosed in one embodiment. Based on the disclosure and teachings provided herein, a person of ordinary skill in the art will appreciate other ways and/or methods to implement the embodiments.
The above description is illustrative but not restrictive. Many variations of the disclosure will become apparent to those skilled in the art upon review of the disclosure. The scope of the disclosure should, therefore, be determined not with reference to the above description, but instead should be determined with reference to the pending claims along with their full scope or equivalents.
This application is a continuation application claiming priority from pending U.S. application Ser. No. 11/205,263, filed Aug. 15, 2005, entitled “MODULAR EVENT DRIVEN PROCESSING”, which claims priority from co-pending U.S. Provisional Patent Application No. 60/602,539, filed Aug. 17, 2004, entitled “TECHNIQUES FOR DELIVERING PERSONALIZED CONTENT WITH A REAL-TIME ROUTING NETWORK, MODULAR EVENT-DRIVEN ARCHITECTURE, MODULAR EVENT-DRIVEN PROCESSING AND VIEWER FAILOVER TESTING A SYSTEM MEMORY WHILE AN OPERATING SYSTEM IS ACTIVE”, which are hereby incorporated by reference, as if set forth in full in this document, for all purposes.
Number | Name | Date | Kind |
---|---|---|---|
5031089 | Liu et al. | Jul 1991 | A |
5230048 | Moy | Jul 1993 | A |
5535335 | Cox et al. | Jul 1996 | A |
5692193 | Jagannathan et al. | Nov 1997 | A |
5699523 | Li et al. | Dec 1997 | A |
5706516 | Chang et al. | Jan 1998 | A |
5822543 | Dunn et al. | Oct 1998 | A |
5878420 | de la Salle | Mar 1999 | A |
5886643 | Diebboll et al. | Mar 1999 | A |
5933429 | Bubenik et al. | Aug 1999 | A |
5938733 | Heimsoth et al. | Aug 1999 | A |
5964839 | Johnson et al. | Oct 1999 | A |
5974457 | Waclawsky et al. | Oct 1999 | A |
6018619 | Allard et al. | Jan 2000 | A |
6029175 | Chow et al. | Feb 2000 | A |
6052447 | Golden et al. | Apr 2000 | A |
6055493 | Ries et al. | Apr 2000 | A |
6094681 | Shaffer et al. | Jul 2000 | A |
6112240 | Pogue et al. | Aug 2000 | A |
6173406 | Wang et al. | Jan 2001 | B1 |
6233600 | Salas et al. | May 2001 | B1 |
6240451 | Campbell et al. | May 2001 | B1 |
6253167 | Matsuda et al. | Jun 2001 | B1 |
6308209 | Lecheler | Oct 2001 | B1 |
6324587 | Trenbeath et al. | Nov 2001 | B1 |
6363421 | Barker et al. | Mar 2002 | B2 |
6366926 | Pohlmann et al. | Apr 2002 | B1 |
6377939 | Young | Apr 2002 | B1 |
6405245 | Burson et al. | Jun 2002 | B1 |
6408282 | Buist | Jun 2002 | B1 |
6418448 | Sarkar | Jul 2002 | B1 |
6418467 | Schweitzer et al. | Jul 2002 | B1 |
6446257 | Pradhan et al. | Sep 2002 | B1 |
6484143 | Swildens et al. | Nov 2002 | B1 |
6502131 | Vaid et al. | Dec 2002 | B1 |
6539427 | Natarajan et al. | Mar 2003 | B1 |
6553413 | Lewin et al. | Apr 2003 | B1 |
6560611 | Nine et al. | May 2003 | B1 |
6567411 | Dahlen | May 2003 | B2 |
6577328 | Matsuda et al. | Jun 2003 | B2 |
6606643 | Emens et al. | Aug 2003 | B1 |
6609138 | Merriam | Aug 2003 | B1 |
6654804 | Fleming | Nov 2003 | B1 |
6658652 | Alexander et al. | Dec 2003 | B1 |
6687729 | Sievert et al. | Feb 2004 | B1 |
6691165 | Bruck et al. | Feb 2004 | B1 |
6725446 | Hahn et al. | Apr 2004 | B1 |
6728747 | Jenkins et al. | Apr 2004 | B1 |
6751663 | Farrell et al. | Jun 2004 | B1 |
6769009 | Reisman | Jul 2004 | B1 |
6789115 | Singer et al. | Sep 2004 | B1 |
6792458 | Muret et al. | Sep 2004 | B1 |
6829642 | Giroir et al. | Dec 2004 | B1 |
6836886 | Tuerke et al. | Dec 2004 | B2 |
6871346 | Kumbalimutt et al. | Mar 2005 | B1 |
6970924 | Chu et al. | Nov 2005 | B1 |
6978461 | Shapiro et al. | Dec 2005 | B2 |
6986140 | Brenner et al. | Jan 2006 | B2 |
7020082 | Bhagavath et al. | Mar 2006 | B2 |
7043525 | Tuttle et al. | May 2006 | B2 |
7051070 | Tuttle et al. | May 2006 | B2 |
7107326 | Fijolek et al. | Sep 2006 | B1 |
7114158 | Thompson et al. | Sep 2006 | B1 |
7127720 | Cano et al. | Oct 2006 | B2 |
7159034 | Rai | Jan 2007 | B1 |
7207043 | Blythe et al. | Apr 2007 | B2 |
7249197 | Roestenburg et al. | Jul 2007 | B1 |
7277917 | Tuttle et al. | Oct 2007 | B2 |
7290259 | Tanaka et al. | Oct 2007 | B2 |
7293074 | Jellinek et al. | Nov 2007 | B1 |
7350213 | Deutesfeld et al. | Mar 2008 | B2 |
7412518 | Duigou et al. | Aug 2008 | B1 |
7430610 | Pace et al. | Sep 2008 | B2 |
7467390 | Gilgen et al. | Dec 2008 | B2 |
7552446 | Sosnovsky et al. | Jun 2009 | B1 |
7581230 | Chen et al. | Aug 2009 | B2 |
20010005853 | Parkes et al. | Jun 2001 | A1 |
20010012299 | Dahlen | Aug 2001 | A1 |
20020078251 | Lewis | Jun 2002 | A1 |
20020087611 | Tanaka et al. | Jul 2002 | A1 |
20020087630 | Wu | Jul 2002 | A1 |
20020095399 | Devine et al. | Jul 2002 | A1 |
20020120717 | Giotta | Aug 2002 | A1 |
20030005025 | Shavit et al. | Jan 2003 | A1 |
20030026254 | Sim | Feb 2003 | A1 |
20030041110 | Wenocur et al. | Feb 2003 | A1 |
20030050956 | Janssen et al. | Mar 2003 | A1 |
20030110204 | Brenner et al. | Jun 2003 | A1 |
20030120817 | Ott et al. | Jun 2003 | A1 |
20030140111 | Pace et al. | Jul 2003 | A1 |
20040139433 | Blythe et al. | Jul 2004 | A1 |
20040148606 | Hosoe | Jul 2004 | A1 |
20040199926 | Gilgen et al. | Oct 2004 | A1 |
20040215493 | Koppes et al. | Oct 2004 | A1 |
20040252709 | Fineberg | Dec 2004 | A1 |
20050033841 | McCarthy et al. | Feb 2005 | A1 |
20050046184 | Chang et al. | Mar 2005 | A1 |
20050125557 | Vasudevan et al. | Jun 2005 | A1 |
20050278726 | Cano et al. | Dec 2005 | A1 |
20060031282 | Tuttle et al. | Feb 2006 | A1 |
20060031283 | Tuttle et al. | Feb 2006 | A1 |
20060041681 | Rumelhart | Feb 2006 | A1 |
20060075279 | Cameros et al. | Apr 2006 | A1 |
20060117318 | Rumelhart et al. | Jun 2006 | A1 |
20060136930 | Kaler et al. | Jun 2006 | A1 |
20060265488 | Tuttle et al. | Nov 2006 | A1 |
20070033293 | Rumelhart | Feb 2007 | A1 |
20070050519 | Cano et al. | Mar 2007 | A1 |
20070061811 | Rumelhart et al. | Mar 2007 | A1 |
20070238922 | Tuttle et al. | Oct 2007 | A1 |
20090077173 | Lowery et al. | Mar 2009 | A1 |
Number | Date | Country |
---|---|---|
101040261 | Sep 2007 | CN |
0 733 983 | Sep 1996 | EP |
0 749 081 | Dec 1996 | EP |
0 889 421 | Jan 1999 | EP |
1789875 | May 2007 | EP |
2008510259 | Apr 2008 | JP |
1020070057838 | Jun 2007 | KR |
WO 9716796 | May 1997 | WO |
WO 0163837 | Aug 2001 | WO |
WO 2005046184 | May 2005 | WO |
WO 2006023506 | Mar 2006 | WO |
Entry |
---|
Matthew David Welsh: “An Architecture for Highly Concurrent, Well-Conditioned Internet Services”:Online! 2002, pp. 1-211, XP002357233 University of California at Berkeley Retrieved from the Internet: URL:http://www.eecs.harvard.edu/˜mdw/papers/mdw-phdthesis.pdf> figures 8,9, p.48-54, p.101, p.113-114. |
David Carmona: “Programming the Thread Pool in the .NET Framework” MSDN, :Online! Jun. 2002, pp. 1-17, XP002357234 URL:http://msdn.microsoft.com/en-us/library/ms973903.aspx> p.1-17. |
Non-Final Office Action dated May 3, 2005, U.S. Appl. No. 10/017,182 Tuttle et al., filed Dec. 14, 2001. |
Notice of Allowance dated Jan. 3, 2006, U.S. Appl. No. 10/105,018, Tuttle et al., filed Mar. 21, 2002. |
Notice of Allowance dated Jul. 5, 2006, U.S. Appl. No. 10/105,018, Tuttle et al., filed Mar. 21, 2002. |
Non-Final Office Action dated Aug. 9, 2005, U.S. Appl. No. 10/213,269, Cano et al., filed Aug. 5, 2002. |
Final Office Action dated Jan. 26, 2006, U.S. Appl. No. 10/213,269, Cano et al., filed Aug. 5, 2002. |
Notice of Allowance dated Jun. 6, 2006, U.S. Appl. No. 10/213,269, Cano et al., filed Aug. 5, 2002. |
Non-Final Office Action dated Feb. 3, 2009, U.S. Appl. No. 11/205,233, Rumelhart et al., filed Aug. 15, 2005. |
Non-Final Office Action dated Aug. 6, 2009, U.S. Appl. No. 11/205,233, Rumelhart et al., filed Aug. 15, 2005. |
Non-Final Office Action dated Apr. 22, 2008, U.S. Appl. No. 11/205,237, Cameros et al., filed Aug. 15, 2005. |
Non-Final Office Action dated Apr. 29, 2009, U.S. Appl. No. 11/205,237, Cameros et al., filed Aug. 15, 2005. |
Final Office Action dated Nov. 25, 2008, U.S. Appl. No. 11/205,237, Cameros et al., filed Aug. 15, 2005. |
Final Office Action dated Nov. 24, 2009, U.S. Appl. No. 11/205,237, Cameros et al., filed Aug. 15, 2005. |
Non-Final Office Action dated Jan. 7, 2010, U.S. Appl. No. 11/205,233, Rumelhart et al., filed Aug. 15, 2005. |
Notice of Allowance dated May 22, 2007, U.S. Appl. No. 11/347,802, Tuttle et al., filed Feb. 3, 2006. |
Non-Final Office Action dated Jan. 26, 2007, U.S. Appl. No. 11/347,802, Tuttle et al., filed Feb. 3, 2006. |
Non-Final Office Action dated Jul. 23, 2009, U.S. Appl. No. 11/396,251, Tuttle et al., filed Mar. 3, 2006. |
Non-Final Office Action dated Jan. 19, 2010, U.S. Appl. No. 11/396,251, Tuttle et al., filed Mar. 3, 2006. |
Non-Final Office Action dated Mar. 6, 2009, U.S. Appl. No. 11/515,233, Rumelhart et al., filed Aug. 31, 2006. |
Final Office Action dated Oct. 7, 2009, U.S. Appl. No. 11/515,233, Rumelhart et al., filed Aug. 31, 2006. |
Non-Final Office Action dated Oct. 26, 2009, U.S. Appl. No. 11/205,263, Rumelhart et al., filed Aug. 15, 2005. |
Final Office Action dated Mar. 23, 2010, U.S. Appl. No. 11/205,263, Rumelhart et al., filed Aug. 15, 2005. |
Office Action dated Oct. 29, 2010, Korean Appl. No. 10-2007-7006143, 5 pgs. |
Franklin et al., “Dissemination-Based Information Systems,” IEEE Data Engineering Bulletin, vol. 19, No. 3, Sep. 1996, 9 pages. |
Nagami et al., “Toshiba's Flow Attribute Notification Protocol (FAMP) Specification,” Apr. 1997, RFC 2129, Internet RFC/STD/FYI/BCP Archives [online], [retrieved on May 16, 2002]. Retrived from the Internet: <landfield.com/rfcs/rfc2129.html>, 16 pages. |
Strom et al., “Gryphon: An Information Flow Based Approach to Message Brokering,” International Symposium on Software Reliability Engineering '98, 1998, 2 pages. |
Sturman et al., “Reflection in the Gryphon Message Brokering System,” Reflection Workshop of the 13.sup.th ACM Conference on Object Oriented Program Systems, Languages and Applications (OOPSLA '98), 1998, 5 pages. |
International DOI Foundation, “Introduction to the Digital Object Identifier,” [online]. Apr. 1998 [retrieved on May 16, 2002]. Retrieved from the Internet: <doi.org/introduction.html.>, 4 pages. |
Aksoy et al., “Research in Data Broadcast and Dissemination”, Proc. 1st Int'l Conf on Advanced Multimedia Content Processing, Osaka University, Osaka, Japan, Nov. 1998. |
Banavar et al., “An Efficient Multicast Protocol for Content-Based Publish-Subscribe Systems,” Proc. of the 19th International Conference on Distributed Computing Systems, 1999, 9 pages. |
Banavar et al., “Information Flow Based Event Distribution Middleware,” Proceedings of the 1999 ICDCS Workshop on Electronic Commerce and Web-Based Applications, 1999, 8 pages. |
Aguilera et al., “Matching Events in a Content-based Subscription System,” Eighteenth ACM Symposium on Principles of Distributed Computing (PODC '99), Atlanta, GA, May 4-6, 1999, 9 pages. |
Banavar et al., “A Case for Message Oriented Middleware,” Distributed Computing, 13.sup.th International Symposium, Bratislava, Slavak Republic, Sep. 27-29, 1999, 18 pages. |
Aguilera et al., “Efficient Atomic Broadcast Using Deterministic Merge,” Symposium on Principles of Distributed Computing, 2000, 10 pages. |
Opyrchal et al., “Exploiting IP Multicast in Content-Based Publish-Subscribe Systems,” Proceedings of the IFIP/ACM International Conference on Distributed Systems Platforms (Middleware 2000), Apr. 2000, 23 pages. |
Caplin Systems Ltd., White Paper “Real Time Text Protocol (RTTP),” Version 1.1, Sep. 2000, 11 pages. |
Reuters, “Reuters Market Data Systems and the Trading Solutions Architecture,” Version 1.0, Jan. 12, 2001, 51 pages. |
Ramamrithan et al., “Dissemination of Dynamic Data on the Internet,” [online]. Powerpoint Presentation, Spring 2001, [retrieved on Feb. 6, 2002], 5 pages. Retrieved from the Internet <.cs.umbc.edu/courses/graduate/CMSC691T/spring.sub.—2001/rlist/amit.ppt>. |
ComputerLetter, vol. 17, No. 23, Jul. 16, 2001, pp. 1-8. |
ComputerLetter, vol. 17, No. 31, Sep. 24, 2001, pp. 1-6. |
ComputerLetter, vol. 17, No. 35, Nov. 5, 2001, pp. 1-6. |
Tuttle et al., “Upstream Delivery of Information in a Digital Network”, U.S. Appl. No. 09/901,582, filed Jul. 9, 2001. |
“Repackaging the Net”, ComputerLetter, vol. 17, No. 35, Nov. 5, 2001, pp. 1-5. |
“Reckoning with IP”, ComputerLetter, vol. 17, No. 37, Nov. 19, 2001, pp. 1-6. |
“Persistence Counts”, ComputerLetter, vol. 17, No. 23, Jul. 16, 2001, pp. 1, 5-7. |
Zhao et al.; “A Workflow-centric Study of Organizational Knowledge Distribution;” Proceedings of the 33rd Hawaii International Conference on System Sciences; 2000; pp. 1-10; IEEE. |
Gribble, et al.; “The Ninja Architecture for Robust Internet-scale Systems and Services;” Computer Networks; 2001; pp. 473-497; vol. 35; Elsevier Science B.V. |
Carmona, David; “Programming the Thread Pool in the .NET Framework”; ‘Online’ Jun. 2002, pp. 1-17, XP002357234; retrieved on Dec. 1, 2005 from the Internet: URL:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/hmtl/progthrepool.asp>, pp. 1-17. |
Welsh, Matthew D.; “An Architecture for Highly Concurrent, Well-Conditioned Internet Services”; URL: http://www.eecs.harvard.edu/ {mdw/papers/mdw-phdthesis/pdf>, 2005, pp. 48-54, 101, and 113-114. |
Written Opinion of the International Searching Authority for International Application No. PCT/US2005/029162, recorded Jan. 17, 2006, 7 pages. |
Written Opinion of the International Searching Authority for International Application No. PCT/US2005/029021, recorded Dec. 14, 2005, 10 pages. |
Written Opinion of the International Searching Authority for International Application No. PCT/US2005/029158, recorded Jan. 25, 2006, 7 pages. |
Non-Final Rejection dated Dec. 21, 2010; U.S. Appl. No. 11/205,263, Rumelhart et al, filed Aug. 15, 2005. |
Final Rejection dated Jun. 10, 2011, U.S. Appl. No. 11/205,263, Rumelhart, et al., filed Aug. 15, 2005, 17 pages. |
Welsh, M., and Culler, D., Adaptive Overload Control for Busy Internet Servers, Proc. of the 4th USENIX Conf. on Internet Technologies and Systems, Mar. 26-28, 2003. |
Welsh, M., Gribble, S.D., Brewre, E.A., and Culler, D., A Design Framework for Highly Concurrent Systems, Technical Report, EECS Department, Univ. of California, Berkeley, 2000, UCB/CSD-00-1108, URL:.eecs.berkeley.edu/Pubs/TechRpts/2000/CSD-00-1108.pdf. |
Japanese Office Action dated Jul. 4, 2011, Japamese Application No. 2007-527954, filed Aug. 15, 2008, 2 pages. |
Non-Final Rejection mailed Feb. 29, 2012 for U.S. Appl. No. 11/205,263, filed Aug. 15, 2005; 18 pages. |
Final Rejection mailed Jul. 30, 2012 for U.S. Appl. No. 11/205,263, filed Aug. 15, 2005; 15 pages. |
International Search Report directed to related International Patent Application No. PCT/US2005/029158, mailed Jan. 27, 2006, from the European Patent Office; 3 pages. |
Number | Date | Country | |
---|---|---|---|
20070061811 A1 | Mar 2007 | US |
Number | Date | Country | |
---|---|---|---|
60602539 | Aug 2004 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 11205263 | Aug 2005 | US |
Child | 11469325 | US |