IP Library Granted Patent US 12,197,758
Granted Patent B2
US 12,197,758 · App. 16/931,299 · Granted Jan 14, 2025

Distributed object replication architecture

Inventors: Abhinav Duggal (Milpitas, CA); Atul Avinash Karmarkar (San Jose, CA); Philip Shilane (Newtown, PA); Kevin Xu (Warren, NJ)
Assignee: EMC IP Holding Company LLC
G06F3/065G06F3/0604G06F3/0619G06F3/067G06F9/4881G06F2201/84
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 12,197,758
App. No.
16/931,299
Filed
Jul 16, 2020
Granted
Jan 14, 2025
Kind
B2
Art Unit
2162
USPC
707/634
Abstract

A source site includes a controller, a set of source worker nodes, and a message queue connected between the controller and source worker nodes. The message queue receives messages and stores the messages for retrieval. A destination site includes a set of destination worker nodes. Tasks are generated to replicate changes to objects at the source site to the destination site. The controller pushes messages corresponding to the tasks onto the message queue. A source worker node retrieves a message corresponding to a task from the message queue for processing in conjunction with a destination worker node. The message is indicated as having been retrieved from the message queue.

Claims (86)

1. A method comprising:

providing, at a source site, a controller, a plurality of source worker nodes, and a message queue, coupled between the controller and the plurality of source worker nodes, wherein the source site comprises an object storage system storing objects, the objects having been split into a plurality of segments;

providing, at a destination site, a plurality of destination worker nodes;

as objects are written to and deleted from the object storage system at the source site, maintaining a log listing, by user-generated names given to the objects, the objects that have been written to the object storage system at the source site and the objects that have been deleted from the object storage system at the source site;

upon starting a replication job, generating a set of tasks comprising tasks to replicate objects written to the object storage system at the source site to the destination site according to the log, and tasks to delete objects from the destination site that have been deleted from the object storage system at the source site according to the log;

pushing, by the controller, the tasks onto the message queue;

retrieving, by a first source worker node, a first task from the message queue for processing in conjunction with a first destination worker node;

when the first task is to delete an object from the destination site, making a remote procedure call (RPC) to the first destination worker node requesting that the object be deleted; and

when the first task is to replicate an object from the source to destination site,

determining which segments of the object exist at the destination site and which segments of the object do not exist at the destination site, the segments of the object not existing at the destination site thereby being missing segments; and

sending the missing segments of the object to the destination site,

wherein the object storage system storing objects at the source site comprises object recipes corresponding to the objects, each object recipe referencing one or more slice recipes, each slice recipe comprising a plurality of fingerprints corresponding to the segments into which an object has been split, and each fingerprint mapping to a respective segment, and

wherein replication of the object from the source to destination site further comprises:

issuing, to the first destination worker node, a query comprising a batch of slice recipes from an object recipe corresponding to the object to be replicated;

checking, by the first destination worker node, which segments of the object identified by fingerprints in the batch of slice recipes already exist at the destination site;

based on the checking, replying to the first source worker node with a listing of fingerprints from the batches of slice recipes, wherein the listing of fingerprints correspond to segments of the object that are missing at the destination site thereby allowing the first source worker node to retrieve and send the missing segments to the destination site; and

repeating the issuing a query comprising a batch of slice recipes until all slice recipes of the object recipe have been sent to the first destination worker node.

2. The method of claim 1 further comprising:

holding the tasks on the message queue for retrieval by the plurality of source worker nodes;

determining that a number of tasks on the message queue has reached a threshold limit; and

pausing the generating tasks and the pushing of the tasks onto the message queue while allowing the plurality of source worker nodes to continue retrieving tasks from the message queue, thereby freeing space on the message queue.

3. The method of claim 2 further comprising:

after the pausing, continuing the generating tasks and the pushing of the tasks onto the message queue.

4. The method of claim 1 further comprising

logging in a key-value store the batch of one or more slice recipes that the first source worker node has sent to the first destination worker node; and

