IP Library Granted Patent US 10,374,986
Granted Patent B2
US 10,374,986 · App. 15/244,380 · Granted Aug 6, 2019

Scalable, real-time messaging system

Inventors: Lev Walkin (Santa Clara, CA); Fredrik Erik Linder (Dublin, CA)
Assignee: SATORI WORLDWIDE, LLC
H04L51/04H04L51/14H04L67/1008
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,374,986
App. No.
15/244,380
Granted
Aug 6, 2019
Kind
B2
Abstract

Methods, systems, and apparatus, including computer programs encoded on a computer storage medium, for balancing loads in a publish-subscribe system. An example method includes: selecting a first hosting node from a plurality of hosting nodes based, at least in part, on a load data selected from at least one of node-specific data representing loads on the plurality of hosting nodes and channel-specific data representing a load associated with a channel; sending a request to the first hosting node to temporarily host a portion of a channel; temporarily hosting the channel portion by the first hosting node by temporarily storing one or more messages published to the channel, and temporarily providing, to a plurality of subscribers to the channel, access to the one of more messages; receiving a request to access the channel portion; and granting permission to access the channel portion.

Claims (70)

1. A load-balancing method for a publish-subscribe system, the load-balancing method comprising:

selecting, by one or more computer processors, a first hosting node from a plurality of hosting nodes based, at least in part, on load data comprising node-specific data representing loads on the plurality of hosting nodes and channel-specific data representing a load associated with a channel comprising a channel portion to be temporarily offloaded;

sending, by the one or more computer processors, a request to the first hosting node to temporarily host the channel portion of the channel, wherein the request to the first hosting node to temporarily host the channel portion comprises an indication for one or more messages published to the channel to be temporarily stored and for access to the one or more messages to be temporarily provided to a plurality of subscribers, and wherein the one or more messages were previously stored on a second hosting node;

receiving a request to access the channel portion; and

granting permission to access the channel portion.

2. The load-balancing method of claim 1 , wherein the node-specific data comprises one or more load metrics selected from at least one of: a number of channel portions being temporarily hosted by the respective hosting nodes, a number of interface nodes having permission to access the respective hosting nodes, a data reception rate of the respective hosting nodes, a data transmission rate of the respective hosting nodes, a storage utilization of the respective hosting nodes, or a processing rate of the respective hosting nodes.

3. The load-balancing method of claim 1 , further comprising:

receiving at least a portion of the node-specific data from the plurality of hosting nodes.

4. The load-balancing method of claim 1 , further comprising:

determining at least a portion of the node-specific data based, at least in part, on received requests to access the channel portion and on permissions granted to access the channel portion.

5. The load-balancing method of claim 1 , wherein the channel-specific data comprises one or more load metrics selected from at least one of: a number of subscribers to the channel, a number of publishers to the channel, a rate at which messages are published to the channel, a rate at which messages are read from the channel, a number of interface nodes having permission to access the channel, or a channel portion size for the channel.

6. The load-balancing method of claim 1 , further comprising:

receiving at least a portion of the channel-specific data from at least one of a hosting node or an interface node.

7. The load-balancing method of claim 1 , wherein selecting the first hosting node from the plurality of hosting nodes based, at least in part, on the load data comprises:

determining, based at least in part on the node-specific data, that a load on the first hosting node is lowest among respective loads on the hosting nodes; and

selecting the first hosting node based, at least in part, on the determination.

8. The load-balancing method of claim 1 , wherein selecting the first hosting node from the plurality of hosting nodes based, at least in part, on the load data comprises:

determining, based at least in part on the node-specific data, that a load on the first hosting node is below a threshold load level; and

selecting the first hosting node based, at least in part, on the determination.

9. The load-balancing method of claim 1 , wherein selecting the first hosting node from the plurality of hosting nodes based, at least in part, on the load data comprises:

determining, based at least in part on a portion of the node-specific data corresponding to the first hosting node and on a portion of the channel-specific data corresponding to the channel, an expected load on the first hosting node that would result from the first hosting node hosting the portion of the channel;

determining that the expected load on the first hosting node is below a threshold load level; and

selecting the first hosting node based, at least in part, on the determination that the expected load on the first hosting node is below the threshold load level.

10. The load-balancing method of claim 1 , wherein the channel portion comprises a first portion of the channel, wherein the channel further comprises a second channel portion, and wherein selecting the first hosting node from the plurality of hosting nodes based, at least in part, on the load data comprises:

determining that the first hosting node hosts the second channel portion;

determining that a load on the first hosting node is below a threshold load level; and

selecting the first hosting node based, at least in part, on the determinations that the first hosting node hosts the second channel portion and that the load on the first hosting node is below the threshold load level.

11. The load-balancing method of claim 1 , wherein the Channel portion comprises a first portion of the channel, wherein the channel further comprises a second channel portion, and wherein selecting the first hosting node from the plurality of hosting nodes based, at least in part, on the load data comprises:

determining that the second hosting node hosts the second channel portion;

determining that a load on the second hosting node is above a threshold load level;

determining that a load on the first hosting node is below the threshold load level; and

selecting the first hosting node based, at least in part, on the determinations that the load on the second hosting node is above the threshold load level and that the load on the first hosting node is below the threshold load level.

12. The load-balancing method of claim 1 , wherein selecting the first hosting node from the plurality of hosting nodes based, at least in part, on the load data comprises:

determining, based at least in part on a portion of the channel-specific data, an expected load associated with hosting the channel portion;

determining, based at least in part on the node-specific data and on the expected load associated with hosting the channel portion, that hosting the channel portion on the first hosting node would reduce inequality of load distribution among the hosting nodes; and

selecting the first hosting node based, at least in part, on the determination that hosting the channel portion on the first hosting node would reduce inequality of load distribution among the hosting nodes.

