System and method for load balancing a communications network
Summary by NHIP
SIP Network Load Balancing
The method forwards SIP requests to servers selected by comparing a random integer against weighted performance scores. Scores drop to a predetermined value if CPU usage exceeds a first threshold or memory availability falls below a second threshold.
Claim Score by NHIP
Abstract
The invention relates to a system and method for load-balancing multiple servers in a communications network. Instead of using round robin or other predetermined scheme, SIP messages are forwarded to one of multiple SIP servers according to a performance score that is calculated from measured performance data. Advantageously, the disclosed system and method decreases signaling latency, improving overall communications speed. Moreover, where performance data indicates that a SIP server has failed, the performance score for the failed SIP server is zero, and the load balancer will not forward SIP messages to the failed SIP server. System uptime is also improved.

Term
Projected expiry 11 August 2028.
- Priority and filed
- Granted
- Today
- Projected expiry
22 claims: 9 independent, 13 dependent
- 1Broadest claimClaim Score 39, average(NHIP)A method for load-balancing a Session Initiation Protocol (SIP) network, comprising:receiving a SIP request from a source device;selecting one of a plurality of SIP servers including a first SIP server based on a plurality of performance scores, each of the plurality of performance scores determined as a function of a plurality of weighted performance parameters of a corresponding one of the plurality of SIP servers, the selecting including setting the performance score of the first SIP server equal to a predetermined value upon determination that a CPU percentage usage parameter of the first SIP server is greater than a first predetermined threshold or that a memory availability parameter of the first SIP server is less than a second predetermined threshold, the selecting including automatically generating a random integer and comparing the random integer with a sum of two or more of the performance scores for corresponding SIP servers, the selecting including detecting failures of the SIP servers using the performance scores, the selecting further including preventing the first SIP server from being chosen as a selected SIP server to perform the SIP request when the performance score of the first SIP server is the predetermined value;and forwarding the SIP request to the selected SIP server.
- 10A method for polling a Session Initiation Protocol (SIP) server for performance data, comprising:receiving, in a performance server, a data request for the performance data of the SIP server, the performance data to be assigned a weight and used in determining a performance score of the SIP server, the performance score to detect a failure of the SIP server, the performance score of the SIP server to be set equal to a predetermined value upon determination that a CPU percentage usage parameter of the SIP server is greater than a first predetermined threshold or that a memory availability parameter of the SIP server is less than a second predetermined threshold;creating a persistent performance client in the performance server;opening a connection to an agent running on the SIP server;and issuing a request from the persistent performance client to the agent;wherein the performance score of the SIP server is to be added with performance scores for one or more other SIP servers to generate a sum of two or more of the performance scores for corresponding SIP servers, the sum to be compared with an automatically generated random integer to select an available SIP server to service an SIP request;and wherein the SIP server is prevented from being selected as the available SIP server when the performance score of the SIP server is the predetermined value.
- 12A method responsive to a data request, comprising:creating, in a Session Initiation Protocol (SIP) server, a first controller, the first controller being configured to gather and cache performance data, the performance data to be assigned a weight and used in determining a performance score of the SIP server, the performance score to detect a failure of the SIP server, the performance score of the SIP server to be set equal to a predetermined value upon determination that a CPU percentage usage parameter of the SIP server is greater than a first predetermined threshold or that a memory availability parameter of the SIP server is less than a second predetermined threshold;and creating a server socket, the server socket being configured to determine whether a connection request has been received, the server socket being further configured to transmit the performance data;wherein the performance score of the SIP server is to be added with performance scores for one or more other SIP servers to generate a sum of two or more of the performance scores for corresponding SIP servers, the sum to be compared with an automatically generated random integer to select an available SIP server to service an SIP request;and wherein the SIP server is prevented from being selected as the available SIP server when the performance score of the SIP server is the predetermined value.
- 14A method for load-balancing a Session Initiation Protocol (SIP) network, comprising:receiving a SIP request;generating a routing request based on the SIP request;generating a request for a performance score for each of a plurality of SIP servers including a first SIP server based on the routing request, each performance score to be determined as a function of a plurality of weighted performance parameters of a corresponding one of the plurality of SIP servers, the performance score to detect a failure of its corresponding SIP server, the performance score of the first SIP server to be set equal to a predetermined value upon determination that a CPU percentage usage parameter of the first SIP server is greater than a first predetermined threshold or that a memory availability parameter of the first SIP server is less than a second predetermined threshold;generating a performance data query to each of the plurality of SIP servers based on the request for the performance score;and receiving the performance data query in an agent in each of the plurality of SIP servers;wherein a sum of two or more performance scores for corresponding SIP servers are to be compared with an automatically generated random integer to select an available SIP server to service the SIP request;and wherein the first SIP server is prevented from being selected as the available SIP server when the performance score of the first SIP server is the predetermined value.
- 16A machine-readable medium having instructions stored thereon for execution by a processor to perform a method comprising:receiving a SIP request from a source device;selecting one of a plurality of SIP servers including a first SIP server based on a plurality of performance scores, each of the plurality of performance scores determined as a function of a plurality of weighted performance parameters of a corresponding one of the plurality of SIP servers, the selecting including setting the performance score of the first SIP server equal to a predetermined value upon determination that a CPU percentage usage parameter of the first SIP server is greater than a first predetermined threshold or that a memory availability parameter of the first SIP server is less than a second predetermined threshold, the selecting including automatically generating a random integer and comparing the random integer with a sum of two or more of the performance scores for corresponding SIP servers, the selecting including detecting failures of the SIP servers using the performance scores, the selecting further including preventing the first SIP server from being chosen as a selected SIP server to perform the SIP request when the performance score of the first SIP server is the predetermined value;and forwarding the SIP request to the selected SIP server.
- 17A machine-readable medium having instructions stored thereon for execution by a processor to perform a method comprising:receiving, in a performance server, a data request for the performance data of a Session Initiation Protocol (SIP) server, the performance data to be assigned a weight and used in determining a performance score of the SIP server, the performance score to detect a failure of the SIP server, the performance score of the SIP server to be set equal to a predetermined value upon determination that a CPU percentage usage parameter of the SIP server is greater than a first predetermined threshold or that a memory availability parameter of the SIP server is less than a second predetermined threshold;creating a persistent performance client in the performance server;opening a connection to an agent running on the SIP server;and issuing a request from the persistent performance client to the agent;wherein the performance score of the SIP server is to be added with performance scores for one or more other SIP servers to generate a sum of two or more of the performance scores for corresponding SIP servers, the sum to be compared with an automatically generated random integer to select an available SIP server to service an SIP request;and wherein the SIP server is prevented from being selected as the available SIP server when the performance score of the SIP server is the predetermined value.
- 18A machine-readable medium having instructions stored thereon for execution by a processor to perform a method comprising:creating, in a Session Initiation Protocol (SIP) server, a first controller, the first controller being configured to gather and cache performance data, the performance data to be assigned a weight and used in determining a performance score of the SIP server, the performance score to detect a failure of the SIP server, the performance score of the SIP server to be set equal to a predetermined value upon determination that a CPU percentage usage parameter of the SIP server is greater than a first predetermined threshold or that a memory availability parameter of the SIP server is less than a second predetermined threshold;and creating a server socket, the server socket being configured to determine whether a connection request has been received, the server socket being further configured to transmit the performance data;wherein the performance score of the SIP server is to be added with performance scores for one or more other SIP servers to generate a sum of two or more of the performance scores for corresponding SIP servers, the sum to be compared with an automatically generated random integer to select an available SIP server to service an SIP request;and wherein the SIP server is prevented from being selected as the available SIP server when the performance score of the SIP server is the predetermined value.
- 19A machine-readable medium having instructions stored thereon for execution by a processor to perform a method comprising:receiving a Session Initiation Protocol (SIP) request;generating a routing request based on the SIP request;generating a request for a performance score for each of a plurality of SIP servers including a first SIP server based on the routing request, each performance score to be determined as a function of a plurality of weighted performance parameters of a corresponding one of the plurality of SIP servers, the performance score to detect a failure of its corresponding SIP server, the performance score of the first SIP server to be set equal to a predetermined value upon determination that a CPU percentage usage parameter of the first SIP server is greater than a first predetermined threshold or that a memory availability parameter of the first SIP server is less than a second predetermined threshold;generating a performance data query to each of the plurality of SIP servers based on the request for the performance score;and receiving the performance data query in an agent in each of the plurality of SIP servers;wherein a sum of two or more performance scores for corresponding SIP servers are to be compared with an automatically generated random integer to select an available SIP server to service the SIP request;and wherein the first SIP server is prevented from being selected as the available SIP server when the performance score of the first SIP server is the predetermined value.
- 20A communication system, comprising:an interface to a source device;a load balancer coupled to the interface;a plurality of Session Initiation Server (SIP) servers coupled to the load balancer, the plurality of SIP servers including a first SIP server;and a performance server coupled to the load balancer and the plurality of SIP servers, the performance server configured to collect performance data from the plurality of SIP servers, the load balancer configured to assign a weight to the performance data and calculate a plurality of performance scores, each of the plurality of performance scores associated with one of the plurality of SIP servers, the plurality of performance scores based on the weighted performance data, the performance score of the first SIP server to be set equal to a predetermined value upon determination that a CPU percentage usage parameter of the first SIP server is greater than a first predetermined threshold or that a memory availability parameter of the first SIP server is less than a second predetermined threshold;wherein the load balancer is configured to automatically generate a random integer and compare the random integer with a sum of two or more of the performance scores for corresponding SIP servers to select one of the plurality of SIP servers, the load balancer further configured to direct a SIP request received from the first interface to the selected one of the plurality of SIP servers, the load balancer further configured to detect failures of the SIP servers using the performance scores, the load balancer further configured to prevent the first SIP server from being chosen as the selected SIP to perform the SIP request when the performance score of the first SIP server is the predetermined value.
Independent claims9
77 paragraphs in 6 sections, as filed
FIELD OF INVENTION
The invention relates generally to the field of communications. More specifically, but not by way of limitation, the invention relates to a system and method for load balancing a Session Initiation Protocol (SIP) network for applications such as Voice Over Internet Protocol (VoIP) communications and Instant Messaging (IM).
BACKGROUND
Systems and methods are generally known for effecting signaling (control) data on a communications network. <figref idrefs="DRAWINGS">FIG. 1</figref> is a block diagram of a functional architecture of a communications network, according to the prior art. As shown in <figref idrefs="DRAWINGS">FIG. 1</figref>, a SIP server <b>104</b> provides communications services such as routing SIP signaling messages between a source device <b>102</b> and a destination device <b>106</b>. Source device <b>102</b> and/or destination device <b>106</b> may be, for example, a SIP-enabled telephone, a SIP PC (Personal Computer) client, a SIP-enabled gateway, or other device configured to originate or terminate a SIP session. <figref idrefs="DRAWINGS">FIG. 2</figref> is a message sequence diagram of communications with a SIP server, according to the prior art. In particular, <figref idrefs="DRAWINGS">FIG. 2</figref> illustrates signaling between the functional blocks in <figref idrefs="DRAWINGS">FIG. 1</figref> using request and response message types: Invite and Bye are request messages; Ringing and OK are response messages.
In typical signaling applications, multiple SIP servers may be used (instead of a single SIP server <b>104</b>) where the communications system also includes multiple sources and/or destination devices. But systems with multiple SIP servers have many disadvantages. For example, known systems may not be able to establish, modify, or terminate at least some SIP sessions where one or more SIP servers have failed. Moreover, requests may be received at SIP servers according to round-robin assignments or theoretical server capacity, resulting in inefficient processing of SIP messages. What is needed is a system and method for performance-based load balancing of SIP servers that can also adapt to one or more failed SIP servers in the system.
SUMMARY OF THE INVENTION
The invention relates to a system and method for load-balancing multiple servers in a communications network. SIP messages are forwarded to one of multiple SIP servers according to a performance score that is calculated from measured performance data from each of the multiple servers.
Embodiments of the invention provide a method for load-balancing a Session Initiation Protocol (SIP) network, including: receiving a SIP request from a source device; selecting one of a plurality of SIP servers based on a plurality of performance scores, each of the plurality of performance scores associated with a corresponding one of the plurality of SIP servers; and forwarding the SIP request to the selected SIP server.
Embodiments of the invention provide a method for polling a SIP server for performance data, including: receiving a data request for the performance data in a performance server; creating a persistent performance client in the performance server; opening a connection to an agent running on the SIP server; and issuing a request from the persistent performance client to the agent.
Embodiments of the invention provide a method responsive to a data request, including: creating a first controller, the first controller being configured to gather and cache performance data; and creating a server socket, the server socket being configured to determine whether a connection request has been received, the server socket being further configured to transmit the performance data.
Embodiments of the invention provide a method for load-balancing a Session Initiation Protocol (SIP) network, including: receiving a SIP request; generating a routing request based on the SIP request; generating a performance score request for each of a plurality of SIP servers based on the routing request; generating a performance data query to each of the plurality of SIP servers based on the performance score request; and receiving the performance data query in an agent in each of the plurality of SIP servers.
Embodiments of the invention provide a communication system, including: an interface to a source device; a load balancer coupled to the interface; a plurality of Session Initiation Server (SIP) servers coupled to the load balancer; and a performance server coupled to the load balancer and the plurality of SIP servers, the performance server configured to collect performance data from the plurality of SIP servers, the load balancer configured to calculate a performance score for each of the plurality of SIP servers based on the performance data, the load balancer further configured to direct a SIP request received from the first interface to a selected one of the plurality of SIP servers based on the performance score for each of the plurality of SIP servers.
Advantageously, the disclosed system and method decreases signaling latency, improving overall communications speed. Moreover, where performance data indicates that a SIP server has failed, the performance score for the failed SIP server is zero, and the load balancer will not forward SIP messages to the failed SIP server. So system uptime is also improved.
The features and advantages of the invention will become apparent from the following drawings and detailed description.
BRIEF DESCRIPTION OF THE DRAWINGS
Embodiments of the invention are described with reference to the following drawings, wherein:
<figref idrefs="DRAWINGS">FIG. 1</figref> is a block diagram of a functional architecture of a communications network, according to the prior art;
<figref idrefs="DRAWINGS">FIG. 2</figref> is a message sequence diagram of communications with a SIP server, according to the prior art;
<figref idrefs="DRAWINGS">FIG. 3</figref> is a block diagram of a functional architecture of a communications network, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 4</figref> is a block diagram of a functional architecture of the SIP load balancer in <figref idrefs="DRAWINGS">FIG. 3</figref>, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 5</figref> is a flow diagram of a routing/forwarding process, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 6</figref> is a flow diagram of a server selection process, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 7</figref> is a graphical illustration of a server selection plot, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 8</figref> is a flow diagram of a process for calculating server load, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 9</figref> is a graphical illustration of server load scores, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 10</figref> is a flow diagram of a server performance query process, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 11</figref> is a block diagram of a functional architecture for collecting performance data, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 12</figref> is a flow diagram of a polling process from the perspective of a performance server, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 13</figref> is a flow diagram for a polling process from the perspective of a performance agent on a SIP server, according to an embodiment of the invention;
<figref idrefs="DRAWINGS">FIG. 14</figref> is a block diagram of a test bed functional architecture, according to an embodiment of the invention; and
<figref idrefs="DRAWINGS">FIG. 15</figref> is an illustration of a test results table, according to an embodiment of the invention.
DETAILED DESCRIPTION
This section provides a top-level functional architecture, exemplary selection, routing and forwarding processes, a process for calculating a performance score, a process for collecting performance data, and a summary of empirical analysis. Sub-headings are used below for organizational convenience. The disclosure of any particular feature is not necessarily limited to any particular section, however.
Top Level Functional Architecture
<figref idrefs="DRAWINGS">FIG. 3</figref> is a block diagram of a functional architecture of a communications network, according to an embodiment of the invention. As shown in <figref idrefs="DRAWINGS">FIG. 4</figref>, a functional architecture includes source device <b>102</b>, load balancer <b>302</b>, performance server <b>304</b>, SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D, a network <b>308</b>, and a destination device <b>106</b>. The load balancer <b>302</b> is coupled to the source device <b>102</b>, the performance server <b>304</b>, and each of the SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D. The performance server <b>405</b> is also coupled to each of the SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D. Further, network <b>308</b> is coupled to each of the SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D and the destination device <b>106</b>.
The load balancer <b>302</b>, performance server <b>304</b>, SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D may each include a processor, each of the processors being configured to read and execute instructions from a processor-readable storage medium. In one variation, the load balancer <b>302</b> and the performance server <b>304</b> share a processor. The storage medium may be or include, for instance, a hard drive, Random Access Memory (RAM), or a Computer Disc (CD) Read Only memory (ROM). The load balancer <b>302</b>, performance server <b>304</b>, SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D may each be configured, for example, with a server operating system, examples of which include Linux™ or Windows™ server operating systems. SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C and <b>306</b>D may each be configured as SIP proxy servers.
The load balancer <b>302</b> is configured to receive a SIP message from source device <b>102</b>. Informed by the performance server <b>304</b>, the load balancer <b>302</b> is configured to forward the SIP message from the source device <b>102</b> to a selected one of the SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D. In turn, the selected SIP server establishes a session between the source device <b>102</b> and the destination device <b>106</b>.
Variations of the functional architecture illustrated in <figref idrefs="DRAWINGS">FIG. 3</figref> are also contemplated. For example, although four SIP servers are illustrated in <figref idrefs="DRAWINGS">FIG. 3</figref>, a functional architecture may have two or more SIP servers. Further, in a general case, a functional architecture may include multiple source devices and/or multiple destination devices. Moreover, switches or servers configured for H.323 or other IP telephony or other communications protocol could be used in the alternative to, or in combination with, the illustrated SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D, according to design choice.
<figref idrefs="DRAWINGS">FIG. 4</figref> is a block diagram of a functional architecture of the SIP load balancer in <figref idrefs="DRAWINGS">FIG. 3</figref>, according to an embodiment of the invention. As shown therein, an exemplary load balancer <b>302</b> includes SIP forwarding module <b>402</b>, SIP routing module <b>404</b>, server load computation module <b>406</b>, and server performance query module <b>408</b>. The SIP routing module <b>404</b> is coupled to the SIP forwarding module <b>402</b> and the server load computation module <b>406</b>. The server load computation module <b>406</b> is coupled to the SIP routing module <b>404</b> and the server performance query module <b>408</b>. The server performance query module <b>408</b> is coupled to the server load computation module <b>406</b>. In the illustrated embodiment, each of the couplings described above are two-way couplings.
The SIP forwarding module <b>402</b> is configured to receive a SIP request from the source device <b>102</b> and send an inquiry to the SIP routing module <b>404</b> to determine a SIP server recipient of the SIP message. Once the SIP forwarding module <b>402</b> receives the SIP server selection from the SIP routing module <b>404</b>, the SIP forwarding module <b>402</b> is configured to forward the SIP request to the selected SIP server (e.g., one of SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D).
In response to a routing inquiry from the SIP forwarding module <b>402</b>, the SIP routing module <b>404</b> is configured to request performance scores from the server load computation module <b>406</b>, to select a SIP server (e.g., one of SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D) based on the performance scores, and forward the selection to the SIP forwarding module <b>402</b>.
The server load computation module <b>406</b> is configured to receive a request for performance scores from the SIP routing module <b>404</b>, request performance data from the server performance query module <b>408</b>, calculate a performance score for each of the SIP servers <b>306</b>A, <b>306</b>B, <b>306</b>C, and <b>306</b>D based on the performance data, and provide the performance scores to the SIP routing module <b>404</b>.
The server performance query module <b>408</b> is configured to receive a request for performance data from the server load computation module <b>406</b>, solicit performance data from the performance server <b>304</b>, and forward the performance data to the server load computation module <b>406</b>.
Variations to the functional architecture illustrated in <figref idrefs="DRAWINGS">FIG. 4</figref> are possible. For example, any of the functional capability illustrated therein and described above may be combined in functional groupings different from that illustrated in <figref idrefs="DRAWINGS">FIG. 4</figref> and described above.
In operation, data may be cached or otherwise stored at various locations of the functional architecture. For instance, in response to a request for performance scores, server load computation module <b>406</b> may provide most recent performance scores to the SIP routing module <b>404</b> without having to first initiate a request for server performance data from the server performance query module <b>408</b>. Likewise, in response to a request from the server load computation module <b>406</b>, the server performance query module <b>408</b> may provide most recent server performance data to the server load computation module <b>406</b> prior to sending a request to the performance server <b>304</b>.
Embodiments of processes performed by the functional components of the load balancer <b>302</b> are further described with reference to <figref idrefs="DRAWINGS">FIGS. 5-10</figref> below.
Selection, Routing, and Forwarding Processes
<figref idrefs="DRAWINGS">FIG. 5</figref> is a flow diagram of a routing/forwarding process, according to an embodiment of the invention. As shown therein, the process begins by receiving a SIP request in step <b>502</b>. The process then advances to conditional step <b>504</b> to determine whether the received request is a registration request. Where the result of conditional step <b>504</b> is in the affirmative, the process advances to step <b>506</b> to route the SIP request to all SIP servers. In an alternative embodiment, if the result of conditional step <b>504</b> is in the affirmative, the process routes the SIP request to a registrar server (step not shown).
On the other hand, where the result of conditional step <b>504</b> is in the negative, the process is promoted to step <b>508</b> to extract a session signature from the SIP request in step <b>508</b>. The execution of step <b>508</b> may vary according to proprietary SIP implementation schemes. Then, in conditional step <b>510</b>, the process determines whether a SIP session exists (e.g., based on the session signature). If it is determined in conditional step <b>510</b> that a SIP session exists (e.g., the SIP request is associated with an existing SIP session), then the process advances to step <b>512</b> to forward the SIP request to the (pre)selected SIP server associated with the existing SIP session. Accordingly, a SIP request associated with an active session is simply routed to the appropriate SIP server.
If it is determined in conditional step <b>510</b> that a SIP session does not exist (e.g., the request is associated with a new SIP session), then the process selects a SIP server in step <b>514</b> and advances to conditional step <b>516</b> to determine whether the selected SIP server has been found. Where the result of conditional step <b>516</b> is in the negative, the process advances to step <b>518</b> to drop (e.g., terminate processing of) the SIP request. Where the result of conditional step <b>516</b> is in the affirmative, the process advances to step <b>512</b> to forward the SIP request to the (newly) selected SIP server. Accordingly, a SIP request associated with a new session requires selection of a SIP server in step <b>514</b> before being forwarded to the selected SIP server in step <b>512</b>. The load balancer <b>302</b> preferably maintains a list of active SIP sessions to execute conditional step <b>510</b> described above.
Variations to the process illustrated in <figref idrefs="DRAWINGS">FIG. 5</figref> are contemplated. For example, conditional step <b>504</b> and associated step <b>506</b> are optional. In addition, conditional step <b>514</b> may be considered a portion of selection step <b>516</b>.
<figref idrefs="DRAWINGS">FIG. 6</figref> is a flow diagram of a server selection process, according to an embodiment of the invention. In other words, <figref idrefs="DRAWINGS">FIG. 6</figref> is one embodiment of selection step <b>514</b>. As shown therein, the process begins in step <b>602</b>, then advances to step <b>604</b> to generate a random integer X, where 0<X≦ΣS<sub>k</sub>. ΣS<sub>k </sub>is the sum of performance scores for all SIP servers (shown graphically on integer axis <b>702</b> of <figref idrefs="DRAWINGS">FIG. 7</figref>).
Next, j is set equal to zero in step <b>606</b>, and conditional step <b>608</b> tests whether (S<sub>0</sub>+ . . . +S<sub>j−1</sub>)<X≦(S<sub>0</sub>+ . . . S<sub>j</sub>). S<sub>0</sub>, S<sub>j−1</sub>, and S<sub>j </sub>are the performance scores for servers <b>0</b> (S<b>0</b>), j−1, and j, respectively. If the result of conditional step <b>608</b> is negative, then the value of j is incremented by 1 in step <b>610</b>, and the process returns to conditional step <b>608</b>. If the result of conditional step <b>608</b> is positive, then the process selects server j in step <b>612</b>.
Accordingly, the server selection process <b>514</b> illustrated in <figref idrefs="DRAWINGS">FIG. 6</figref> tests one or more servers in steps <b>606</b>, <b>608</b>, and <b>610</b> to associate random integer X with a particular server j. The exemplary process illustrated in <figref idrefs="DRAWINGS">FIG. 6</figref> can be further understood with reference to the server selection plot illustrated in <figref idrefs="DRAWINGS">FIG. 7</figref>.
<figref idrefs="DRAWINGS">FIG. 7</figref> is a graphical illustration of a server selection plot, according to an embodiment of the invention. As shown in <figref idrefs="DRAWINGS">FIG. 7</figref>, data for each of five servers, S<b>0</b>, S<b>1</b>, S<b>2</b>, S<b>3</b>, and S<b>4</b> are plotted on integer axis <b>702</b> and score axis <b>704</b>. The integer axis <b>702</b> is divided into N partitions sequentially assigned to servers S<b>0</b>, S<b>1</b>, S<b>2</b>, S<b>3</b>, and S<b>4</b>. For each server, the size of the partition along integer axis <b>702</b> is proportional to the performance score.
<figref idrefs="DRAWINGS">FIG. 7</figref> further illustrates the position on the integer axis <b>702</b> for a random integer X generated in step <b>604</b>. It should be apparent that the larger the performance score for a server, the larger the partition size, and the more likely that the random integer X will be associated with a server having a relatively larger performance score. It would be determined in step <b>608</b> (with reference to integer axis <b>702</b>) that (S<sub>0</sub>+S<sub>1</sub>)<X≦(S<sub>0</sub>+S<sub>1</sub>+S<sub>2</sub>). Thus, server S<b>2</b> would be selected.
The performance score S<sub>3 </sub>associated with server S<b>3</b> is represented by a single point on the integer axis <b>702</b>. Note that the selection criteria in conditional step <b>608</b> prevents selection of a server having a performance score of zero. For example, if random integer X were equal to S<sub>0</sub>+S<sub>1</sub>+S<sub>2</sub>, the point where it is indicated in <figref idrefs="DRAWINGS">FIG. 7</figref> that the performance score for server S<b>3</b> is equal to zero, server S<b>2</b> would be selected by the process depicted in <figref idrefs="DRAWINGS">FIG. 6</figref>.
As described above, calculation of a performance score for each of the SIP servers is a prerequisite to selecting a SIP server in step <b>514</b>.
Calculating a Performance Score
<figref idrefs="DRAWINGS">FIG. 8</figref> is a flow diagram of a process for calculating server load (or performance score), according to an embodiment of the invention. As shown therein, the process begins in step <b>802</b>, then advances to step <b>804</b> to read each of several parameters. For example, in step <b>804</b>, the process reads C<sub>i</sub>, which is the Computer Processing Unit (CPU) usage, expressed as a percentage, for the i<sup>th </sup>SIP server. The process also reads C<sub>max</sub>, which is the maximum CPU usage, also expressed as a percentage. Also in step <b>804</b>, the process may read M<sub>i</sub>, which is the amount of available memory of the i<sup>th </sup>SIP server, expressed as a percentage of total memory. Further, in step <b>804</b>, the process reads M<sub>min</sub>, which is the minimum required memory (again, expressed as a percentage of total memory). The process may also read or calculate ΣM<sub>k</sub>, which is the sum of the available memory for all SIP servers with a non-zero performance score. Finally, in step <b>804</b>, the process may read W<sub>0 </sub>and W<sub>1</sub>, which are the predetermined weight of the CPU usage percentage parameter and the predetermined weight of the memory availability parameter, respectively. In one embodiment, C<sub>max </sub>is 95%, M<sub>min </sub>is 10 Mbytes, and W<sub>0 </sub>and W<sub>1 </sub>are both set equal to 1.
After reading the parameters in step <b>804</b>, the process advances to conditional step <b>806</b> where it is determined whether C<sub>i </sub>is less than or equal to C<sub>max</sub>. Where the result of conditional step <b>806</b> is in the affirmative, the process advances to step <b>810</b> to determine whether M<sub>i </sub>is greater or equal to M<sub>min</sub>. Where the result of either conditional step <b>806</b> or conditional step <b>810</b> are in the negative, the process terminates in step <b>808</b>, where a performance score S<sub>i </sub>is set equal to zero. Where the result of conditional step <b>810</b> is in the affirmative, the process advances to step <b>812</b> to calculate the performance score S<sub>i </sub>given by: S<sub>i</sub>=100(W<sub>0</sub>(1−C<sub>i</sub>)+W<sub>i</sub>M<sub>i</sub>/ΣM<sub>k</sub>)/W<sub>0</sub>+W<sub>1</sub>). Advantageously, scoring sensitivity can be adjusted by varying the predetermined weights W<sub>0 </sub>and W<sub>1 </sub>according to application requirements.
<figref idrefs="DRAWINGS">FIG. 9</figref> is a graphical illustration of server performance scores <b>902</b>, according to an embodiment of the invention. As shown, the highest performance score, 100%, is the case where CPU usage (C<sub>i</sub>) is 0%, and memory availability (M<sub>i</sub>) is 100%. As CPU and/or memory resources become less available, the performance score drops. Where the CPU usage (C<sub>i</sub>) is 100%, and/or where the memory availability (M<sub>i</sub>) is 0%, the performance score is equal to zero. In the illustrated embodiment, W<sub>0 </sub>and W<sub>1 </sub>are both set equal to 1. In alternative embodiments, the scoring solution can be made more sensitive to either memory availability or CPU utilization by changing the value of W<sub>0 </sub>and/or W<sub>1 </sub>either off-line or in-situ.
In alternative embodiments of the invention, the above calculation may be performed without a CPU usage parameter, or without a memory availability parameter. Moreover, in other embodiments, performance scores may be calculated based on network utilization, call volume, failure statistics (such as indications of server down status, or abnormal SIP session terminations), and/or other factors either separately or combined with CPU usage and/or memory availability so that multiple SIP servers can be load balanced based on one or more performance metrics, and/or so that fault tolerance can be provided to a SIP-based application.
Collecting Performance Data
<figref idrefs="DRAWINGS">FIG. 10</figref> is a flow diagram of a server performance query process, according to an embodiment of the invention. As shown in <figref idrefs="DRAWINGS">FIG. 10</figref>, the process begins in step <b>1002</b>, and then advances to step <b>1004</b> to set a parameter N equal to 1. Next, the process advances to step <b>1006</b> to poll a server PSN (the Nth SIP server). Then, the process advances to conditional step <b>1008</b> to determine whether the data being polled in step <b>1006</b> has been received. Where the result of conditional step <b>1008</b> is in the affirmative, the process advances to step <b>1012</b> to determine whether the query process of <figref idrefs="DRAWINGS">FIG. 10</figref> is completed. If the result of conditional step <b>1012</b> is in the affirmative, the process terminates in step <b>1016</b>.
Where the result of conditional step <b>1008</b> is in the negative, the process associates PSN with a down condition, and the process continues at conditional step <b>1012</b>. Where the result of conditional step <b>1012</b> is in the negative, the process advances to step <b>1014</b> where the server number is incremented by a 1 and the process returns to polling step <b>1006</b>.
Accordingly, the process illustrated in <figref idrefs="DRAWINGS">FIG. 10</figref> can be executed by the server performance query module <b>408</b> to collect server performance data for each of N SIP servers. <figref idrefs="DRAWINGS">FIGS. 11-13</figref> illustrate one embodiment for retrieving the performance data being polled in step <b>1006</b>.
<figref idrefs="DRAWINGS">FIG. 11</figref> is a block diagram of a functional architecture for collecting performance data, according to an embodiment of the invention. As shown in <figref idrefs="DRAWINGS">FIG. 11</figref>, performance server <b>304</b> is coupled to performance agent <b>1102</b> in SIP server <b>306</b>A and to performance agent <b>1104</b> in SIP server <b>306</b>B.
<figref idrefs="DRAWINGS">FIG. 12</figref> is a flow diagram of a polling process from the perspective of a performance server, according to an embodiment of the invention. As shown in <figref idrefs="DRAWINGS">FIG. 12</figref>, the process begins in step <b>1202</b> where performance server <b>304</b> receives a SIP request from load balancer <b>302</b> for a specific SIP server (e.g., SIP server <b>306</b>A or SIP server <b>306</b>B) or other node. Next, the process advances to step <b>1204</b> where the performance server <b>304</b> creates a persistent performance client (PPC) for the specified node. Next, the process advances to step <b>1206</b> where the PPC opens a connection to an agent (e.g., performance agent <b>1102</b> or performance agent <b>1104</b>) running on the specified node. Then, in step <b>1208</b>, the PPC issues a “get data” request to the agent. Next, in step <b>1210</b>, the PPC receives and processes a reply from the agent. Then, in step <b>1212</b>, the performance server <b>304</b> sends a performance statistics to the load balancer <b>302</b>. Finally, in step <b>1214</b> the performance server <b>304</b> caches the PPC.
Thus, in one embodiment of the invention, performance data is collected by one or more performance servers using agents that are embedded in each of the SIP servers.
<figref idrefs="DRAWINGS">FIG. 13</figref> is a flow diagram for a polling process from the perspective of a performance agent on a SIP server, according to an embodiment of the invention. As illustrated in <figref idrefs="DRAWINGS">FIG. 13</figref>, upon receipt of an initiation in step <b>1302</b>, the process launches three separate and distinct processes: a create collection controller step <b>1304</b>, a create server socket step <b>1312</b>, and a create notification controller step <b>1322</b>.
In response to the create collection controller step <b>1304</b>, the process advances to gather performance data in step <b>1306</b>, then cache performance data in <b>1308</b>. After step <b>1308</b>, the process may advance to a delay step <b>1310</b> before returning to step <b>1306</b> to gather additional performance data.
Subsequent to creating the server socket in step <b>1312</b>, the process advances to conditional step <b>1314</b> to determine whether a connection request has been received from the performance server <b>304</b>. Where the result of conditional step <b>1314</b> is in the affirmative, the process advances to step <b>1316</b> to create a new worker object. Next, in step <b>1318</b>, the process receives a “get data” request from the performance server <b>304</b>. Then, in step <b>1320</b>, the process returns the performance data (which was gathered in step <b>1306</b> and cached in step <b>1308</b>) to the performance server <b>304</b>. Where the result of conditional step <b>1314</b> is in the negative, the process returns to conditional step <b>1314</b>.
In response to the creation of a notification controller in step <b>1322</b>, the process advances to step <b>1324</b> to read the performance data cached in step <b>1308</b>. Next, the process advances to conditional step <b>1326</b> to determine whether the performance data exceeds a predetermined threshold. For example, a CPU utilization threshold may be set at 85%, and a memory availability threshold may be set at 10 MB. Where the result of step <b>1326</b> is in the affirmative, the process issues a notification to the performance server <b>304</b> in step <b>1328</b>. Where the data does not exceed a pre-determined threshold in conditional step <b>1326</b>, the process returns to step <b>1324</b> to read performance data.
Variations to the process illustrated in <figref idrefs="DRAWINGS">FIG. 13</figref> are contemplated. For example, the implementation of delay step <b>1310</b> is optional. In addition, where the result of conditional step <b>1314</b> is in the negative, an optional delay step could be inserted before returning to conditional step <b>1314</b>.
Empirical Analysis
Embodiments of the invention described above were tested using the architecture illustrated in <figref idrefs="DRAWINGS">FIG. 14</figref>. The test produced the results summarized in <figref idrefs="DRAWINGS">FIG. 15</figref>.
<figref idrefs="DRAWINGS">FIG. 14</figref> is a block diagram of a test bed functional architecture, according to an embodiment of the invention. As shown, SIP telephones <b>1402</b> and <b>1404</b>, softphones <b>1406</b> and <b>1408</b>, Load balancer <b>1412</b>, and SIP proxy servers <b>1414</b> and <b>1416</b> were coupled via link <b>1410</b>. SIP telephones <b>1402</b> and <b>1404</b> were 3Com® SIP telephones, and softphones <b>1406</b> and <b>1408</b> were implemented with Microsoft Windows® Messenger running on laptop personal computers.
To initialize the test, SIP telephones <b>1402</b> and <b>1404</b>, and softphones <b>1406</b> and <b>1408</b> were each registered with SIP proxy servers <b>1414</b> and <b>1416</b>. Server <b>1414</b> was assigned address 10.10.1.213, and server <b>1416</b> was assigned address 10.10.1.208. In addition, phones <b>1402</b>, <b>1404</b>, <b>1406</b>, and <b>1408</b> were each configured with load balancer <b>1412</b> address 10.10.1.221 as the outbound proxy address. A software tool was used to generate a controlled load on each of the SIP proxy servers <b>1414</b> and <b>1416</b>, while signaling messages were generated using phones <b>1402</b>, <b>1404</b>, <b>1406</b>, and <b>1408</b>. Log messages in load balancer <b>1412</b> were later reviewed to determine the number of times that each SIP proxy server <b>1414</b> and <b>1416</b> were selected.
<figref idrefs="DRAWINGS">FIG. 15</figref> is an illustration of a test results table, according to an embodiment of the invention. As shown therein, the test included four scenarios, <b>1</b>-<b>4</b>.
In scenario <b>1</b>, server <b>1414</b> and server <b>1416</b> were lightly loaded; the result was that the performance scores were similar, and load balancer <b>1412</b> selected servers <b>1414</b> and <b>1416</b> more or less equally. In scenario <b>2</b>, server <b>1414</b> was heavily loaded, and server <b>1416</b> was lightly loaded; the result was that server <b>1416</b> was selected 17 out of 20 times. In scenario <b>3</b>, server <b>1414</b> was lightly loaded, and server <b>1416</b> was heavily loaded; the result was that server <b>1414</b> was selected 15 out of 20 times. In scenario <b>4</b>, server <b>1414</b> and server <b>1416</b> were both heavily loaded; the result was that servers <b>1414</b> and <b>1416</b> were selected more or less equally.
CONCLUSION
The invention described above thus overcomes the disadvantages of known systems and methods by balancing signaling load amongst multiple servers based on performance scores calculated from measured performance data. While this invention has been described in various explanatory embodiments, other embodiments and variations can be effected by a person of ordinary skill in the art without departing from the scope of the invention. For example, the systems and methods described herein could be applied to different signaling protocols or communication environments.
Contents6
16 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11 Sheet 12 Sheet 13 Sheet 14 Sheet 15 Sheet 16
Every citation, both waysCites: the store holds 39 of 40
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US12003568B2 | Cited by | United States of America | Applicant |
| US12425492B2 | Cited by | United States of America | Applicant |
| US12003569B2 | Cited by | United States of America | Applicant |
| US8447849B2 | Cited by | United States of America | Applicant |
| US12143462B2 | Cited by | United States of America | Applicant |
| US11979475B2 | Cited by | United States of America | Applicant |
| US2008101335A1 | Cited by | United States of America | Pre-grant |
| US8451744B2 | Cited by | United States of America | Applicant |
| US11012530B2 | Cited by | United States of America | Applicant |
| US12021945B2 | Cited by | United States of America | Applicant |
| US11888639B2 | Cited by | United States of America | Applicant |
| US11770429B2 | Cited by | United States of America | Applicant |
| US12021914B2 | Cited by | United States of America | Applicant |
| US11336746B2 | Cited by | United States of America | Applicant |
| US11863339B2 | Cited by | United States of America | Applicant |
| US11616826B2 | Cited by | United States of America | Applicant |
| US12231519B2 | Cited by | United States of America | Applicant |
| US12323287B2 | Cited by | United States of America | Applicant |
| US10963531B2 | Cited by | United States of America | Applicant |
| US11799985B2 | Cited by | United States of America | Applicant |
| US10985934B2 | Cited by | United States of America | Applicant |
| US11233880B2 | Cited by | United States of America | Applicant |
| US11888638B2 | Cited by | United States of America | Applicant |
| US12218776B2 | Cited by | United States of America | Applicant |
| US12021944B2 | Cited by | United States of America | Applicant |
| US2015120910A1 | Cited by | United States of America | Pre-grant |
| US11418490B2 | Cited by | United States of America | Applicant |
| US9300669B2 | Cited by | United States of America | Applicant |
| US12081612B2 | Cited by | United States of America | Applicant |
| US12003566B2 | Cited by | United States of America | Applicant |
| US12166843B2 | Cited by | United States of America | Applicant |
| US12088684B2 | Cited by | United States of America | Applicant |
| US11190622B2 | Cited by | United States of America | Applicant |
| US12341860B2 | Cited by | United States of America | Applicant |
| US11838386B2 | Cited by | United States of America | Applicant |
| US11677856B2 | Cited by | United States of America | Applicant |
| US11888922B2 | Cited by | United States of America | Applicant |
| US11956299B2 | Cited by | United States of America | Applicant |
| US12143460B2 | Cited by | United States of America | Applicant |
| US12200084B2 | Cited by | United States of America | Applicant |
| US11310341B2 | Cited by | United States of America | Applicant |
| US11102326B2 | Cited by | United States of America | Applicant |
| US9148482B2 | Cited by | United States of America | Applicant |
| US11593446B2 | Cited by | United States of America | Applicant |
| US11956094B2 | Cited by | United States of America | Applicant |
| US11412066B2 | Cited by | United States of America | Applicant |
| US10931792B2 | Cited by | United States of America | Applicant |
| US11115230B2 | Cited by | United States of America | Applicant |
| US11916993B2 | Cited by | United States of America | Applicant |
| US11044345B2 | Cited by | United States of America | Applicant |
| US2008147551A1 | Cited by | United States of America | Pre-grant |
| US11128738B2 | Cited by | United States of America | Applicant |
| US12069150B2 | Cited by | United States of America | Applicant |
| US11233881B2 | Cited by | United States of America | Applicant |
| US12057958B2 | Cited by | United States of America | Applicant |
| US12056202B2 | Cited by | United States of America | Applicant |
| US11876853B2 | Cited by | United States of America | Applicant |
| US2012259986A1 | Cited by | United States of America | Pre-grant |
| US12177285B2 | Cited by | United States of America | Applicant |
| US2013054806A1 | Cited by | United States of America | Pre-grant |
| US12200083B2 | Cited by | United States of America | Applicant |
| US2015319233A1 | Cited by | United States of America | Pre-grant |
| US12294481B2 | Cited by | United States of America | Applicant |
| US8209421B2 | Cited by | United States of America | Search report |
| US11888921B2 | Cited by | United States of America | Applicant |
| US11711233B2 | Cited by | United States of America | Applicant |
| US12003567B2 | Cited by | United States of America | Applicant |
| US12192026B2 | Cited by | United States of America | Applicant |
| US11811848B2 | Cited by | United States of America | Applicant |
| US12260364B2 | Cited by | United States of America | Applicant |
| US9241031B2 | Cited by | United States of America | Search report |
| US11838119B2 | Cited by | United States of America | Applicant |
| US9436517B2 | Cited by | United States of America | Applicant |
| US12021946B2 | Cited by | United States of America | Applicant |
| US11949756B2 | Cited by | United States of America | Applicant |
| US8775628B2 | Cited by | United States of America | Search report |
| US11729297B2 | Cited by | United States of America | Applicant |
| US12457273B2 | Cited by | United States of America | Applicant |
| US11902351B2 | Cited by | United States of America | Applicant |
| US11412025B2 | Cited by | United States of America | Applicant |
| US12069148B2 | Cited by | United States of America | Applicant |
| US10902080B2 | Cited by | United States of America | Applicant |
| US11190374B2 | Cited by | United States of America | Applicant |
| US11044341B2 | Cited by | United States of America | Applicant |
| US11811850B2 | Cited by | United States of America | Applicant |
| US11272034B2 | Cited by | United States of America | Applicant |
| US11689639B2 | Cited by | United States of America | Applicant |
| US8406153B2 | Cited by | United States of America | Applicant |
| US8078755B1 | Cited by | United States of America | Applicant |
| US9716740B2 | Cited by | United States of America | Applicant |
| US10979533B2 | Cited by | United States of America | Applicant |
| US12095843B2 | Cited by | United States of America | Applicant |
| US8341295B1 | Cited by | United States of America | Search report |
| US12095841B2 | Cited by | United States of America | Applicant |
| US11870874B2 | Cited by | United States of America | Applicant |
| US11949755B2 | Cited by | United States of America | Applicant |
| US11758018B2 | Cited by | United States of America | Applicant |
| US11005967B2 | Cited by | United States of America | Applicant |
| US11451640B2 | Cited by | United States of America | Applicant |
| US11979249B2 | Cited by | United States of America | Applicant |
2 members in 1 office
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 94107004 | United States of America | A | |
| US20040941070 | – | – | – |
Members2
| Document | Office | Kind | |
|---|---|---|---|
| US2006069776A1 | United States of America | A1 | |
| US7805517B2This record | United States of America | B2 |
73 transactions on the USPTO file
Allowed after 2 non-final rejections, 1 final rejection and 1 RCE.
- Non-final rejections
- 2
- Final rejections
- 1
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Expire PatentEXP. | EXP. | |
| Maintenance Fee Reminder MailedREM. | REM. | |
| Payment of Maintenance Fee, 8th Year, Large EntityM1552 | M1552 | |
| Email NotificationEML_NTR | EML_NTR | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Correspondence Address ChangeC.AD | C.AD | |
| Post Issue Communication - Certificate of CorrectionN423 | N423 | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Email NotificationEML_NTR | EML_NTR | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Response to Reasons for AllowanceREAS | REAS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Examiner Interview Summary (PTOL - 413)MEXIN | MEXIN | |
| Examiner Interview Summary Record (PTOL - 413)EXIN | EXIN | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Advisory Action (PTOL - 303)MCTAV | MCTAV | |
| Advisory Action (PTOL-303)CTAV | CTAV | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Final ActionA.NE | A.NE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Correspondence Address ChangeC.AD | C.AD | |
| Mail-Petition Decision - DismissedMPTDI-1 | MPTDI-1 | |
| Petition Decision - DismissedPTDI-1 | PTDI-1 | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Petition EnteredPET. | PET. | |
| Withdraw Flagged for 5/25W525 | W525 | |
| Flagged for 5/25F525 | F525 | |
| Mail-Petition Decision - DismissedMPTDI | MPTDI | |
| Petition EnteredPET. | PET. | |
| IFW TSS Processing by Tech Center CompleteTSSCOMP | TSSCOMP | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Return from OIPEWROIPE | WROIPE | |
| Application Return TO OIPEROIPE | ROIPE | |
| Application Is Now CompleteCOMP | COMP | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Payment of additional filing fee/PreexamFLFEE | FLFEE | |
| A statement by one or more inventors satisfying the requirement under 35 USC 115, Oath of the ApplicOATHDECL | OATHDECL | |
| Notice Mailed--Application Incomplete--Filing Date AssignedINCD | INCD | |
| Cleared by OIPE CSRL194 | L194 | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Initial Exam Team nnIEXX | IEXX |
14 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Lapsed due to failure to pay maintenance feeLapsedFP | FP | |
| Lapse for failure to pay maintenance feesLapsedPATENT EXPIRED FOR FAILURE TO PAY MAINTENANCE FEES (ORIGINAL EVENT CODE: EXP.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITYLAPS | LAPS | |
| Information on status: patent discontinuationPATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362STCH | STCH | |
| Fee payment procedureMAINTENANCE FEE REMINDER MAILED (ORIGINAL EVENT CODE: REM.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITYFEPP | FEPP | |
| Maintenance fee paymentMAFP | MAFP | |
| Fee paymentFPAY | FPAY | |
| Certificate of correctionCC | CC | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| Fee payment procedurePAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITYFEPP | FEPP | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Publication
- 07805517
- Publication, DOCDB
- 7805517
- Publication, EPODOC
- US7805517
- Application
- 10941070
- Application, DOCDB
- 94107004
- Application, EPODOC
- US20040941070
Titles
- English
- System and method for load balancing a communications network
Patent term adjustment
- A delay
- +1,205 daysthe office missed an examination deadline
- B delay
- +800 dayspendency past three years
- Overlap
- −536 daysdelays counted once
- Applicant delay
- −43 days
- Net adjustment
- 1,426 days
Classification
- CPC, 3
- H04L67/1008
- H04L67/1012
- H04L67/1001
- IPC, 1
- G06F15 173
- USPC, 4
- 709227000
- 709205000
- 709226000
- 709229000