upon a failure during the replication of the object, restarting the replication from a last logged position of the batch of one or more slice recipes that the first source worker node has sent to the first destination worker node according to the key-value store.

5. The method of claim 1 further comprising:

designating different controllers to handle different portions of a replication job, the replication job comprising replicating the changes to the objects at the source site to the destination site.

6. The method of claim 1 wherein names of the objects listed in the log comprise timestamps appended to the user-generated names indicating when the objects were written to the object storage system at the source site.

7. The method of claim 1 wherein the message queue resides in volatile memory.

8. The method of claim 1 wherein a cost of the replication job is subject to spot pricing and the method further comprises:

monitoring a price associated with renting a source working node, a destination worker node, or both;

when the price is above a user-configured threshold price, pausing the replication job; and

when the price falls below the user-configured threshold price, resuming the replication job.

9. A system for replicating data, the system comprising: a processor, and memory storing one or more sequences of instructions which, when executed by the processor, cause the processor to carry out the steps of:

providing, at a source site, a controller, a plurality of source worker nodes, and a message queue, coupled between the controller and the plurality of source worker nodes, wherein the source site comprises an object storage system storing objects, the objects having been split into a plurality of segments;

providing, at a destination site, a plurality of destination worker nodes;

as objects are written to and deleted from the object storage system at the source site, maintaining a log of the objects that have been written and the objects that have been deleted;

upon starting a replication job, generating a set of tasks comprising tasks to replicate objects written to the object storage system at the source site to the destination site according to the log, and tasks to delete objects from the destination site that have been deleted from the object storage system at the source site according to the log;

pushing, by the controller, the tasks onto the message queue;

retrieving, by a first source worker node, a first task from the message queue for processing in conjunction with a first destination worker node;

when the first task is to delete an object from the destination site, making a remote procedure call (RPC) to the first destination worker node requesting that the object be deleted; and

when the first task is to replicate an object from the source to destination site,

determining which segments of the object exist at the destination site and which segments of the object do not exist at the destination site, the segments of the object not existing at the destination site thereby being missing segments; and

sending the missing segments of the object to the destination site,

wherein the object storage system storing objects at the source site comprises object recipes corresponding to the objects, each object recipe referencing one or more slice recipes, each slice recipe comprising a plurality of fingerprints corresponding to the segments into which an object has been split, and each fingerprint mapping to a respective segment, and

wherein replication of the object from the source to destination site further comprises:

sending, by the first source worker node to the first destination worker node, one or more slice recipes from an object recipe corresponding to the object to be replicated, wherein the first destination worker node checks the fingerprints in the slice recipes against fingerprints of segments already existing at the destination site to determine which segments of the object are missing at the destination site;

logging in a key-value store the one or more slice recipes that the first source worker node has sent to the first destination worker node; and

upon a failure during the replication of the object, restarting the replication from a last logged position of the one or more slice recipes that the first source worker node has sent to the first destination worker node according to the key-value store.

10. The system of claim 9 wherein the processor further carries out the steps of:

holding the tasks on the message queue for retrieval by the plurality of source worker nodes;

determining that a number of tasks on the message queue has reached a threshold limit; and

pausing the generating tasks and the pushing of the tasks onto the message queue while allowing the plurality of source worker nodes to continue retrieving tasks from the message queue, thereby freeing space on the message queue.

11. The system of claim 10 wherein the processor further carries out the steps of:

after the pausing, continuing the generating tasks and the pushing of the tasks onto the message queue.

12. The system of claim 9 wherein the processor further carries out the steps of:

designating different controllers to handle different portions of a replication job, the replication job comprising replicating the changes to the objects at the source site to the destination site.

13. The system of claim 9 wherein names of the objects listed in the log comprise user-generated names given to the objects and timestamps appended to the user-generated names indicating when the objects were written to the object storage system at the source site.

14. A computer program product comprising a non-transitory computer-readable medium having a computer-readable program code embodied therein, the computer-readable program code adapted to be executed by one or more processors to implement a method comprising:

providing, at a source site, a controller, a plurality of source worker nodes, and a message queue, coupled between the controller and the plurality of source worker nodes, wherein the source site comprises an object storage system storing objects, the objects having been split into a plurality of segments;