13. A computing device, comprising:

a channel manager node operable to:

select a first hosting node from a plurality of hosting nodes based, at least in part, on load data comprising node-specific data representing loads on the plurality of hosting nodes and channel-specific data representing a load associated with a channel comprising a channel portion to be temporarily offloaded;

send a request to the first hosting node to temporarily host the channel portion of the channel, wherein the request to the first hosting node to temporarily host the channel portion comprises an indication for one or more messages published to the channel to be temporarily stored and for access to the one or more messages to be temporarily provided to a plurality of subscribers to the channel, and wherein the one or more messages were previously stored on a second hosting node;

receive, from an interface node, a request to access the channel portion; and

grant, to the interface node, permission to access the channel portion.

14. The computing device of claim 13 , wherein to select the first hosting node from the plurality of hosting nodes based, at least in part, on the load data the channel manager node is further to:

determine, based at least in part on the node-specific data, that a load on the first hosting node is lowest among respective loads on the hosting nodes; and

select the first hosting node based, at least in part, on the determination.

15. The computing device of claim 13 , wherein to select the first hosting node from the plurality of hosting nodes based, at least in part, on the load data the channel manager node is further to:

determine, based at least in part on the node-specific data, that a load on the first sting node is below a threshold load level; and

select the first hosting node based, at least in part, on the determination.

16. The computing device of claim 13 , wherein to select the first hosting node from the plurality of hosting nodes based, at least in part, on the load data the channel manager node is further to:

determine, based at least in part on a portion of the node-specific data corresponding to the first hosting node and on a portion of the channel-specific data corresponding to the channel, an expected load on the first hosting node that would result from the first hosting node hosting the portion of the channel;

determine that the expected load on the first hosting node is below a threshold load level; and

select the first hosting node based, at least in part, on the determination that the expected load on the first hosting node is below the threshold load level.

17. The computing device of claim 13 , wherein the channel portion comprises a first portion of the channel, wherein the channel further comprises a second channel portion, and wherein to select the first hosting node from the plurality of hosting nodes based, at least in part, on the load data the channel manager node is further to:

determine that the first hosting node hosts the second channel portion;

determine that a load on the first hosting node is below a threshold load level; and

select the first hosting node based, at least in part, on the determinations that the first hosting node hosts the second channel portion and that the load on the first hosting node is below the threshold load level.

18. The computing device of claim 13 , wherein the channel portion comprises a first portion of the channel, wherein the channel further comprises a second channel portion, and wherein to select the first hosting node from the plurality of hosting nodes based, at least in part, on the load data the channel manager node is further to:

determine that the second hosting node hosts the second channel portion;

determine that a load on the second hosting node is above a threshold load level;

determine that a load on the first hosting node is below the threshold load level; and

select the first hosting node based, at least in part, on the determinations that the load on the second hosting node is above the threshold load level and that the load on the first hosting node is below the threshold load level.

19. The computing device of claim 13 , wherein to select the first hosting node from the plurality of hosting nodes based, at least in part, on the load data the channel manager node is further to:

determine, based at least in part on a portion of the channel-specific data, an expected load associated with hosting the channel portion;

determine, based at least in part on the node-specific data and on the expected load associated with hosting the channel portion, that hosting the channel portion on the first hosting node would reduce inequality of load distribution among the hosting nodes; and

select the first hosting node based, at least in part, on the determination that hosting the channel portion on the first hosting node would reduce inequality of load distribution among the hosting nodes.

20. A non-transitory machine-readable medium having instructions stored thereon that, when executed by one or more computer processors, cause the one or more computer processors to:

select a first hosting node from a plurality of hosting nodes based, at least in part, on load data comprising node-specific data representing loads on the plurality of hosting nodes and channel-specific data representing a load associated with a channel comprising a channel portion to be temporarily offloaded;

send, to the first hosting node, a request to temporarily host the channel portion of the channel, wherein the request to the first hosting node to temporarily host the channel portion comprises an indication for one or more messages published to the channel to be temporarily stored and for access to the one or more messages to be temporarily provided to a plurality of subscribers, and wherein the one or more messages were previously stored on a second hosting node;

receive a request to access the channel portion; and

grant permission to access the channel portion.

Assignments (7)
RELEASE OF SECURITY INTEREST Recorded May 19, 2020
From: COMERICA BANK
To: SATORI WORLDWIDE, LLC
Reel/Frame 052707/0769 →
RELEASE OF SECURITY INTEREST Recorded May 19, 2020
From: MGG INVESTMENT GROUP LP, AS COLLATERAL AGENT
To: MACHINE ZONE, INC.; SATORI WORLDWIDE, LLC; COGNANT LLC
Reel/Frame 052706/0917 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 24, 2019
From: WALKIN, LEV; LINDER, FREDRIK ERIK
To: MACHINE ZONE, INC.
Reel/Frame 049567/0905 →
SECURITY INTEREST Recorded May 22, 2018
From: SATORI WORLDWIDE, LLC
To: COMERICA BANK
Reel/Frame 046215/0159 →
NOTICE OF SECURITY INTEREST -- PATENTS Recorded Feb 2, 2018
From: MACHINE ZONE, INC.; SATORI WORLDWIDE, LLC; COGNANT LLC
To: MGG INVESTMENT GROUP LP, AS COLLATERAL AGENT
Reel/Frame 045237/0861 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 13, 2017
From: MACHINE ZONE, INC.
To: SATORI WORLDWIDE, LLC
Reel/Frame 044428/0652 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 3, 2016
From: WALKIN, LEV; LINDER, FREDRIK ERIK
To: MACHINE ZONE, INC.
Reel/Frame 040208/0025 →
Continuity (1)
Related Publication 20180063039A1 · Mar 1, 2018