BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 sets forth a block diagram illustrating a typical messaging environment for data communications.
FIG. 2 sets forth a network and block diagram illustrating an exemplary computer data processing system for reliable messaging using a message stream in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
FIG. 3 sets forth a block diagram of automated computing machinery comprising an example of a subscribing client device useful in providing a data communications in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
FIG. 4 sets forth a flowchart illustrating an exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
FIG. 5 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
FIG. 6 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
FIG. 7 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
FIG. 8 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
FIG. 9 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to exemplary embodiments of the present invention.
DETAILED DESCRIPTION OF EXEMPLARY EMBODIMENTS
Detailed Description
Exemplary methods, apparatus, and products for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention are described with reference to the accompanying drawings, beginning with FIG. 2. FIG. 2 sets forth a network and block diagram illustrating an exemplary computer data processing system for reliable messaging using a message stream in a high speed, low latency data communications environment (201) according to embodiments of the present invention. The system of FIG. 2 operates generally for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention as follows: A stream administration server (212) brokers establishment of an active message stream (280) to a subscribing client device (210) from an active feed adapter (208). The active message stream includes active application messages wherein each active application message is characterized by an active message sequence number. A transport engine (256) of the subscribing client device (210) receives, from the active feed adapter (208) on the active message stream (280), the active application messages encapsulated in active transport packets. Each active transport packet includes one or more active application messages. Readers will note that in this specification a transport packet that includes one application message may refer to a transport packet that includes an entire application message or a fragment of an application message. Each active transport packet is characterized by an active packet sequence number. The transport engine (256) receives from the active feed adapter (208) an active transport packet containing an active mapping of the active application messages to the active transport packets. The transport engine (256) identifies, in dependence upon the active sequence numbers, a missing active transport packet. The transport engine (256) identifies missing active application messages of the missing active transport packet in dependence upon the active mapping and requests transmission of the missing active application messages from the active feed adapter.
The system of FIG. 2 also operates generally for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention as follows: The backup feed adapter (206) maintains a backup mapping of the backup application messages to the backup transport packets. The transport engine (256) receives the backup mapping from the backup feed adapter (206). The transport engine (256) receives active transport packets on the active message stream (280) from the active feed adapter (208). The transport engine (256) receives, from the backup feed adapter in response to failover from the active feed adapter (208) to the backup feed adapter (206), backup transport packets on the backup message stream (282). The transport engine (256) identifies a missing active application message from the active feed adapter. The transport engine (256) requests, from the backup feed adapter, transmission of the backup application message that corresponds to the missing active application message. The backup feed adapter (206) identifies, in dependence upon the backup mapping, a backup transport packet that includes the backup application message specified in the message transmission request and transmits the identified backup transport packet to the transport engine (256). After identifying a missing active application message from the active feed adapter, the transport engine (256) also identifies, in dependence upon the backup mapping, a backup transport packet that includes the backup application message that corresponds to the identified missing active application message. The transport engine (256) also requests transmission of the identified backup transport packet from the backup feed adapter (206). The backup feed adapter (206) also transmits the identified backup transport packet specified in the packet transmission request to the transport engine (256).
The high speed, low latency data communications environment (201) illustrated in FIG. 2 includes a high speed, low latency data communications network (200). The network (200) includes an active feed adapter (208), a backup feed adapter (206) a stream administration server (212), and a subscribing client device (210), as well as the infrastructure for connecting such devices (206, 208, 212, 210) together for data communications. The network (200) of FIG. 2 is termed ‘high speed, low latency’ because the application messages sent between devices connected to the network (200) on message streams administered by the stream administration server (212) bypass the stream administration server (212). For example, the application messages on the active message stream (280) from the active feed adapter (208) to the subscribing client device (210) bypass the stream administration server (212). Similarly, the application messages on the backup message stream (282) from the backup feed adapter (206) to the subscribing client device (210) bypass the stream administration server (212). Although such messages are not delayed for processing in the stream administration server (212), the stream administration server (212) retains administration of the streams (280, 282) between devices connected to the high speed, low latency data communications network (200).
Further contributing to the ‘high speed, low latency’ nature of network (200), readers will note that the network (200) does not include a router, that is a computer networking device whose primary function is to forward data packets across a network toward their destinations. Rather, each device (206, 208, 212, 210) provides its own routing functionality for data communication through a direct connection with the other devices connected to the network (200). Because the network (200) does not include a computer networking device dedicated to routing data packets, the network (200) of FIG. 2 may be referred to as a ‘minimally routed network.’ Although the exemplary network (200) illustrated in FIG. 2 does not include a router, such a minimally routed network is for explanation only. In fact, some high speed, low latency networks useful in reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention may include a router.
As mentioned above, the high speed, low latency data communications environment (201) depicted in FIG. 2 includes two message streams (280, 282). A message stream is a data communication channel between a communications endpoint of a sending device and a communications endpoint of at least one receiving device. A communications endpoint is composed of a network address and a port for a sending device or a receiving device. A message stream may be implemented as a multicast data communication channel. In a multicast data communication channel, a one-to-many relationship exists between a destination address for a message and the communication endpoints of receiving devices. That is, each destination address identifies a set of communication endpoints for receiving devices to which each message of the stream is replicated. A multicast data communication channel may be implemented using, for example, the User Datagram Protocol (‘UDP’) and the Internet Protocol (‘IP’). In addition to a multicast data communication channel, the message stream may be implemented as a unicast data communication channel. In a unicast data communication channel, a one-to-one relationship exists between a destination address for a message and a communication endpoint of a receiving device. That is, each destination address uniquely identifies a single communication endpoint of single receiving device. A unicast data communication channel may be implemented using, for example, the Transmission Control Protocol (‘TCP’) and IP.
The exemplary system of FIG. 2 includes a stream administration server (212) connected to the high speed, low latency data communications network (200) through a wireline connection (262). The stream administration server (212) of FIG. 2 is a computer device having installed upon it a stream administration module (228), an authentication module (230), an authorization module (234), and an authorization policy (235). A stream administration module (228) is a set of computer program instructions configured for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention. The stream administration module (228) operates generally for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention by brokering establishment of an active message stream (280) to a subscribing client device (210) from an active feed adapter (208) and brokering establishment of a backup message stream (282) to the subscribing client device (210) from a backup feed adapter (206). In addition, the stream administration module (228) administers the message streams by providing security services such as authenticating the subscribing client device (210) and authorizing the subscribing client device (210) to receives application messages from the feed adapters (206, 208) on the message streams (280, 282).
The authentication module (230) of FIG. 2 is a set of computer program instructions capable of providing authentication security services to the stream administration module (228) through an exposed authentication application programming interface (‘API’) (232). Authentication is a process verifying the identity of an entity. In the exemplary system of FIG. 2, the authentication module (230) verifies the identity of the subscribing client device (210). The authentication module (230) may provide authentication security services using a variety of security infrastructures such as, for example, shared-secret key infrastructure or a public key infrastructure.
The authorization module (234) of FIG. 2 is a set of computer program instructions capable of providing authorization security services to the stream administration module (228) through an exposed authorization API (236). Authorization is a process of only allowing resources to be used by resource consumers that have been granted authority to use the resources. In the example of FIG. 2, the authorization module (234) identifies the application messages that the subscribing client device (210) is authorized to receive on the message streams (280, 282). The authorization module (234) of FIG. 2 provides authorization security services using an authorization policy (235). The authorization policy (235) is a set of rules governing the privileges of authenticated entities to send or receive application messages on a message stream. In a financial market data environment, for example, an authenticated entity may be authorized to receive application messages that include financial quotes for some financial securities but not other securities. The authorization policy (235) may grant privileges on the basis of an individual entity or an entity's membership in a group.
In the exemplary system of FIG. 2, active feed adapter (208) is connected to the high speed, low latency data communications network (200) through a wireline connection (260). The active feed adapter (208) is a computer device having the capabilities of converting application messages on a active feed adapter input stream (214) having a first format to application messages on a active feed adapter output stream (216) having a second format and transmitting the application messages on the active feed adapter output stream (216) to subscribing client devices. The active feed adapter input stream (214) is a message stream from a feed source to the active feed adapter (208). The active feed adapter output stream (216) is a message stream administered by the stream administration server (212) from the active feed adapter (208) to the subscribing client device (210).
In the example of FIG. 2, the active feed adapter (208) receives application messages on the active feed adapter input stream (214) from a feed source (213). The feed source (213) is a computer device capable of aggregating data into application messages and transmitting the messages to a feed adapter. In a financial market data environment, for example, a feed source (213) may be implemented as a feed source controlled by the Options Price Reporting Authority (‘OPRA’). OPRA is the securities information processor for financial market information generated by the trading of securities options in the United States. The core information that OPRA disseminates is last sale reports and quotations. Other examples of feed sources in financial market data environment may include feed sources controlled by the Consolidated Tape Association (‘CTA’) or The Nasdaq Stock Market, Inc. The CTA oversees the dissemination of real-time trade and quote information in New York Stock Exchange and American Stock Exchange listed securities. The Nasdaq Stock Market, Inc. operates the NASDAQ Market CenterSM which is an electronic screen-based equity securities market in the United States. In a financial market data environment, a feed adapter input stream is referred to as a ‘financial market data feed.’
The active feed adapter (208) of FIG. 2 has installed upon it a conversion module (220), a converter table (222), converter functions (224), messaging middleware (276), and a transport engine (278). The conversion module (220) is a set of computer program instructions for converting application messages received on the active feed adapter input stream (214) having a first format into application messages having a second format for transmission to subscribing devices on the active feed adapter output stream (216). The conversion module (220) converts application messages from the first format to the second format according to the converter table (222).
The converter table (222) of FIG. 2 is a table that specifies the converter functions (224) capable of converting the application message from one format to another format. Utilizing multiple converter tables, the conversion module (220) may convert messages from a variety of input formats to a variety of output formats. In the example of FIG. 2, the converter table (222) specifies the converter functions (224) capable of converting the application message received from the active feed adapter input stream (214) having the first format to application messages having the second format for transmission to subscribing client devices on the active feed adapter output stream (216). The converter table (222) of FIG. 2 may be implemented using a structured document such as, for example, an eXtensible Markup Language (‘XML’) document.
The converter functions (224) of FIG. 2 are functions capable of converting data fields in an application message from one format to another format or converting values of data fields from one value to another value. Converter functions (224) may, for example, convert a 16-bit integer to a 32-bit integer, convert a number stored in a string field to a 64-bit double floating point value, increase the value of one data field by one, or any other conversion as will occur to those of skill in the art. The conversion module (220) accesses the converter functions (224) through a set of converter function APIs (226) exposed by the converter functions (224).
Before the conversion module (220) of FIG. 2 performs data processing on the application messages, the conversion module (220) receives the messages from the feed source (213). The conversion module (220) of FIG. 2 may receive the source stream messages through a receiving transport engine (not shown) of the active feed adapter (208). The receiving transport engine is a software module that operates in the transport layer of the network stack and may be implemented according to the TCP/IP protocols, UDP/IP protocols, or any other data communication protocol as will occur to those of skill in the art. The receiving transport engine may provide the received application messages directly to the conversion module (220) or to the messaging middleware (276), which in turn, provides the source stream messages to the conversion module (220).
The messaging middleware (276) of FIG. 2 is a software component that provides high availability services between the active feed adapter (208), the backup feed adapter (206), the subscribing client device (210), and the feed source (213). After the conversion module (220) of FIG. 2 performs data processing on the application messages received from the feed source (213), the messaging middleware (276) receives the application messages from the conversion module (220) and provides the received application messages to the transport engine (278) for transmission to a subscribing client device on the active feed adapter output stream (216). The conversion module (220) interacts with the messaging middleware (276) through a messaging middleware API (266) exposed by the messaging middleware (276).
The transport engine (278) of FIG. 2 is a software component operating in the transport and network layers of the OSI protocol stack promulgated by the International Organization for Standardization. The transport engine (278) provides data communications services between network-connected devices. The transport engine may be implemented according to the UDP/IP protocols, TCP/IP protocols, or any other data communications protocols as will occur to those of skill in the art. The transport engine (278) includes a set of computer program instructions capable of encapsulating the application messages provided by the messaging middleware (276) into packets and transmitting the packets through the active message stream (280) to the subscribing client device (210). The messaging middleware (276) operates the transport engine (278) through a transport API (268) exposed by the transport engine (278).
In addition to the transport services mentioned above, the transport engine (278) also operates generally for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention. The transport engine (278) operates for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention by: encapsulating one or more active application messages into an active transport packet; maintaining the active mapping of the active application messages to the active transport packets; and transmitting, to the subscribing client device, an active transport packet (414) containing the active mapping (202) of the active application messages to the active transport packets. The transport engine (278) also operates for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention by: buffering in an active packet buffer (204) the active transport packets transmitted to the subscribing client device; receiving (502), from the subscribing client device, the message transmission request that identifies an active application message for transmission; determining whether an active transport packet in the active packet buffer includes the identified active application message for transmission in dependence upon the active mapping (202) of the active feed adapter and the message transmission request; and transmitting, by the active feed adapter, the buffered active transport packet that includes the identified active application message for transmission to the subscribing client device if an active transport packet in the active packet buffer includes the identified active application message for transmission.
In the exemplary system of FIG. 2, backup feed adapter (206) is connected to the high speed, low latency data communications network (200) through a wireline connection (270). The backup feed adapter (206) is a computer device having the capabilities of converting backup messages on a backup feed adapter input stream (218) having a first format to backup messages on a backup feed adapter output stream (217) having a second format and transmitting the backup messages on the backup feed adapter output stream (217) to subscribing client devices. The backup feed adapter input stream (218) is a message stream from the feed source (213) to the backup feed adapter (206). The backup feed adapter output stream (217) is a message stream administered by the stream administration server (212) from the backup feed adapter (206) to the subscribing client device (210).
The backup feed adapter (206) of FIG. 2 has installed upon it a conversion module (221), a converter table (223), converter functions (225) that expose converter function APIs (290), messaging middleware (277) that exposes messaging middleware API (267), a transport engine (279) that exposes a transport engine API (269), a backup packet buffer (205), and a backup mapping (203) of the backup application messages to the active transport packets. The components installed on the backup feed adapter (206) operate in a manner similar to the components installed on the active feed adapter (208).
In addition, the transport engine (279) of the backup feed adapter (206) includes a set of computer program instructions configured for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiment of the present invention. The transport engine (279) operates generally for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiment of the present invention by maintaining a backup mapping of the backup application messages to the backup transport packets, identifying, in dependence upon the backup mapping, a backup transport packet that includes the backup application message specified in a message transmission request, transmitting the identified backup transport packet to the transport engine, and transmitting, the identified backup transport packet specified in the packet transmission request to the transport engine.
The subscribing client device (210) in exemplary system of FIG. 2 connects to the high speed, low latency data communications network (200) through a wireline connection (264). The subscribing client device (210) of FIG. 2 is a computer device capable of subscribing to the message streams transmitted by various feed adapters. In a financial market data environment, for example, a subscribing client device may subscribe to a tick to receive the bid and ask prices for a particular security on a message stream provided by a feed adapter controlled by a financial securities broker.
In the example of FIG. 2, the subscribing client device (210) has installed upon it an application (238), a message library (248), messaging middleware (252), a stream administration library (272), and a transport engine (256). The application (238) is a software component that processes data contained in the application messages (240) received from one of the feed adapters (208, 206). The application (238) may process the data for utilization by the subscribing client device (210) itself, for contributing the data to another feed adapter, or for contributing the data to some other device. In a financial market data environment, the application installed on the subscribing client device may be a program trading application that buys or sells financial securities based on the quoted prices contained in ticks. The application may also be a value-adding application that contributes information to a tick such as, for example, the best bid and ask prices for a particular security, that is not typically included in the ticks provided by the feed source (213). The subscribing client device may then transmit the ticks to a feed adapter for resale to other subscribing client devices.
In the example of FIG. 2, the application messages (240) have a format specified in a message model (244). The message model (244) is metadata that defines the structure and the format of the application messages (240) received on the message streams (280, 282). The message model (244) may be attached to and transmitted along with the application messages (240) received from the feed adapters (208, 206). More often, however, both the subscribing client device (210) and the feed adapters (208, 206) may receive the message model (244) from the stream administration server (212) when the stream administration server (212) brokers the message streams (280, 282). A message model may be implemented using a structured document, such as, for example, an XML document, a Java object, C++ object, or any other implementation as will occur to those of skill in the art.
The application (238) processes the data contained in the application messages (240) using the message library (248). The message library (248) is a set of functions that are computer program instructions for creating, accessing, and manipulating messages (240) according to a message model (244). The message library (248) is accessible to the application (238) through a message API (250) exposed by the message library (248).
The communications between the subscribing client device (210) and the stream administration server (212) may be implemented using a stream administration library (272). The stream administration library (272) is a set of functions contained in dynamically linked libraries or statically linked libraries available to the application (238) through a stream administration library API (274). Through the stream administration library (272), the application (238) of the subscribing client device (210) may request to subscribe to messages from a feed adapter, modify an existing message subscription, or cancel a subscription. Functions of the stream administration library (272) used by the application (238) may communicate with the stream administration server (212) through network (200) by calling member methods of a CORBA object, calling member methods of remote objects using the Java Remote Method Invocation (‘RMI’) API, using web services, or any other communication implementation as will occur to those of skill in the art.
‘CORBA’ refers to the Common Object Request Broker Architecture, a computer industry specifications for interoperable enterprise applications produced by the Object Management Group (‘OMG’). CORBA is a standard for remote procedure invocation first published by the OMG in 1991. CORBA can be considered a kind of object-oriented way of making remote procedure calls, although CORBA supports features that do not exist in conventional RPC. CORBA uses a declarative language, the Interface Definition Language (“IDL”), to describe an object's interface. Interface descriptions in IDL are compiled to generate ‘stubs’ for the client side and ‘skeletons’ on the server side. Using this generated code, remote method invocations effected in object-oriented programming languages, such as C++ or Java, look like invocations of local member methods in local objects.
The Java™ Remote Method Invocation API is a Java application programming interface for performing remote procedural calls published by Sun Microsystems™. The Java™ RMI API is an object-oriented way of making remote procedure calls between Java objects existing in separate Java™ Virtual Machines that typically run on separate computers. The Java™ RMI API uses a remote procedure object interface to describe remote objects that reside on the server. Remote procedure object interfaces are published in an RMI registry where Java clients can obtain a reference to the remote interface of a remote Java object. Using compiled ‘stubs’ for the client side and ‘skeletons’ on the server side to provide the network connection operations, the Java RMI allows a Java client to access a remote Java object just like any other local Java object.
Before the application (238) processes the data contained in the messages (240), the application (238) receives the messages (240) from the messaging middleware (252), which, in turn, receives the application messages (240) from one of the feed adapter (208, 206) through the transport engine (256). The messaging middleware (252) is a software component that provides high availability services between the subscribing client device (210), the feed adapter (208), and the backup feed adapter (206). In addition, the messaging middleware (252) provides message administration services for the stream administration server (212). Such message administration services may include restricting the ability of the application (238) to send and receive messages on a message stream to messages that satisfy certain constraints. The application (238) and the stream administration library (272) interact with the messaging middleware (252) through a messaging middleware API (254).
The transport engine (256) of FIG. 2 is a software component operating in the transport and network layers of the OSI protocol stack promulgated by the International Organization for Standardization. The transport engine (256) provides data communications services between network-connected devices. The transport engine may be implemented according to the UDP/IP protocols, TCP/IP protocols, or any other data communications protocols as will occur to those of skill in the art. The transport engine (256) is a software component that includes a set of computer program instructions configured for receiving packets through the message stream (280, 282) from the feed adapters (208, 206), unencapsulating the application messages from the received packets, and providing the application messages to the messaging middleware (252). The messaging middleware (252) operates the transport engine (256) through a transport API (258) exposed by the transport engine (256).
In addition to the transport services mentioned above, the transport engine (256) of FIG. 2 also operates generally for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention. The transport engine (256) of FIG. 2 operates for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention by receiving, from the active feed adapter (208) on the active message stream (280), the active application messages encapsulated in active transport packets, each active transport packet including one or more active application messages, each active transport packet characterized by an active packet sequence number; receiving, from the active feed adapter (208), an active transport packet containing an active mapping (202) of the active application messages to the active transport packets; identifying, in dependence upon the active sequence numbers, a missing active transport packet; identifying missing active application messages of the missing active transport packet in dependence upon the active mapping (202); and requesting transmission of the missing active application messages from the active feed adapter.
The transport engine (256) of FIG. 2 also operates for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention by: receiving, from the backup feed adapter (206), a backup transport packet containing a backup mapping (203) of the backup application messages to the backup transport packets; receiving, from the backup feed adapter (206) in response to failover from the active feed adapter (208) to the backup feed adapter (206), backup transport packets on the backup message stream (282); identifying the most recent active application message received from the active feed adapter (208) in dependence upon the active mapping (202); identifying the earliest backup application message received from the backup feed adapter (206) in dependence upon the backup mapping (203); determining values of the active message sequence numbers from missing active application messages from the active feed adapter (208) in dependence upon the most recent active application message received and the earliest backup application message received; and requesting, from the backup feed adapter (206), transmission of the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages.
The transport engine (256) of FIG. 2 further operates for reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention by: receiving, from the backup feed adapter, the backup mapping, identifying a missing active application message from the active feed adapter, requesting, from the backup feed adapter, transmission of the backup application message that corresponds to the missing active application message, identifying, in dependence upon the backup mapping, a backup transport packet that includes the backup application message that corresponds to the identified missing active application message, and requesting, from the backup feed adapter, transmission of the identified backup transport packet.
The servers and other devices illustrated in the exemplary system of FIG. 2 are for explanation, not for limitation. Devices useful in reliable messaging using a message stream in a high speed, low latency data communications environment may be implemented using general-purpose computers, such as, for example, computer servers or workstations, hand-held computer devices, such as, for example, Personal Digital Assistants (‘PDAs’) or mobile phones, or any other automated computing machinery configured for data processing according to embodiments of the present invention as will occur to those of skill in the art.
The arrangement of servers and other devices making up the exemplary system illustrated in FIG. 2 are for explanation, not for limitation. Although the connections to the network (200) of FIG. 2 are depicted and described in terms of wireline connections, readers will note that wireless connections may also be useful according to various embodiments of the present invention. Furthermore, data processing systems useful according to various embodiments of the present invention may include additional servers, routers, other devices, and peer-to-peer architectures, not shown in FIG. 2, as will occur to those of skill in the art. Networks in such data processing systems may support many data communications protocols, including for example Transmission Control Protocol (‘TCP’), Internet Protocol (‘IP’), HyperText Transfer Protocol (‘HTTP’), Wireless Access Protocol (‘WAP’), Handheld Device Transport Protocol (‘HDTP’), and others as will occur to those of skill in the art. Various embodiments of the present invention may be implemented on a variety of hardware platforms in addition to those illustrated in FIG. 2.
Providing reliable messaging using a message stream in a high speed, low latency data communications environment in accordance with the present invention in some embodiments may be implemented with one or more subscribing client devices, stream administration servers, and feed adapters, computers, that is, automated computing machinery. For further explanation, therefore, FIG. 3 sets forth a block diagram of automated computing machinery comprising an example of a subscribing client device (210) useful in providing reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention. The subscribing client device (210) of FIG. 3 includes at least one computer processor (156) or ‘CPU’ as well as random access memory (168) (‘RAM’) which is connected through a high speed memory bus (166) and bus adapter (158) to processor (156) and to other components of the subscribing client device.
Stored in RAM (168) is an application (238), application messages (240), message model (244), a message library (248), a messaging middleware (252) a stream administration library (272), and a transport engine (256). Each application message (240) is a quantity of data that includes one or more data fields and is transmitted from one device to another on a message stream. Application messages are typically created and processed by applications operating in application layers above the network and transport layers of a network protocol stack. As mentioned above, an application message may represent numeric or textual information, images, encrypted information, computer program instructions, and so on. In a financial market data environment, for example, a message is commonly referred to as a ‘tick’ and represents financial market data such as, for example, financial quotes or financial news. Each application message (240) may be implemented using a structured document such as, for example, an XML document, a Java object, C++ object, or any other implementation as will occur to those of skill in the art. The message model (244) is metadata that defines the structure and format of the messages (240). The message model (244) may also be implemented using a structured document such as, for example, an XML document, a Java object, C++ object, or any other implementation as will occur to those of skill in the art. The application (238), the message library (248), the messaging middleware (252), the stream administration library (272), and the transport engine (256) illustrated in FIG. 3 are software components, that is computer program instructions, that operate as described above with reference to FIG. 2.
Also stored in RAM (168) is an operating system (154). Operating systems useful in subscribing client devices according to embodiments of the present invention include UNIX™, Linux™, Microsoft NT™, IBM's AIX™, IBM's i5/OS™, and others as will occur to those of skill in the art. The operating system (154), the application (238), the messages (240), the message model (244), the message library (248), the messaging middleware (252), and the transport engine (256) in the example of FIG. 3 are shown in RAM (168), but many components of such software typically are stored in non-volatile memory also, for example, on a disk drive (170).
The exemplary subscribing client device (210) of FIG. 3 includes bus adapter (158), a computer hardware component that contains drive electronics for high speed buses, the front side bus (162), the video bus (164), and the memory bus (166), as well as drive electronics for the slower expansion bus (160). Examples of bus adapters useful in subscribing client devices useful according to embodiments of the present invention include the Intel Northbridge, the Intel Memory Controller Hub, the Intel Southbridge, and the Intel I/O Controller Hub. Examples of expansion buses useful in subscribing client devices useful according to embodiments of the present invention may include Peripheral Component Interconnect (‘PCI’) buses and PCI Express (‘PCIe’) buses.
The exemplary subscribing client device (210) of FIG. 3 also includes disk drive adapter (172) coupled through expansion bus (160) and bus adapter (158) to processor (156) and other components of the exemplary subscribing client device (210). Disk drive adapter (172) connects non-volatile data storage to the exemplary subscribing client device (210) in the form of disk drive (170). Disk drive adapters useful in subscribing client devices include Integrated Drive Electronics (‘IDE’) adapters, Small Computer System Interface (‘SCSI’) adapters, and others as will occur to those of skill in the art. In addition, non-volatile computer memory may be implemented for a subscribing client device as an optical disk drive, electrically erasable programmable read-only memory (so-called ‘EEPROM’ or ‘Flash’ memory), RAM drives, and so on, as will occur to those of skill in the art.
The exemplary subscribing client device (210) of FIG. 3 includes one or more input/output (‘I/O’) adapters (178). I/O adapters in subscribing client devices implement user-oriented input/output through, for example, software drivers and computer hardware for controlling output to display devices such as computer display screens, as well as user input from user input devices (181) such as keyboards and mice. The exemplary subscribing client device (210) of FIG. 3 includes a video adapter (209), which is an example of an I/O adapter specially designed for graphic output to a display device (180) such as a display screen or computer monitor. Video adapter (209) is connected to processor (156) through a high speed video bus (164), bus adapter (158), and the front side bus (162), which is also a high speed bus.
The exemplary subscribing client device (210) of FIG. 3 includes a communications adapter (167) for data communications with other computers (182) and for data communications with a high speed, low latency data communications network (200). Such data communications may be carried out serially through RS-232 connections, through external buses such as a Universal Serial Bus (‘USB’), through data communications networks such as IP data communications networks, and in other ways as will occur to those of skill in the art. Communications adapters implement the hardware level of data communications through which one computer sends data communications to another computer, directly or through a data communications network. Examples of communications adapters useful for providing reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention include modems for wired dial-up communications, IEEE 802.3 Ethernet adapters for wired data communications network communications, and IEEE 802.11b adapters for wireless data communications network communications.
Although FIG. 3 is discussed with reference to exemplary subscribing client devices, readers will note that automated computing machinery comprising exemplary stream administration servers and exemplary feed adapters useful in providing reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to embodiments of the present invention are similar to the exemplary subscribing client device (210) of FIG. 3. That is, such exemplary stream administration servers and feed adapters include one or more processors, bus adapters, buses, RAM, video adapters, communications adapters, I/O adapters, disk drive adapters, and other components similar to the exemplary subscribing client device (210) of FIG. 3 as will occur to those of skill in the art.
For further explanation, FIG. 4 sets forth a flowchart illustrating an exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to embodiments of the present invention. The method of FIG. 4 includes brokering (400), by a stream administration server, establishment of an active message stream (280) to a subscribing client device from an active feed adapter. The active message stream (280) represents a data communication channel between a communications endpoint of a subscribing client device and a communications endpoint of a feed adapter. A message stream may be implemented as a multicast data communication channel using the UDP/IP protocols or a unicast data communication channel using TCP/IP protocols as discussed above with reference to FIG. 2.
In the example of FIG. 4, the active message stream (280) includes active application messages (402). The active application messages (402) represent application messages received by a subscribing client device from an active feed adapter. Each active application message is characterized by an active message sequence number (404). The active message sequence number (404) uniquely identifies an active application message among other application messages transmitted from a particular active feed adapter. The active message sequence number (404) also provides the relative transmission order for a particular active application message with respect to the other active application messages transmitted from the active feed adapter.
In the method of FIG. 4, brokering (400), by a stream administration server, establishment of an active message stream (280) to a subscribing client device from an active feed adapter may be carried out by receiving a subscription request from a subscribing client device to subscribe to messages from a feed adapter. The subscription request may be implemented as an XML document, a call to a member method of a RMI object on the subscribing client device, or any other implementation as will occur to those of skill in the art. The subscription request may include topics of the messages that the subscribing client device requests to receive from the feed adapter. A topic represents the characteristics of the messages that the subscribing client device requests. Using a topic, a subscribing client device may specify the group of messages for receipt from the feed adapter. In a financial market data environment, for example, a subscribing client device may use a topic to request ticks from an OPRA feed source that contains quotes of an IBM option traded on the Chicago Board Options Exchange (‘CBOE’) that includes the best bid and best ask for the IBM option on the CBOE.
Brokering (400), by a stream administration server, establishment of an active message stream (280) to a subscribing client device from an active feed adapter according to the method of FIG. 4 may also include providing the subscribing client device a destination address for the feed adapter. The destination address for the feed adapter is a multicast address or a unicast address used by the subscribing client device to listen for messages from a feed adapter. Using the destination address provided by the stream administration server, the subscribing client device may establish the active message stream (280) from the feed adapter to the subscribing client device.
Before the stream administration server provides the destination address for the feed adapter, the stream administration server in the example of FIG. 4 may perform several security services to ensure that the subscribing client device only receives messages from the feed adapter for which the subscribing client device is authorized to receive. In the method of FIG. 4, brokering (400), by a stream administration server, establishment of an active message stream (280) to a subscribing client device from an active feed adapter may also be carried out by authenticating the subscribing client device and authorizing the subscribing client device to receive messages from the feed adapter on the message stream (280). Authenticating the subscribing client device may be carried out by verifying client security credentials provided by the subscribing client device with the subscription request. The client security credentials may be implemented as a digital signature in a public key infrastructure, a security token, or any other security data as will occur to those of skill in the art for authenticating the identity of the originator of the subscription request. Authorizing the subscribing client device to receive messages from the feed adapter on the message stream (280) may be carried out by identifying the privileges associated with the authenticated subscribing client device in dependence upon an authorization policy. An authorization policy is a set of rules governing the privileges of authenticated subscribing client devices requesting to receive data from a feed adapter.
The method of FIG. 4 also includes receiving (406), in a transport engine of the subscribing client device from the active feed adapter on the active message stream (280), the active application messages (402) encapsulated in active transport packets (408). Each active transport packet (408) represents a quantity of data transmitted as a whole from one device to another on a network. Examples of transport packets may include TCP packets or UDP datagrams. Each active transport packet (408) of FIG. 4 includes one or more active application messages (402). As mentioned above, readers will note that in this specification a transport packet that includes one application message may refer to a transport packet that includes an entire application message or a fragment of an application message. Each active transport packet (408) of FIG. 4 is characterized by an active packet sequence number (410). The active packet sequence number (410) uniquely identifies an active transport packet among other active transport packets transmitted from a particular active feed adapter. The active packet sequence number (410) also provides the relative transmission order for a particular active transport with respect to the other active transport packets transmitted from the active feed adapter.
The method of FIG. 4 also includes receiving (412), by the transport engine from the active feed adapter, an active transport packet (414) containing an active mapping (416) of the active application messages to the active transport packets. The active transport packet (414) of FIG. 4 represents an administrative packet from a transport engine of the active feed adapter to the transport engine of the subscribing client device. Unlike the active transport packets (408) that include one or more of the active application messages (402), the active transport packet (414) is not passed along to application software components that reside above the transport layer of the network protocol stack because the active transport packet (408) is an administrative packet between transport engines that reside in the transport layer of the network protocol stack. The transport engine of the subscribing client device may differentiate the active transport packet (414) that includes the active mapping (416) from the active transport packets (408) that include one or more of the active application messages (402) by identifying the packet type for each transport packet received using a packet header field.
In the example of FIG. 4, the active mapping (416) of the active application messages to the active transport packets is a map of the particular active application messages that the active feed adapter encapsulated into each active transport packet. For example, the active mapping (416) may indicate that active transport packet one includes active application messages one, two, and three, and that active transport packet two includes active application message four. A transport engine of the active feed adapter maintains the active mapping (416) as the active feed adapter's transport engine encapsulates application messages into transport packets. Because the application messages are created in application layer software components and transport layer components such as the transport engine typically do not recognize the application layer formatted data, the transport engine of the subscribing client device may wrap the active application messages received from an application layer software component in a transport layer message frame for manipulation by the transport engine.
The method of FIG. 4 also includes identifying (418), by the transport engine in dependence upon the active sequence numbers (410), a missing active transport packet (420). The missing active transport packet (420) represents an active transport packet (408) not received by the subscribing client device. Identifying (418), by the transport engine in dependence upon the active sequence numbers (410), a missing active transport packet (420) according to the method of FIG. 4 may be carried out by counting down from a predetermined timeout period when an active transport packet is received in the transport engine of the subscribing client device that has a value for the active packet sequence number (410) that is higher than the previous highest value by at least two. Identifying (418), by the transport engine in dependence upon the active sequence numbers (410), a missing active transport packet (420) according to the method of FIG. 4 may further be carried out by identifying, as the missing active transport packet (420) after the predetermined timeout period, any active transport packet having values for the active packet sequence numbers that are between the values for the active packet sequence number of the active transport packet having previous highest value for an active packet sequence number and the active transport packet having a value for an active packet sequence number that is higher than the previous highest value by at least two.
The method of FIG. 4 also includes identifying (422), by the transport engine, missing active application messages (424) of the missing active transport packet in dependence upon the active mapping (416). The missing active application messages (424) represent the active application messages (402) not received by the subscribing client device. Identifying (422), by the transport engine, missing active application messages (424) of the missing active transport packet in dependence upon the active mapping (416) according to the method of FIG. 4 may be carried out by retrieving values for the active application message sequence numbers (404) associated with the active packet sequence number (410) of the missing active transport packet (420) in the active mapping (416), and identifying the active application messages (402) having the retrieved values as the missing active application messages (424).
The method of FIG. 4 also includes requesting (426), by the transport engine, transmission of the missing active application messages from the active feed adapter. Requesting (426), by the transport engine, transmission of the missing active application messages from the active feed adapter may be carried out by transmitting, from the transport engine to the active feed adapter, a message transmission request (428) for each missing active application message (424). The message transmission request (428) represents a negative acknowledgement (‘NAK’) indicating that the subscribing client device did not receive a particular missing active application message (424). The message transmission request (428) may specify the missing active application message (424) using the active message sequence number of the missing active application message (424). When the active feed adapter receives the message transmission request (428), the active feed adapter may then send the active transport packets that include the unreceived active application messages to the subscribing client device. In the event that the active feed adapter has failed, a backup feed adapter may receive the message transmission request (428). Because the backup feed adapter processes backup application messages that represent duplicates of the active application messages, the backup feed adapter may satisfy the message transmission request (428).
As mentioned above, the transport engine of the subscribing client device requests transmission of the missing active application messages from the active feed adapter. For further explanation, therefore, FIG. 5 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to embodiments of the present invention that includes receiving (502), by an active feed adapter from a subscribing client device, a message transmission request (428) that identifies an active application message for transmission. As mentioned above, the message transmission request (428) of FIG. 5 represents a negative acknowledgement (‘NAK’) that indicates to the active feed adapter that the subscribing client device did not receive a particular missing active application message. In the example of FIG. 5, the message transmission request (428) includes the active message sequence number (504) of the missing active application message not received by the subscribing client device.
The method of FIG. 5 also includes buffering (500), by the active feed adapter, in an active packet buffer the active transport packets (408) transmitted to the subscribing client device. The active packet buffer is computer memory of the active feed adapter for storing active transport packets (408) transmitted to the subscribing client device. The active transport packets (408) of FIG. 5 are similar to the active transport packets described above with reference to FIG. 4 in that each active transport packet (408) of FIG. 5 includes one or more active application messages (402) and each active transport packet (408) of FIG. 5 is characterized by an active packet sequence number (410). Each active application message (402) of FIG. 5 is characterized by an active message sequence number (404).
The method of FIG. 5 also includes determining (506), by the active feed adapter, whether an active transport packet in the active packet buffer includes the identified active application message for transmission in dependence upon the active mapping (416) of the active feed adapter and the message transmission request (428). As mentioned above, the active mapping (416) of the active application messages to the active transport packets is a map of the particular active application messages that the active feed adapter encapsulated into each active transport packet. Determining (506), by the active feed adapter, whether an active transport packet in the active packet buffer includes the identified active application message for transmission may be carried out by retrieving the value for the active packet sequence number (410) of the active transport packet (408) that encapsulated the active application message having the active message sequence number (504) identified in the message transmission request (428). Determining (506), by the active feed adapter, whether an active transport packet in the active packet buffer includes the identified active application message for transmission may further be carried out by identifying whether the active transport packet (408) having the retrieved value for the active packet sequence number is stored in the active packet buffer. If the active transport packet (408) having the retrieved value for the active packet sequence number is stored in the active packet buffer, then an active transport packet in the active packet buffer includes the identified active application message for transmission.
The method of FIG. 5 also includes transmitting (508), by the active feed adapter, the buffered active transport packet (510) that includes the identified active application message for transmission to the subscribing client device if an active transport packet in the active packet buffer includes the identified active application message for transmission. Transmitting (508), by the active feed adapter, the buffered active transport packet (510) that includes the identified active application message for transmission to the subscribing client device may be carried out using a message stream implemented according to the UDP/IP protocols or TCP/IP protocols.
The method of FIG. 5 is described with reference to active feed adapters, active application messages having active message sequence numbers, active transport packets having active packet sequence numbers, and active mappings of the active application messages to the active transport packets. Readers will note, however, that exemplary methods for reliable messaging using a message stream in a high speed, low latency data communications environment that include: buffering, by the backup feed adapter, in an backup packet buffer the backup transport packets transmitted to the subscribing client device; receiving, by the backup feed adapter from the subscribing client device, the message transmission request that identifies an backup application message for transmission; determining, by the backup feed adapter, whether an backup transport packet in the backup packet buffer includes the identified backup application message for transmission in dependence upon the backup mapping of the backup feed adapter and the message transmission request; and transmitting, by the backup feed adapter, the buffered backup transport packet that includes the identified backup application message for transmission to the subscribing client device if an backup transport packet in the backup packet buffer includes the identified backup application message for transmission, operate in a manner similar to the method of FIG. 5.
As mentioned above, the active feed adapter encapsulates active application messages into active transport packets. For further explanation, therefore, FIG. 6 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to embodiments of the present invention that includes encapsulating (600), by the active feed adapter, one or more active application messages (402) into an active transport packet (408).
The active application messages (402) of FIG. 6 are similar to the active application messages described above with reference to FIG. 4 in that each active application message (402) of FIG. 6 is characterized by an active message sequence number (404). The active transport packets (408) of FIG. 6 are similar to the active transport packets described above with reference to FIG. 4 in that each active transport packet (408) of FIG. 6 includes one or more active application messages (402) and each active transport packet (408) of FIG. 6 is characterized by an active packet sequence number (410).
In the method of FIG. 6, encapsulating (600), by the active feed adapter, one or more active application messages (402) into an active transport packet (408) may be carried out by receiving the active application message (402) from an application layer software component in the active feed adapter, identifying the size of the active application message (402), wrapping a fragment or the entire the active application message (402) in a transport message frame, and packaging a fragment of the message, the entire message or more than one active application messages (402) into an active transport packet (408) according to a predetermined size limit for the active transport packets (408).
The method of FIG. 6 also includes maintaining (602), by the active feed adapter, the active mapping (416) of the active application messages to the active transport packets. Maintaining (602), by the active feed adapter, the active mapping (416) of the active application messages to the active transport packets may be carried out by associating the value for the active packet sequence number (410) of an active transport packet (408) with the values for the active message sequence number (404) of the active application messages (402) encapsulated in the particular active transport packet (408).
The method of FIG. 6 also includes transmitting (604), by the active feed adapter to the subscribing client device, an active transport packet (414) containing the active mapping (416) of the active application messages to the active transport packets. Transmitting (604), by the active feed adapter to the subscribing client device, an active transport packet (414) containing the active mapping (416) of the active application messages to the active transport packets may be carried out by encapsulating the active mapping (416) in an administrative active transport packet and transmitting the administrative active transport packet to the subscribing client device on a message stream implemented according to the UDP/IP protocols or TCP/IP protocols.
The method of FIG. 6 is described with reference to active feed adapters, active application messages having active message sequence numbers, active transport packets having active packet sequence numbers, and active mappings of the active application messages to the active transport packets. Readers will note, however, that exemplary methods for reliable messaging using a message stream in a high speed, low latency data communications environment that include: encapsulating, by the backup feed adapter, one or more backup application messages into an backup transport packet; maintaining, by the backup feed adapter, the backup mapping of the backup application messages to the backup transport packets; and transmitting, by the backup feed adapter to the subscribing client device, an backup transport packet containing the backup mapping of the backup application messages to the backup transport packets, operate in a manner similar to the method of FIG. 6.
As mentioned above, reliable messaging for a message stream in a high speed, low latency data communications environment according to embodiments of the present invention includes requesting, by the transport engine, transmission of the missing active application messages from an active feed adapter. When failover occurs from the active feed adapter to a backup feed adapter, the subscribing client device may request from the backup feed adapter transmission of the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages. For further explanation, therefore, FIG. 7 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to embodiments of the present invention that includes requesting (730), by the transport engine from the backup feed adapter, transmission of the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages.
The method of FIG. 7 also includes brokering (700), by the stream administration server, establishment of a backup message stream (282) to the subscribing client device from a backup feed adapter. The backup message stream (282) of FIG. 7 represents a data communication channel between a communications endpoint of a subscribing client device and a communications endpoint of a feed adapter. A message stream may be implemented as a multicast data communication channel using the UDP/IP protocols or a unicast data communication channel using TCP/IP protocols as discussed above with reference to FIG. 2. In the example of FIG. 7, the backup message stream (282) includes backup application messages (702). The backup application messages (702) represent application messages received by a subscribing client device from a backup feed adapter. Each backup application message is characterized by a backup message sequence number (704). The backup message sequence number (704) uniquely identifies a backup application message among other application messages transmitted from a particular backup feed adapter. The backup message sequence number (704) also provides the relative transmission order for a particular backup application message with respect to the other backup application messages transmitted from the backup feed adapter. In the method of FIG. 7, brokering (700), by the stream administration server, establishment of a backup message stream (282) to the subscribing client device from a backup feed adapter may be carried out in a manner similar to brokering establishment of an active message stream to a subscribing client device from an active feed adapter described above with reference to FIG. 4.
The method of FIG. 7 also includes receiving (706), in response to failover from the active feed adapter to the backup feed adapter, backup transport packets (708) in the transport engine of the subscribing client device from the backup feed adapter. As mentioned above, failover is the process of transitioning from a failed active component to a redundant backup component. The backup feed adapter encapsulates backup application messages (702) in backup transport packets (708) and buffers the backup transport packets (708) until failover from the active feed adapter to the backup feed adapter. The backup transport packets (708) are similar to the active transport packets (408). Each backup transport packet (708) represents a quantity of data transmitted as a whole from one device to another on a network. In the example of FIG. 7, each backup transport packet (708) includes one or more backup application messages (702). As mentioned above, a transport packet that includes one application message may refer to a transport packet that includes an entire application message or a fragment of an application message in this specification. Each backup transport packet (708) of FIG. 7 is characterized by a backup packet sequence number (710). Each backup application message (702) of FIG. 7 is characterized by a backup message sequence number (704) and represents a duplicate of a corresponding active application message.
The method of FIG. 7 also includes receiving (712), by the transport engine from the backup feed adapter, a backup transport packet (714) containing a backup mapping (716) of the backup application messages to the backup transport packets. The backup transport packet (714) of FIG. 7 is similar to the active transport packet (414) described above with reference to FIG. 4. The backup transport packet (714) of FIG. 7, however, represents an administrative packet from a transport engine of the backup feed adapter to the transport engine of the subscribing client device. The backup mapping (716) of the backup application messages to the backup transport packets is a map of the particular backup application messages that the backup feed adapter encapsulated into each backup transport packet.
The method of FIG. 7 includes identifying (718), by the transport engine, a most recent active application message received (720) from the active feed adapter in dependence upon an active mapping. As explained above, the active mapping of the active application messages to the active transport packets is a map of the particular active application messages that the active feed adapter encapsulated into each active transport packet. The most recent active application message received (720) represents the last in sequence of the active application messages received from the active feed adapter. Identifying (718), by the transport engine, the most recent active application message received (720) from the active feed adapter in dependence upon an active mapping according to the method of FIG. 7 may be carried out by identifying, from the active mapping, the active application message having the highest active message sequence number from the active application messages included in the last active transport packet received from the active feed adapter.
The method of FIG. 7 also includes identifying (722), by the transport engine, an earliest backup application message received (724) from the backup feed adapter in dependence upon the backup mapping (716). The earliest backup application message received (724) represents the first in sequence of the backup application messages received from the backup feed adapter. Identifying (722), by the transport engine, the earliest backup application message received (724) from the backup feed adapter in dependence upon the backup mapping (716) according to the method of FIG. 7 may be carried out by identifying, from the backup mapping (716), the backup application message having the lowest backup message sequence number form the backup application messages included in the first backup transport packet received from the backup feed adapter.
The method of FIG. 7 also includes determining (726), by the transport engine, values (728) of the active message sequence numbers from missing active application messages from the active feed adapter in dependence upon the most recent active application message received (720) and the earliest backup application message received (724). The values (728) of the active message sequence numbers from missing active application messages from the active feed adapter represent the application messages that the subscribing client device did not receive from the active feed adapter or the backup feed adapter. Determining (726), by the transport engine, values (728) of the active message sequence numbers from missing active application messages from the active feed adapter according to the method of FIG. 7 may be carried out by identifying the integer values between the value of the active message sequence number of the most recent active application message received (720) and the backup message sequence number of the earliest backup application message received (724).
The method of FIG. 7 also includes requesting (730), by the transport engine from the backup feed adapter, transmission of the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages. Requesting (730), by the transport engine from the backup feed adapter, transmission of the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages according to the method of FIG. 7 may be carried out by transmitting, from the transport engine to the backup feed adapter, a message transmission request (732) for each backup application message having a backup message sequence number with the same value as one of the values of the active message sequence numbers from missing active application messages. The message transmission request (732) represents a negative acknowledgement (‘NAK’) that indicates to the backup feed adapter that the subscribing client device did not receive a particular backup application message. The message transmission request (732) may specify the particular backup application message not received using the backup message sequence number of the particular backup application message not received. When the backup feed adapter receives the message transmission request (732), the backup feed adapter may send the backup transport packets that include the unreceived backup application messages to the subscribing client device.
In the method of FIG. 7, the subscribing client device requests transmission from the backup feed adapter the backup application messages from the backup feed adapter. Readers will note however, that the subscribing client device may also request transmission from the backup feed adapter of the backup transport packets that includes the particular backup application message not received by the subscribing client device. Requesting (730), by the transport engine from the backup feed adapter, transmission of the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages according to the method of FIG. 7 may be carried out by requesting, by the transport engine, transmission of the backup transport packets that include the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages. The subscribing client device may identify the backup transport packets that include the backup application messages having backup message sequence numbers with the same values as the values of the active message sequence numbers from missing active application messages using the backup mapping (716) of the backup application messages to the backup transport packets.
Turning now to FIG. 8, FIG. 8 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to embodiments of the present invention. The method of FIG. 8 includes brokering (800), by a stream administration server, establishment of an active message stream to a subscribing client device from an active feed adapter. The active feed adapter in the example of FIG. 8 encapsulates active application messages in active transport packets. The active feed adapter may encapsulate active application messages in active transport packets by wrapping a fragment or the entire active application message in a transport message frame, encoding the transport message frame with a transport frame sequence number provided by a software component operating above the transport layer, and packaging one or more transport message frames into an active transport packet. By wrapping an active application message in a transport frame with a transport frame sequence number that matches the active message sequence number of the active application message, a software component operating in the transport layer may identify an active application message in an active transport packet.
In the example of FIG. 8, each active transport packet includes one or more active application messages. As noted above, a transport packet that includes one application message may refer to a transport packet that includes an entire application message or a fragment of an application message in this specification. Each active transport packet characterized by an active packet sequence number, and each active application message characterized by an active message sequence number. In the method of FIG. 8, brokering (800), by a stream administration server, establishment of an active message stream to a subscribing client device from an active feed adapter may be carried out as discussed above with reference to FIG. 4.
The method of FIG. 8 also includes brokering (802), by the stream administration server, establishment of a backup message stream to the subscribing client device from a backup feed adapter. The backup feed adapter in the example of FIG. 8 encapsulates backup application messages in backup transport packets and buffers the backup transport packets until failover from the active feed adapter to the backup feed adapter. Each backup transport packet includes one or more backup application messages and is characterized by a backup packet sequence number. Each backup application message is characterized by a backup message sequence number and represents a duplicate of a corresponding active application message.
The method of FIG. 8 includes maintaining (804), by the backup feed adapter, a backup mapping of the backup application messages to the backup transport packets. Maintaining (804), by the backup feed adapter, a backup mapping of the backup application messages to the backup transport packets according to the method of FIG. 8 may be carried out by associating in a table the value for the backup packet sequence number of a backup transport packet with the values for the backup message sequence number of the backup application messages encapsulated in the particular backup transport packet.
The method of FIG. 8 includes receiving (806), in a transport engine of the subscribing client device from the active feed adapter, active transport packets on the active message stream. The method of FIG. 8 also includes receiving (808), in the transport engine from the backup feed adapter in response to failover from the active feed adapter to the backup feed adapter, backup transport packets on the backup message stream.
The method of FIG. 8 includes identifying (810), by the transport engine, a missing active application message from the active feed adapter. A missing active application message is an application message that the subscribing client device did not receive from the active feed adapter or the backup feed adapter. Identifying (810), by the transport engine, a missing active application message from the active feed adapter according to the method of FIG. 8 may be carried out by identifying a most recent active application message received from the active feed adapter in dependence upon the active mapping, identifying an earliest backup application message received from the backup feed adapter, and identifying the integer values between the value of the active message sequence number of the most recent active application message received and the value of the backup message sequence number of the earliest backup application message received.
The method of FIG. 8 also includes requesting (812), by the transport engine from the backup feed adapter, transmission of the backup application message that corresponds to the missing active application message. Requesting (812), by the transport engine from the backup feed adapter, transmission of the backup application message that corresponds to the missing active application message according to the method of FIG. 8 may be carried out by transmitting, from the transport engine to the backup feed adapter, a message transmission request for the backup application message having a backup message sequence number with the same value as the value of the active message sequence numbers of the missing active application message. The message transmission request represents a negative acknowledgement (‘NAK’) that indicates to the backup feed adapter that the subscribing client device did not receive a particular backup application message and specifies the particular backup application message not received using the backup message sequence number of the particular backup application message not received.
The method of FIG. 8 includes identifying (814), by the backup feed adapter in dependence upon the backup mapping, a backup transport packet that includes the backup application message specified in the message transmission request. Identifying (814), by the backup feed adapter in dependence upon the backup mapping, a backup transport packet that includes the backup application message specified in the message transmission request according to the method of FIG. 8 may be carried out by retrieving, from the backup mapping, the value for the backup packet sequence number associated with the value for the backup message sequence number of the backup application message specified in the message transmission request.
The method of FIG. 8 also includes transmitting (816), by the backup feed adapter to the transport engine, the identified backup transport packet. Transmitting (816), by the backup feed adapter to the transport engine, the identified backup transport packet according to the method of FIG. 8 may be carried out by determining whether a backup packet buffer of the backup feed adapter includes the identified backup transport packet, and transmitting the identified backup transport packet if the backup packet buffer includes the identified backup transport packet.
In the method of FIG. 8, the subscribing client device requests that the backup feed adapter transmit the backup application message corresponding to an active application message that the subscribing client device missed during failover. The backup feed adapter uses the backup mapping to identify a backup transport packet that includes the backup application message corresponding to a missing active application message. Readers will note, however, that the subscribing client device may also use the backup mapping to identify a backup transport packet that includes the backup application message corresponding to a missing active application message, and then request that the backup feed adapter transmit the identified backup transport packet. For further explanation, therefore, FIG. 9 sets forth a flowchart illustrating a further exemplary method for reliable messaging using a multicast message stream in a high speed, low latency data communications environment according to embodiments of the present invention that includes identifying (902), by the transport engine in dependence upon the backup mapping, a backup transport packet that includes the backup application message that corresponds to the identified missing active application message.
The method of FIG. 9 is similar to the method of FIG. 8 in that the method of FIG. 9 includes brokering (800), by a stream administration server, establishment of an active message stream to a subscribing client device from an active feed adapter, brokering (802), by the stream administration server, establishment of a backup message stream to the subscribing client device from a backup feed adapter, maintaining (804), by the backup feed adapter, a backup mapping of the backup application messages to the backup transport packets, receiving (806), in the transport engine from the active feed adapter, active transport packets on the active message stream, receiving (808), in the transport engine from the backup feed adapter in response to failover from the active feed adapter to the backup feed adapter, backup transport packets on the backup message stream, and identifying (810), by the transport engine, a missing active application message from the active feed adapter. The example of FIG. 9 is also similar to the example of FIG. 8 in that the active feed adapter in the example of FIG. 9 encapsulates active application messages in active transport packets. Each active transport packet of FIG. 9 includes one or more active application messages and is characterized by an active packet sequence number. Each active application message is characterized by an active message sequence number. The backup feed adapter in the example of FIG. 9 encapsulates backup application messages in backup transport packets and buffers the backup transport packets until failover from the active feed adapter to the backup feed adapter. Each backup transport packet of FIG. 9 includes one or more backup application messages and is characterized by a backup packet sequence number. Each backup application message is characterized by a backup message sequence number and represents a duplicate of a corresponding active application message.
The method of FIG. 9 differs from the method of FIG. 8 in that the method of FIG. 9 also includes receiving (900), in a transport engine of the subscribing client device from the backup feed adapter, the backup mapping. Receiving (900), in a transport engine of the subscribing client device from the backup feed adapter, the backup mapping according to the method of FIG. 9 may be carried out by receiving a backup transport packet from the backup feed adapter that contains the backup mapping.
The method of FIG. 9 also includes identifying (902), by the transport engine in dependence upon the backup mapping, a backup transport packet that includes the backup application message that corresponds to the identified missing active application message. Identifying (902), by the transport engine in dependence upon the backup mapping, a backup transport packet that includes the backup application message that corresponds to the identified missing active application message may be carried out by retrieving, from the backup mapping, the value for the backup packet sequence number associated with the value for the active message sequence number of the missing active application message.
The method of FIG. 9 includes requesting (904), by the transport engine from the backup feed adapter, transmission of the identified backup transport packet. Requesting (904), by the transport engine from the backup feed adapter, transmission of the identified backup transport packet may be carried out by transmitting, from the transport engine to the backup feed adapter, a packet transmission request for the identified backup transport packet. The packet transmission request represents a negative acknowledgement (‘NAK’) that indicates to the backup feed adapter that the subscribing client device did not receive a particular backup transport packet and specifies the particular backup transport packet not received using the backup packet sequence number of the particular backup transport packet not received.
The method of FIG. 9 also includes transmitting (906), by the backup feed adapter to the transport engine, the identified backup transport packet specified in the packet transmission request. Transmitting (906), by the backup feed adapter to the transport engine, the identified backup transport packet specified in the packet transmission request according to the method of FIG. 9 may be carried out by determining whether a backup packet buffer of the backup feed adapter includes the identified backup transport packet, and transmitting the identified backup transport packet if the backup packet buffer includes the identified backup transport packet.
In view of the explanations set forth above in this document, readers will recognize that practicing reliable messaging using a message stream in a high speed, low latency data communications environment according to embodiments of the present invention provides the following benefits:
- the ability in the transport layer of a network protocol stack to request retransmission of application messages recognized by application software operating in the application layer,
- the ability of a subscribing client device to request from a backup feed adapter the specific application messages not received during failover from an active feed adapter to the backup feed adapter, and
- the ability of a subscribing client device to request from a backup feed adapter the specific transport packets in which the backup feed adapter encapsulated application messages not received during failover from an active feed adapter to the backup feed adapter.
Exemplary embodiments of the present invention are described largely in the context of a fully functional computer system for reliable messaging using a multicast message stream in a high speed, low latency data communications environment. Readers of skill in the art will recognize, however, that the present invention also may be embodied in a computer program product disposed on signal bearing media for use with any suitable data processing system. Such signal bearing media may be a transmission media or a recordable media for machine-readable information, including magnetic media, optical media, or other suitable media. Examples of recordable media include magnetic disks in hard drives or diskettes, compact disks for optical drives, magnetic tape, and others as will occur to those of skill in the art. Examples of transmission media include telephone networks for voice communications and digital data communications networks such as, for example, Ethernets™ and networks that communicate with the Internet Protocol and the World Wide Web as well as wireless transmission media such as, for example, networks implemented according to the IEEE 802.11 family of specifications. Persons skilled in the art will immediately recognize that any computer system having suitable programming means will be capable of executing the steps of the method of the invention as embodied in a program product. Persons skilled in the art will recognize immediately that, although some of the exemplary embodiments described in this specification are oriented to software installed and executing on computer hardware, nevertheless, alternative embodiments implemented as firmware or as hardware are well within the scope of the present invention.
It will be understood from the foregoing description that modifications and changes may be made in various embodiments of the present invention without departing from its true spirit. The descriptions in this specification are for purposes of illustration only and are not to be construed in a limiting sense. The scope of the present invention is limited only by the language of the following claims.