providing, at a destination site, a plurality of destination worker nodes;

as objects are written to and deleted from the object storage system at the source site, maintaining a log of the objects that have been written and the objects that have been deleted;

upon starting a replication job, generating a set of tasks comprising tasks to replicate objects written to the object storage system at the source site to the destination site according to the log, and tasks to delete objects from the destination site that have been deleted from the object storage system at the source site according to the log;

pushing, by the controller, the tasks onto the message queue;

retrieving, by a first source worker node, a first message corresponding to a first task from the message queue for processing in conjunction with a first destination worker node;

when the first task is to delete an object from the destination site, making a remote procedure call (RPC) to the first destination worker node requesting that the object be deleted;

when the first task is to replicate an object from the source to destination site,

determining which segments of the object exist at the destination site and which segments of the object do not exist at the destination site, the segments of the object not existing at the destination site thereby being missing segments; and

sending the missing segments of the object to the destination site;

tracking a depth of the message queue; and

based on the depth of the message queue, adjusting a number of source worker nodes and a number of destination worker nodes.

15. The computer program product of claim 14 wherein the method further comprises:

holding the tasks on the message queue for retrieval by the plurality of source worker nodes;

determining that a number of tasks on the message queue has reached a threshold limit; and

pausing the generating tasks and the pushing of the tasks onto the message queue while allowing the plurality of source worker nodes to continue retrieving tasks from the message queue, thereby freeing space on the message queue.

16. The computer program product of claim 15 wherein the method further comprises:

after the pausing, continuing the generating tasks and the pushing of the tasks onto the message queue.

17. The computer program product of claim 14 wherein the object storage system storing objects at the source site comprises object recipes corresponding to the objects, each object recipe referencing one or more slice recipes, each slice recipe comprising a plurality of fingerprints corresponding to the segments into which an object has been split, and each fingerprint mapping to a respective segment, and

wherein replication of the object from the source to destination site further comprises:

sending, by the first source worker node to the first destination worker node, one or more slice recipes from an object recipe corresponding to the object to be replicated, wherein the first destination worker node checks the fingerprints in the slice recipes against fingerprints of segments already existing at the destination site to determine which segments of the object are missing at the destination site;

logging in a key-value store the one or more slice recipes that the first source worker node has sent to the first destination worker node; and

upon a failure during the replication of the object, restarting the replication from a last logged position of the one or more slice recipes that the first source worker node has sent to the first destination worker node according to the key-value store.

18. The computer program product of claim 14 wherein the method further comprises:

designating different controllers to handle different portions of a replication job, the replication job comprising replicating the changes to the objects at the source site to the destination site.

19. The computer program product of claim 14 wherein names of the objects listed in the log comprise user-generated names given to the objects and timestamps appended to the user-generated names indicating when the objects were written to the object storage system at the source site.

