Patent ID: 8281184

Claim:
A computer system for providing reliable non-blocking ordered messaging between a primary application and one or more backup applications, the computer system comprising: a primary host computer with computer system memory with one or more memory locations configured to store said primary application which is executed on said primary host with a host operating system; one or more central processing units (CPUs) for said primary host operatively connected to said computer system memory and configured to execute said primary application; one or more interceptors configured to intercept calls to the host operating system and to shared libraries and configured to generate replication messages based on said intercepted calls; a messaging layer for said primary application configured to transmit said replication messages to the one or more backup applications; one or more backup host computers each with computer system memory with one or more additional memory locations configured to store the one or more backup applications executing on said one or more backup hosts each with a corresponding host operating system; one or more central processing units (CPUs) for each one or more backup hosts operatively connected to said computer system memory for each backup host and configured to execute said backup applications; one or more additional interceptors intercepting calls to said one or more backup host operating systems and to backup shared libraries; and an additional messaging layer for each one or more of the backup applications which are configured to receive said replication messages, and wherein each new message generated on the primary application is assigned a sequence number one larger than the sequence number of a most recently sent message, and the messaging layer on the primary application and the additional messaging layer on the one or more backup applications provide ordered delivery of said replication messages; wherein the primary application and each of the one or more backup applications are comprised of one or more processes, and each of the processes are comprised of one or more threads; and wherein each replication messages generated for the primary application contains one or more of a method identifier, a process identifier, a thread identifier, and a unique replication sequence number, where said unique replication sequence number is one larger than the replication number for the previously sent replication message.