IP Library Granted Patent US 11,089,100
Granted Patent B2
US 11,089,100 · App. 15/405,095 · Granted Aug 10, 2021

Link-server caching

Inventors: J. T. Olds (Salt Lake City, UT); George Shank (Salt Lake City, UT); Alen Peacock (Orem, UT); Andrew Harding (American Fork, UT); Jeff Wendling (West Jordan, UT); Ethan Ransom (Orem, UT); Mikhail Strizhov (Salt Lake City, UT); Erik Nolte (Salt Lake City, UT); Dan Willoughby (Kaysville, UT); Eric Wollesen (Draper, UT)
Assignee: Vivint, Inc.
H04L67/1097H04L63/083H04L67/06H04L67/2833H04L67/2842H04L63/0435H04L67/42
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 11,089,100
App. No.
15/405,095
Granted
Aug 10, 2021
Kind
B2
Abstract

A computer system for optimizing bandwidth usage within a cloud storage system identifies distinct requests to access a particular digital file. When the number of requests exceeds a threshold, the computer system queries a remote directory server for the particular digital file. The query system then receives, from the remote directory server, addresses to data blocks stored within multiple remote storage nodes. The system requests at least a portion of the addressed data blocks. Upon receiving the blocks, the system decodes the particular digital file from the portion of the addressed data blocks. The computer system then stores the decoded digital file within local memory and communicates the local-area network address to the remote directory server.

Claims (82)

1. A computer system for optimizing bandwidth usage within a local-network, comprising:

one or more processors; and

one or more computer-readable media having stored thereon executable instructions that when executed by the one or more processors configure the computer system to perform at least the following:

identify, within a local-area network, one or more distinct requests to access a particular digital file, wherein:

each distinct request is associated with a different user device, and

the particular digital file is composed of multiple data blocks that are independently stored in multiple remote storage nodes, wherein the multiple remote storage nodes are remote to each other;

generate per-remote-storage-node thresholds for at least a portion of the multiple remote storage nodes, wherein a particular remote storage node selected from the multiple remote storage nodes is associated with a particular per-remote-storage-node threshold that is different than the per-remote-storage-node thresholds associated with at least one other remote storage node selection from the multiple remote storage nodes;

when a number of the one or more distinct requests exceeds the particular per-remote-storage-node threshold for the particular remote storage node, query a remote directory server for the particular digital file;

receive, from the remote directory server, addresses to the multiple data blocks stored within the multiple remote storage nodes, including at least the particular remote storage node;

identify a set of slower storage nodes, including at least the particular remote storage node, selected from the multiple remote storage nodes, that are associated with slower connection speeds relative to the other remote storage nodes within the multiple remote storage nodes, wherein the set of slower storage nodes comprise a particular set of data blocks from within the multiple data blocks;

request, from the set of slower storage nodes, including at least the particular remote storage node, the particular set of data blocks;

decode the particular digital file from the particular set of data blocks, wherein decoding the particular digital file comprises rebuilding at least a portion of the particular digital file using parity information associated with the particular set of data blocks; and

store the decoded digital file within local memory, wherein:

the local memory is located within the local-area network, and

the decoded digital file is associated with a local-area network address.

2. The computer system as recited in claim 1 , wherein the executable instructions include instructions that are executable to configure the computer system to:

receive a request to access the particular digital file from one or more user devices; and

transmit the particular digital file to the one or more user devices.

3. The computer system as recited in claim 1 , wherein the executable instructions include instructions that are executable to configure the computer system to:

store the particular set of data blocks within local memory;

receive a request from a first user device to download a first subset of the multiple data blocks;

identify the first subset within the particular set of data blocks; and

transmit the first subset of the particular set of data blocks to the first user device.

4. The computer system as recited in claim 3 , wherein:

the first user device initially downloaded a second subset of the multiple data blocks from the multiple remote storage nodes; and

data blocks within the second subset being exclusive from the one or more addressed data blocks of the first subset.

5. The computer system as recited in claim 1 , wherein the digital file is decoded using a Reed-Solomon algorithm.

6. The computer system as recited in claim 1 , wherein the remote directory server tracks versions associated with each block of data that is stored at each remote storage node.

7. The computer system as recited in claim 6 , wherein the received addresses exclude data blocks associated with outdated versions.

8. The computer system as recited in claim 1 , wherein the executable instructions include instructions that are executable to configure the computer system to:

after decoding the digital file, access a locally stored encryption key, and

decrypt the digital file.

9. The computer system as recited in claim 1 , wherein the executable instructions include instructions that are executable to configure the computer system to:

receive only a portion of the requested data blocks from the remote storage nodes; and

recover the entire digital file using error-correction coding associated with the received portion of the requested data blocks.

10. The computer system as recited in claim 9 , wherein the executable instructions include instructions that are executable to configure the computer system to:

communicate an authentication credential to an account management server, and

after being authenticated at the account management server, receive a credential necessary for accessing the remote directory server.

11. The computer system as recited in claim 1 , wherein at least a portion of the remote storage nodes comprise home-based computing devices that are each disposed within different respective houses.

12. A computer-implemented method for optimizing bandwidth usage within a local-network, comprising:

identifying, within a local-area network, one or more distinct requests to access a particular digital file, wherein:

each distinct request is associated with a different user device, and

the particular digital file is composed of multiple data blocks that are independently stored in multiple remote storage nodes, wherein the multiple remote storage nodes are remote to each other;

generating per-remote-storage-node thresholds for at least a portion of the multiple remote storage nodes, wherein a particular remote storage node selected from the multiple remote storage nodes is associated with a particular per-remote-storage-node threshold that is different than the per-remote-storage-node thresholds associated with at least one other remote storage node selection from the multiple remote storage nodes;