Assignments (9)
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053574/0221) Recorded Jun 10, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
Reel/Frame 060333/0001 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053578/0183) Recorded Jun 10, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
Reel/Frame 060332/0864 →
RELEASE OF SECURITY INTEREST IN PATENTS PREVIOUSLY RECORDED AT REEL/FRAME (053573/0535) Recorded Jun 10, 2022
From: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
To: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
Reel/Frame 060333/0106 →
RELEASE OF SECURITY INTEREST AT REEL 053531 FRAME 0108 Recorded Nov 2, 2021
From: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
To: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
Reel/Frame 058001/0371 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 6, 2020
From: DUGGAL, ABHINAV; KARMARKAR, ATUL AVINASH; SHILANE, PHILIP; XU, KEVIN
To: EMC IP HOLDING COMPANY LLC
Reel/Frame 054298/0297 →
SECURITY INTEREST Recorded Aug 21, 2020
From: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 053578/0183 →
SECURITY INTEREST Recorded Aug 21, 2020
From: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 053573/0535 →
SECURITY INTEREST Recorded Aug 21, 2020
From: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
To: THE BANK OF NEW YORK MELLON TRUST COMPANY, N.A., AS NOTES COLLATERAL AGENT
Reel/Frame 053574/0221 →
SECURITY AGREEMENT Recorded Aug 18, 2020
From: DELL PRODUCTS L.P.; EMC IP HOLDING COMPANY LLC
To: CREDIT SUISSE AG, CAYMAN ISLANDS BRANCH
Reel/Frame 053531/0108 →
Continuity (2)
Continuation 15887563 · Feb 2, 2018
Related Publication 20200348852A1 · Nov 5, 2020
References Cited (48)
US 1009125A · Zempliner · 1911 [cited by applicant]
US 6049809A · Raman · 2000 [cited by examiner]
US 6519571B1 · Guheen · 2003 [cited by applicant]
US 7277913B2 · Kashyap · 2007 [cited by applicant]
US 7653668B1 · Shelat · 2010 [cited by applicant]
US 8572290B1 · Mukhopadhyay · 2013 [cited by applicant]
US 8868514B2 · Lomet · 2014 [cited by applicant]
US 9171002B1 · Mam · 2015 [cited by examiner]
US 9990253B1 · Rajimwale · 2018 [cited by applicant]
US 10565230B2 · Zheng · 2020 [cited by examiner]
US 11089105B1 · Karumbunathan · 2021 [cited by examiner]
US 20050138306A1 · Panchbudhe · 2005 [cited by examiner]
US 20070043841A1 · Cannon · 2007 [cited by applicant]
US 20070177739A1 · Ganguly · 2007 [cited by applicant]
US 20090049054A1 · Wong · 2009 [cited by applicant]
US 20090132541A1 · Barsness · 2009 [cited by applicant]
US 20100037056A1 · Follis · 2010 [cited by applicant]
US 20100106808A1 · Ogus · 2010 [cited by applicant]
US 20110023046A1 · Gold · 2011 [cited by applicant]
US 20110099420A1 · MacDonald McAlister · 2011 [cited by applicant]
US 20110196882A1 · Kesselman · 2011 [cited by applicant]
US 20120054296A1 · Chaudhry · 2012 [cited by applicant]
US 20120089775A1 · Ranade · 2012 [cited by applicant]
US 20130152196A1 · Garg · 2013 [cited by applicant]
US 20130173539A1 · Gilder · 2013 [cited by applicant]
US 20140040182A1 · Gilder · 2014 [cited by applicant]
US 20140081916A1 · McAlister · 2014 [cited by applicant]
US 20140201363A1 · McAlister · 2014 [cited by applicant]
US 20140279884A1 · Dantkale · 2014 [cited by applicant]
US 20140344222A1 · Morris · 2014 [cited by applicant]
US 20150161048A1 · Patil · 2015 [cited by applicant]
US 20160026535A1 · Bhat · 2016 [cited by applicant]
US 20160048408A1 · Madhu · 2016 [cited by examiner]
US 20160188232A1 · Ramachandran · 2016 [cited by applicant]
US 20170013057A1 · Shani · 2017 [cited by applicant]
US 20170031776A1 · Ren · 2017 [cited by examiner]
US 20170032013A1 · Zheng · 2017 [cited by examiner]
US 20170075620A1 · Yamamoto · 2017 [cited by applicant]
US 20170154050A1 · Reimer · 2017 [cited by applicant]
US 20170185323A1 · Kaushik · 2017 [cited by applicant]
US 20170199893A1 · Aronovich · 2017 [cited by applicant]
US 20180004761A1 · Doherty · 2018 [cited by applicant]
US 20180011914A1 · Doherty · 2018 [cited by applicant]
US 20180270125A1 · Jain · 2018 [cited by examiner]
US 20180349178A1 · Painter · 2018 [cited by examiner]
US 20190026042A1 · Gupta · 2019 [cited by applicant]
US 20190073281A1 · Wicaksono · 2019 [cited by applicant]
Vamsi Chitters, et al., Aergia: Haskell Distributed In-Memory Key-Value Store, Mar. 18, 2016, pp. 1-7. [cited by applicant]