IP Library Granted Patent US 9,602,455
Granted Patent B2
US 9,602,455 · App. 15/067,476 · Granted Mar 21, 2017

Scalable, real-time messaging system

Inventors: Lev Walkin (Santa Clara, CA); Fredrik Erik Linder (Dublin, CA)
Assignee: Machine Zone, Inc.
H04L51/14H04L67/142
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 9,602,455
App. No.
15/067,476
Granted
Mar 21, 2017
Kind
B2
Abstract

Methods, systems, and apparatus, including computer programs encoded on a computer storage medium, for receiving a write request from a publisher comprising a channel name wherein the channel identified by the channel name comprises an ordered plurality of messages stored in buffers, each buffer having a predetermined time-to-live and being assigned to a respective node, identifying a first node and a first buffer stored on the first node based on the channel name of the request that has available storage for storing messages and wherein the first buffer has a time-to-live that has not expired, and sending a write grant to the publisher wherein the grant comprises identification of the first node and the first buffer, and wherein the publisher is configured to send messages to the first node for storage in the first buffer based on the grant until the first buffer is full or its time-to-live has expired.

Claims (54)

1. A computer-implemented method, comprising:

allocating a first buffer for storing messages associated with a channel, the first buffer residing on a first node;

granting a write request to a first publisher to write one or more messages to the first buffer;

granting a read request to a first subscriber to read one or more messages from the first buffer;

determining that the first buffer is no longer available for writing messages when the first buffer is full and, in response,

(i) selecting a second node from a plurality of nodes based on a respective workload for each node in the plurality of nodes; and

(ii) allocating a second buffer for storing messages associated with the channel, the second buffer residing on the second node;

granting a write request to a second publisher to write one or more messages to the second buffer;

granting a read request to a second subscriber to read one or more messages from the second buffer; and

determining that messages in the first buffer are no longer available for reading when a time-to-live for the first buffer has expired.

2. The method of claim 1 , wherein allocating the first buffer comprises assigning a time-to-live to the first buffer.

3. The method of claim 1 , wherein the first publisher and the second publisher are identical.

4. The method of claim 1 , wherein the first subscriber and the second subscriber are identical.

5. The method of claim 1 , wherein granting the write request to the first publisher comprises providing the first publisher with an identification of the first node and the first buffer.

6. The method of claim 1 , wherein the first publisher is configured to send one or more messages to the first node for storage in the first buffer.

7. The method of claim 1 , wherein granting the read request to the first subscriber comprises providing the first subscriber with an identification of the first node and the first buffer.

8. The method of claim 1 , wherein the first subscriber is configured to receive messages from the first buffer.

9. The method of claim 1 , wherein selecting the second node comprises identifying the second node as a least loaded node among the plurality of nodes.

10. The method of claim 1 , wherein the first node and the second node are different physical computers.

11. The method of claim 1 , further comprising maintaining a list of active buffers for the channel, each active buffer containing messages that are available to be read by one or more subscribers for the channel.

12. The method of claim 1 , further comprising identifying a third buffer stored on a third node and having a time-to-live that has expired and, based thereon, removing the third buffer.

13. The method of claim 1 , wherein granting the write request to the second publisher comprises allowing the first subscriber to continue reading messages from the first buffer.

14. The method of claim 1 , further comprising granting read requests to a plurality of subscribers to read one or more messages from the first buffer concurrently.

15. A system, comprising:

one or more computers programmed to perform operations comprising:

allocating a first buffer for storing messages associated with a channel, the first buffer residing on a first node;

granting a write request to a first publisher to write one or more messages to the first buffer;

granting a read request to a first subscriber to read one or more messages from the first buffer;

determining that the first buffer is no longer available for writing messages when the first buffer is full and, in response,

(i) selecting a second node from a plurality of nodes based on a respective workload for each node in the plurality of nodes; and

(ii) allocating a second buffer for storing messages associated with the channel, the second buffer residing on the second node;

granting a write request to a second publisher to write one or more messages to the second buffer;

granting a read request to a second subscriber to read one or more messages from the second buffer; and

determining that messages in the first buffer are no longer available for reading when a time-to-live for the first buffer has expired.

16. The system of claim 15 , wherein allocating the first buffer comprises assigning a time-to-live to the first buffer.

17. The system of claim 15 , wherein the first publisher and the second publisher are identical.

18. The system of claim 15 , wherein the first subscriber and the second subscriber are identical.

19. The system of claim 15 , wherein granting the write request to the first publisher comprises providing the first publisher with an identification of the first node and the first buffer.

20. The system of claim 15 , wherein the first publisher is configured to send one or more messages to the first node for storage in the first buffer.

21. The system of claim 15 , wherein granting the read request to the first subscriber comprises providing the first subscriber with an identification of the first node and the first buffer.

22. The system of claim 15 , wherein the first subscriber is configured to receive messages from the first buffer.

23. The system of claim 15 , wherein selecting the second node comprises identifying the second node as a least loaded node among the plurality of nodes.

24. The system of claim 15 , wherein the first node and the second node are different physical computers.

25. The system of claim 15 , the operations further comprising maintaining a list of active buffers for the channel, each active buffer containing messages that are available to be read by one or more subscribers for the channel.

26. A non-transitory computer-readable storage device having instructions stored thereon that, when executed by one or more computers, cause the computers to perform operations comprising:

allocating a first buffer for storing messages associated with a channel, the first buffer residing on a first node;

granting a write request to a first publisher to write one or more messages to the first buffer;

granting a read request to a first subscriber to read one or more messages from the first buffer;

determining that the first buffer is no longer available for writing messages when the first buffer is full and, in response,

(i) selecting a second node from a plurality of nodes based on a respective workload for each node in the plurality of nodes; and

(ii) allocating a second buffer for storing messages associated with the channel, the second buffer residing on the second node;

granting a write request to a second publisher to write one or more messages to the second buffer;

granting a read request to a second subscriber to read one or more messages from the second buffer; and

determining that messages in the first buffer are no longer available for reading when a time-to-live for the first buffer has expired.

Assignments (6)
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 →
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 Jun 16, 2016
From: WALKIN, LEV; LINDER, FREDRIK ERIK
To: MACHINE ZONE, INC.
Reel/Frame 038931/0558 →
Continuity (2)
Continuation 14821482 · Aug 7, 2015
Related Publication 20170041267A1 · Feb 9, 2017