when a number of the one or more distinct requests exceeds the particular per-remote-storage-node threshold for the particular remote storage node, querying a remote directory server for the particular digital file;

receiving, from the remote directory server, addresses to the multiple data blocks stored within the multiple remote storage nodes, including at least the particular remote storage node;

identifying a set of slower storage nodes, including at least the particular remote storage node, selected from the multiple remote storage nodes, that are associated with slower connection speeds relative to the other remote storage nodes within the multiple remote storage nodes, wherein the set of slower storage nodes comprise a particular set of data blocks from within the multiple data blocks;

requesting, from the set of slower storage nodes, including at least the particular remote storage node, the particular set of data blocks;

storing the particular set of data blocks within local memory, wherein:

the local memory is located within the local-area network, and

the particular set of data blocks are associated with a local-area network address; and

communicating the local-area network address to the remote directory server.

13. The computer-implemented method as recited in claim 12 , further comprising:

receiving a request to access the particular digital file from one or more user devices; and

transmitting the particular digital file to the one or more user devices.

14. The computer-implemented method as recited in claim 12 , further comprising:

storing the particular set of data blocks within local memory;

receiving a request from a first user device to download a first subset of the multiple data blocks;

identifying the first subset within the particular set of data blocks; and

transmitting the first subset of the particular set of data blocks to the first user device.

15. The computer-implemented method as recited in claim 14 , wherein:

the first user device initially downloaded a second subset of the multiple data blocks from the multiple remote storage nodes; and

data blocks within the second subset being exclusive from the one or more addressed data blocks of the first subset.

16. The computer-implemented method as recited in claim 12 , wherein the digital file is decoded using a Reed-Solomon algorithm.

17. The computer-implemented method as recited in claim 12 , wherein the remote directory server tracks versions associated with each block of data that is stored at each remote storage node.

18. The computer-implemented method as recited in claim 17 , wherein the received addresses exclude data blocks associated with outdated versions.

19. The computer-implemented method as recited in claim 12 , further comprising:

after decoding the digital file, accessing a locally stored encryption key, and

decrypt the digital file.

20. A computer program product for use at a computer system, the computer program product for optimizing bandwidth usage within a local-network, the computer program product comprising one or more non-transitory computer hardware storage media having stored thereon computer-executable instructions that, when executed at a processor, cause the computer system to perform the method, including the following:

identifying, within a local-area network, one or more distinct requests to access a particular digital file, wherein:

each distinct request is associated with a different user device, and

the particular digital file is composed of multiple data blocks that are independently stored in multiple remote storage nodes, wherein the multiple remote storage nodes are remote to each other;

generating per-remote-storage-node thresholds for at least a portion of the multiple remote storage nodes, wherein a particular remote storage node selected from the multiple remote storage nodes is associated with a particular per-remote-storage-node threshold that is different than the per-remote-storage-node thresholds associated with at least one other remote storage node selection from the multiple remote storage nodes;

when a number of the one or more distinct requests exceeds the particular per-remote-storage-node threshold for the particular remote storage node, querying a remote directory server for the particular digital file;

receiving, from the remote directory server, addresses to the multiple data blocks stored within the multiple remote storage nodes, including at least the particular remote storage node;

identifying a set of slower storage nodes, including at least the particular remote storage node, selected from the multiple remote storage nodes, that are associated with slower connection speeds relative to the other remote storage nodes within the multiple remote storage nodes, wherein the set of slower storage nodes comprise a particular set of data from within the multiple data blocks;

requesting, from the set of slower storage nodes, including at least the particular remote storage node, the particular set of data;

storing the decoded particular set of data within local memory, wherein:

the local memory is located within the local-area network, and

the particular set of data is associated with a local-area network address; and

communicating the local-area network address to the remote directory server.

Assignments (10)
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENTS RECORDED AT REEL 049283, FRAME 0566 Recorded Nov 11, 2024
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: VIVINT, INC.
Reel/Frame 069334/0137 →
RELEASE (REEL 047029/ FRAME 0304) Recorded Nov 1, 2024
From: BANK OF AMERICA, N.A.
To: VIVINT LLC (F/K/A VIVINT, INC.)
Reel/Frame 069289/0468 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 9, 2022
From: PANDO TECHNOLOGIES, INC.
To: STORJ LABS INTERNATIONAL SEZC
Reel/Frame 060762/0834 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 11, 2022
From: VIVINT, INC.
To: PANDO TECHNOLOGIES, INC.
Reel/Frame 059565/0691 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 19, 2021
From: PEACOCK, ALEN; RANSOM, ETHAN; STRIZHOV, MIKHAIL; NOLTE, ERIK
To: VIVINT, INC.
Reel/Frame 056898/0500 →
RELEASE OF SECURITY INTEREST Recorded Jul 12, 2021
From: BANK OF AMERICA, N.A.
To: VIVINT, INC.
Reel/Frame 056832/0824 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 7, 2021
From: WILLOUGHBY, DAN
To: VIVINT, INC.
Reel/Frame 056776/0583 →
SECURITY AGREEMENT Recorded May 23, 2019
From: VIVINT, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 049283/0566 →
SUPPL. NO. 2 SECURITY AGREEMENT Recorded Sep 6, 2018
From: VIVINT, INC.
To: BANK OF AMERICA N.A.
Reel/Frame 047024/0048 →
SECURITY AGREEMENT Recorded Sep 6, 2018
From: VIVINT, INC.
To: BANK OF AMERICA, N.A.
Reel/Frame 047029/0304 →
Continuity (1)
Related Publication 20180198862A1 · Jul 12, 2018