Patent Description:
The present application generally relates to data storage, including but not limited to systems and methods for managing storage of data of a user across a plurality of third-party public storage service providers.

Data may be stored and maintained on a data storage managed by a file hosting service. The data storage may span multiple servers distributed across multiple locations. A user on a client in one location may upload the data onto the data storage of a server located in a different location. <CIT> discloses a system for vendor independent and secure cloud storage distribution and aggregation. <CIT> discloses a scalable approach to manage storage volumes across heterogeneous cloud systems. <CIT> discloses a method for selecting data nodes for storing an object and its replicas in a cloud storage system. <CIT> discloses a location based selection of storage places for mirrored data.

A data storage service provider may administer and maintain a multitude of data storage units. Each data storage unit may be operated from one or more servers managed by the data storage service provider. In cloud-based data storage systems, the data storage units may be emulated using a virtualized infrastructure, with a data storage unit implemented over multiple physical servers. The servers may be physically distributed across a variety of locations around the world. A user on a client located in one location may access the data storage unit to upload new data for remote storage or retrieve stored data for use. With more and more users spread throughout different locations and regions accessing such data storage units, the data storage service providers may experience more severe strains in allocation of computing resources and may become more vulnerable to security lapses. For one, a number of users in a certain region may dramatically increase unexpected. For another, the physical data center infrastructure serving users may be located remote form the client and may depend on network connections through multiple regions.

The culmination of these factors may lead to degradation in performance of the services supported by the data storage service providers, giving rise to at least three difficult problems. First, the data storage service provider may have difficulty in anticipating user demand in services. The demand and usage of the services supported by the data storage service provider may be dynamic, and may increase or decrease much faster than expected. To ensure quality of service, the data storage service provider may set aside redundant storage capacity at all times, with excess underutilized computing capacity during low demand. As a result, there may be a sub-optimal allocation of computing resources to handle the fluctuations in user demand. Secondly, it may be challenging for the data storage service provider to prevent security lapses to the data center. Malevolent parties may attempt to exploit system vulnerabilities in the software (e.g., application, operating system, and hypervisor) as well as in the hardware (e.g., processor and memory) of the data storage service provider. Any defect in the software or hardware may result in leakage of user data. Because the data center infrastructure may be spread across multiple locations, the number of potential vulnerabilities may increase. Thirdly, user experience of the data storage service provider may worsen from a slowdown in services. For users located in a region different from the physical data center, the experience may be highly dependent on connectivity and speed of the network connections between the client of the user and the servers in the data center. This issue may be exacerbated when the communications traverse through a several networks from the client and the servers.

To surmount the technical challenges faced by data storage service providers, the present systems and methods may provide a robust, secured, elastic cloud storage access. A storage service may leverage an enterprise data storage service provider as well as third-party data service providers to increase an amount of potentially allocable storage capacity. The third-party data service providers may include public cloud storage service providers as virtual storage vectors. The storage service may coordinate the enterprise data storage provider and the third-party data service providers as a storage bundle. For any user of the storage service, the data from the user may be stored in a storage bundle and may be distributed to each storage vector in the backend. The data in the storage bundle distributed across the storage vectors may be in accordance with a redundant array of independent disks (RAID) configuration (e.g., at RAID level <NUM>). The data in this configuration may be encrypted, and may not be used directly as a result. In addition, as the physical infrastructure of each data service provider may be configured differently, the likelihood of breaching the security protection of the user data may be reduced, as a malevolent entity would have to successfully contravene each of the infrastructures to access the data. Furthermore, as the cloud storage vectors may have physical infrastructure located across the globe in different regions, the number of networks traversed between the client of the user and the nearest data center may be reduced. As a consequence, the end user access to the storage bundle may be faster and more reliable. Additionally, if any of the third-party storage service providers becomes out of service, the storage vector thereon may be migrated to another vector, thereby allowing data to be restored quickly.

Schematically, the storage service may have a policy manager to determine whether to provide the user access to the third-party storage service provider based on a user profile for the user. The user profile may include a physical location of the user, a requested storage size, and user settings, among others. If the location of the user is the same as the location of the storage service, the policy manager may serve the user directly. If the storage service is close to or out of capacity, the policy manager may select one of the third-party storage service providers. Moreover, if the location of the user differs from the location of the storage service, the policy manager may select one of the third-party storage service providers to serve the user to leverage an external storage vector. The storage service may include an access controller to interface the storage service with the third-party storage service providers. When one of the third-party storage service providers is selected, the access controller may again access to the third-party storage service provider using authentication credentials of the user. The access control may maintain the authentication credentials for the user across the third-party storage service providers.

In addition, the storage service may also have a storage manager to read and write to the storage vectors in the third-party storage service providers. Having obtained access to the third-party storage service provider via the authentication credentials of the user, the storage manager may read from and write to the storage vectors of the third-party storage service provider. To write new data onto the storage vector, the storage manager may encrypt the data and split the data into portions to distribute across the storage vectors of the third-party storage service provider. To read data from the storage vector, the storage manager may retrieve the storage vectors of the third-party storage service provider and assemble the data from the storage vectors. The storage manager may also read from and write to storage vectors of the enterprise storage service. In addition, the storage service may further include an exception handler to perform countermeasures to any unavailability among the third-party storage service providers. The exception handler may detect an outage in a storage vector or removal of the third-party service provider. Upon detection, the exception handler may move the content on the storage vector or maintained by the third-party service provider to another storage vector.

There is provided a method according to claim <NUM>. Further, at least one aspect of this disclosure is directed to a method of managing storage of data of a user across a plurality of third party public storage service providers. A storage service may receive a request to store data by a user. The storage service may communicate with a plurality of third party public storage service providers and may maintain a plurality of storage vectors for each of the plurality of third party public storage service providers. The storage service may identify a policy for the user. The policy may specify usage of one or more of the plurality of third party public storage service providers based at least on a profile of the user. The storage service may determine, based at least on the policy, one or more third party public storage service providers of the plurality of third party public storage service providers to use to store the data of the user. The storage service may store a first portion of the data to a first storage vector of a first third party public storage service provider of the one or more third party public storage service providers. The storage service may store a second portion of the data to one of a second storage vector of a second third party public storage service provider of the one or more third party public storage service providers or a storage of the storage service.

In some embodiments, a storage vector of the plurality of storage vectors may identify one of a location, address or a size of a unit of storage of a respective third party public storage service provider. In some embodiments, identifying the policy for the user may include identifying from the profile of the user one of a location of the user, storage size assigned to or requested by the user, or preferences of the user. In some embodiments, determining the one or more third party public storage service providers may include selecting a third party public storage service provider from the plurality of third party public storage service providers based at least on the location of the user. In some embodiments, one of the first portion of the data or the second portion of the data may include one of striped data or mirrored data in association with a respective redundant array of independent disk (RAID) level.

In some embodiments, the storage service may obtain one of authentication credentials or an address for one of the first storage vector or the second storage vector. In some embodiments, the storage service may store the first portion of the data in encrypted form to the first storage vector and the second portion of the data in encrypted form to the second storage vector. In some embodiments, the storage service may store the data across different storage vectors across the one or more third party public storage service providers. In some embodiments, the storage service may receive a second request to access the data and responsive to the second request identifying the storage vectors for the data. In some embodiments, the storage service may obtain different portions of the data across the storage vectors of the one or more third party public storage service providers and combining the different portions of the data to provide as a response to the second request.

There is also provided a system according to claim <NUM>. Further, at least one aspect of this disclosure is directed to a system for managing storage of data of a user across a plurality of third party public storage service providers. The system may include a storage service executable on one or more processors and coupled memory. The storage service may communicate with a plurality of third party public storage service providers and maintain a plurality of storage vectors for each of the plurality of third party public storage service providers. The storage service may receive a request to store data by a user. The storage service may identify a policy for the user. The policy may specify usage of one of more of the plurality of third party public storage service providers based at least on a profile of the user. The storage service may determine, based at least on the policy, one or more third party public storage service providers of the plurality of third party public storage service providers to use to store the data of the user. The storage service may store a first portion of the data to a first storage vector of a first third party public storage service provider of the one or more third party public storage service providers. The storage service may store a second portion of the data to one of a second storage vector of a second third party public storage service provider of the one or more third party public storage service providers or a storage of the storage service.

In some embodiments, a storage vector of the plurality of storage vectors may identify one of a location, address or a size of a unit of storage of a respective third party public storage service provider. In some embodiments, the profile of the user may identify one of a location of the user, storage size assigned to or requested by the user, or preferences of the user. According to the invention, the storage service selects a third party public storage service provider from the plurality of third party public storage service providers based at least on the location of the user. In some embodiments, one of the first portion of the data or the second portion of the data comprises one of striped data or mirrored data in association with a respective redundant array of independent disk (RAID) level.

The foregoing and other objects, aspects, features, and advantages of the present solution will become more apparent and better understood by referring to the following description taken in conjunction with the accompanying drawings, in which:.

The features and advantages of the present solution will become more apparent from the detailed description set forth below when taken in conjunction with the drawings, in which like reference characters identify corresponding elements throughout.

For purposes of reading the description of the various embodiments below, the following descriptions of the sections of the specification and their respective contents may be helpful:.

Prior to discussing the specifics of embodiments of the systems and methods detailed herein in Section B, it may be helpful to discuss the computing environments in which such embodiments may be deployed.

As shown in <FIG>, computer <NUM> may include one or more processors <NUM>, volatile memory <NUM> (e.g., random access memory (RAM)), non-volatile memory <NUM> (e.g., one or more hard disk drives (HDDs) or other magnetic or optical storage media, one or more solid state drives (SSDs) such as a flash drive or other solid state storage media, one or more hybrid magnetic and solid state drives, and/or one or more virtual storage volumes, such as a cloud storage, or a combination of such physical storage volumes and virtual storage volumes or arrays thereof), user interface (UI) <NUM>, one or more communications interfaces <NUM>, and communication bus <NUM>. User interface <NUM> may include graphical user interface (GUI) <NUM> (e.g., a touchscreen, a display, etc.) and one or more input/output (I/O) devices <NUM> (e.g., a mouse, a keyboard, a microphone, one or more speakers, one or more cameras, one or more biometric scanners, one or more environmental sensors, one or more accelerometers, etc.). Non-volatile memory <NUM> stores operating system <NUM>, one or more applications <NUM>, and data <NUM> such that, for example, computer instructions of operating system <NUM> and/or applications <NUM> are executed by processor(s) <NUM> out of volatile memory <NUM>. In some embodiments, volatile memory <NUM> may include one or more types of RAM and/or a cache memory that may offer a faster response time than a main memory. Data may be entered using an input device of GUI <NUM> or received from I/O device(s) <NUM>. Various elements of computer <NUM> may communicate via one or more communication buses, shown as communication bus <NUM>.

Computer <NUM> as shown in <FIG> is shown merely as an example, as clients, servers, intermediary and other networking devices and may be implemented by any computing or processing environment and with any type of machine or set of machines that may have suitable hardware and/or software capable of operating as described herein. Processor(s) <NUM> may be implemented by one or more programmable processors to execute one or more executable instructions, such as a computer program, to perform the functions of the system. As used herein, the term "processor" describes circuitry that performs a function, an operation, or a sequence of operations. The function, operation, or sequence of operations may be hard coded into the circuitry or soft coded by way of instructions held in a memory device and executed by the circuitry. A "processor" may perform the function, operation, or sequence of operations using digital values and/or using analog signals. In some embodiments, the "processor" can be embodied in one or more application specific integrated circuits (ASICs), microprocessors, digital signal processors (DSPs), graphics processing units (GPUs), microcontrollers, field programmable gate arrays (FPGAs), programmable logic arrays (PLAs), multi-core processors, or generalpurpose computers with associated memory. The "processor" may be analog, digital or mixed-signal. In some embodiments, the "processor" may be one or more physical processors or one or more "virtual" (e.g., remotely located or "cloud") processors. A processor including multiple processor cores and/or multiple processors multiple processors may provide functionality for parallel, simultaneous execution of instructions or for parallel, simultaneous execution of one instruction on more than one piece of data.

Communications interfaces <NUM> may include one or more interfaces to enable computer <NUM> to access a computer network such as a Local Area Network (LAN), a Wide Area Network (WAN), a Personal Area Network (PAN), or the Internet through a variety of wired and/or wireless or cellular connections.

In described embodiments, the computing device <NUM> may execute an application on behalf of a user of a client computing device. For example, the computing device <NUM> may execute a virtual machine, which provides an execution session within which applications execute on behalf of a user or a client computing device, such as a hosted desktop session. The computing device <NUM> may also execute a terminal services session to provide a hosted desktop environment. The computing device <NUM> may provide access to a computing environment including one or more of: one or more applications, one or more desktop applications, and one or more desktop sessions in which one or more applications may execute.

Additional details of the implementation and operation of network environment, computer <NUM> and client and server computers may be as described in <CIT> of Fort Lauderdale, FL,.

Referring now to <FIG>, depicted is a block diagram of an example embodiment of a system <NUM> for managing storage of data of a user across a plurality of third-party public storage service providers. In overview, the system <NUM> may include one or more clients 205A-N (hereinafter generally referred to as client <NUM>), at least one storage service <NUM>, and one or more storage service providers 215A-N (hereinafter generally referred to as the storage service provider <NUM>), among others. The one or more clients <NUM>, the storage service <NUM>, and the one or more storage service providers <NUM> may be in communication with one another via a network <NUM>. In some embodiments, the network <NUM> may be a public network (e.g., the Internet) connecting the one or more clients <NUM>, the storage service <NUM>, and the one or more storage service providers <NUM>. In some embodiments, the one or more clients <NUM> and the storage service <NUM> may be connected to each other via one network <NUM> and the storage service <NUM> and the one or more storage service providers <NUM> may be connected to one another via another network <NUM>.

The storage service <NUM> may interface between the clients <NUM> and the one or more service providers <NUM>, and may manage requests to access data maintained by the one or more storage service providers <NUM> from the one or more clients <NUM>. In some embodiments, the storage service <NUM> may itself be an enterprise storage service provider. The storage service <NUM> may include at least one policy manager <NUM> to identify a policy to apply to a request to access data from the client <NUM>. The storage service <NUM> may include at least one access controller <NUM> to authenticate access of data maintained by the one or more storage service providers <NUM>. The storage service <NUM> may include at least one storage manager <NUM> to read from and write data on the one or more storage service providers <NUM>. The storage service <NUM> may include at least one exception handler <NUM> to perform any countermeasures to unavailability among the one or more storage service providers <NUM>. The storage service <NUM> may include at least one storage <NUM> to store and maintain data from the clients <NUM>. In some embodiments, the storage <NUM> may include one or more storage vectors.

Each storage service provider <NUM> may store and maintain data received from the clients <NUM> via the storage service <NUM>. The storage service providers <NUM> may be a file hosting service, a cloud storage service, or a remote backup storage service, among others. In some embodiments, at least one of the storage service providers <NUM> may be a third-party storage service provider providing permission to interface and access data with the storage service provider <NUM>. In some embodiments, at least one of the storage service providers <NUM> may be an enterprise storage service provider associated with the storage service <NUM>. For example, the first storage service provider 215A may be associated with the enterprise storage service provider, whereas the second storage service provider 215B may be the third-party storage service provider. Each storage service provider <NUM> may be maintained in, situated at, or otherwise associated with one or more physical infrastructure (e.g., data centers, branch offices, and remote offices). Each physical infrastructure may be physically situated on a geographic region or location. The storage service provider <NUM> may keep track or identify the location, an address, and a total size of storage, among others. The location may include a geographic region or a position of the storage service provider <NUM>, and may be identified using a physical address or geographic coordinates. The address may identify a network address of the storage service provider <NUM>, such an Internet Protocol (IP) address or media access control (MAC) address. The total size of storage may identify a storage capacity of the storage service provider <NUM>. In some embodiments, the storage service provider <NUM> may also identify a total available storage space.

Each storage service provider <NUM> may include one or more storage service vectors 220A-<NUM> to 220N-M (hereinafter generally referred to storage vector <NUM>) for storing and maintaining data. In some embodiments, each storage vector <NUM> may be part of a file hosting service, a cloud storage service, or a remote backup storage service, among others. Each storage vector <NUM> may store and maintains the data in accordance to the specifications and protocols of the respective storage service provider <NUM>. Each storage vector <NUM> may be maintained in, situated at, or otherwise associated with a geographic region or location as the physical infrastructure. Each storage vector <NUM> may keep track or identify the location, an address, and a size of storage unit of the storage vector <NUM>, among others. The location may include a geographic region or a position of the storage vector <NUM>, and may be identified using a physical address or geographic coordinates. In some embodiments, for the same storage service provider <NUM>, one set of storage vectors <NUM> may be situated in a geographic region or location different from another set of storage vectors <NUM>. The address may identify a network address of the storage vector <NUM>, such an Internet Protocol (IP) address or media access control (MAC) address. The total size of storage may identify a storage capacity of the storage vector <NUM>. In some embodiments, the storage vector <NUM> may also identify a total available storage space. Each storage vector <NUM> may maintain and store data received from the clients <NUM> via the storage service <NUM>. Each storage vector <NUM> may be maintained by the storage service <NUM>.

Each of the above-mentioned elements or entities is implemented in hardware, or a combination of hardware and software, in one or more embodiments. Each component of the system <NUM> may be implemented using hardware or a combination of hardware or software detailed above in connection with <FIG>. For instance, each of these elements or entities can include any application, program, library, script, task, service, process or any type and form of executable instructions executing on hardware of the client <NUM>, the storage service <NUM> (including the policy manager <NUM>, the access controller <NUM>, the storage manager <NUM>, the exception handler <NUM>, and the storage <NUM>), and the storage service providers <NUM> (including the storage vectors <NUM>). The hardware can include circuitry such as one or more processors in one or more embodiments.

On the storage service <NUM>, the policy manager <NUM> may receive a request to store data or a request to access data by a user from the client <NUM>. The request may include an indicator specifying whether the request is to store data or to access data. The request to store data may include one or more files from the client <NUM> to upload via the storage service <NUM>. In some embodiments, the request to store data may include one or more file identifiers corresponding to files accessible by the client <NUM> to upload. In uploading the files for storage, the file identifier may include a filename of the file, including a host referencing the device storing the file, a drive, a path (e.g., directory), a base name, and an extension, among others. For example, the user of the client <NUM> may select files stored on a different device or server to upload via the storage service <NUM>. In some embodiments, the one or more files may be selected by the user of the client <NUM> via a graphical user interface (e.g., a file system directory) for uploading of files via the storage service <NUM>. Conversely, the request to access data may include one or more file identifiers corresponding to files stored and maintain by the storage service <NUM>. In retrieving the file, the file identifier may include a filename of the file, including a path (e.g., directory), a base name, and an extension, among others. In some embodiments, the one or more files may be selected by the user of the client <NUM> via a graphical user interface displaying a list of files available for access. The request to store data and the request to access data may include other information to carry out the function indicated by the request.

Both types of requests may include an account identifier corresponding to the user. The account identifier may be a set of alphanumeric characters (e.g., a user name, a screen name, and an email address). In some embodiments, the account identifier may be particular to enterprise storage service provider associated with the storage service <NUM>, and may differ from the account identifiers used to logon onto the third-party storage service providers. In some embodiments, the request may include a passcode in addition to the account identifier to login with the enterprise storage service provider. In some embodiments, both types of requests may include a location identifier. The location identifier may be a physical address, geographic coordinates, or a network address (e.g., an Internet Protocol (IP) address or a media access control (MAC) address), among others. In some embodiments, both types of requests may include one or more user preferences (also referred to as settings). The one or more user preferences may include at least one physical location of storage, at least one preferred storage service provider <NUM>, and at least one device configuration of the client <NUM>, among others. The physical location of storage may be a geographic region selected as preferred by the user of the client <NUM> to store the data of the user. The preferred storage service provider may include one or more enterprise or third-party storage service providers (e.g., storage service providers <NUM>) selected as preferred by the user of the client <NUM> to store and maintain the data of the user. The device configuration may include a device type (e.g., a mobile device, a laptop, a desktop, and a server) installed software (e.g., operating system, agents, and applications) and device capabilities (e.g., hard drive space, memory, and display resolution) of the client <NUM>, among others.

Upon receipt of the request to store data or to access data, the policy manager <NUM> may identify a profile for the user of the client <NUM>. The profile of the user may include at least one location of the user, a storage size assigned to or requested by the user, and one or more preferences of the user. The location of the user may correspond to a geographic location or a region that the user resides. The storage size assigned to or requested by the user may specify an amount of storage space is permitted to be allocated for maintaining the data of the user. The one or more preferences of the user may include the at least one physical location of storage, the at least one preferred storage service provider <NUM>, and the at least one device configuration of the client <NUM>. In some embodiments, the profile of the user may be set by the user in setting up an account with the enterprise storage service provider associated with the storage service <NUM>. In some embodiments, the profile of the user may be set by the user in setting up accounts with any one of the third-party storage service providers associated with one or more storage service providers <NUM>. In some embodiments, the policy manager <NUM> may maintain the profile of the user on a database on the storage service <NUM> or otherwise accessible by the storage service <NUM>.

To identify the profile of the user, the policy manager <NUM> may parse the request (of either type) from the client <NUM> to retrieve or identify the contents of the request. From parsing the request, the policy manager <NUM> may identify the account identifier of the user associated with the client <NUM> that sent the request. Using the account identifier of the user, the policy manager <NUM> may identify the profile for user maintained on the database accessible by the storage service <NUM>. In some embodiments, the policy manager <NUM> may set the contents of the request at least a portion of the profile for the user. By parsing the request, the policy manager <NUM> may also identify the location identifier of the client <NUM> of the user. The policy manager may set the location identifier of the client <NUM> from the request as the location of the user in the profile for the user. In some embodiments, the policy manager <NUM> may map the network address to a geographic region or location in setting the location of the user in the user profile. The policy manager <NUM> may also identify the one or more user preferences included in the request. The policy manager <NUM> may set the one or more user preferences included in the request as the one or more user preferences in the profile for the user.

The policy manager <NUM> may also determine whether the request is to store data or to access data. In some embodiments, the policy manager <NUM> may parse the request to retrieve or identify the indicator specifying whether the request is to store data or to access data. Based on the indicator, the policy manager <NUM> may determine whether the request is to store data or to access data. When the request is determined to correspond to a request to access data, the policy manager <NUM> may determine the storage size assigned to the user from the user profile. On the other hand, when the request is determined to correspond to a request to store data, the policy manager <NUM> may calculate, determine, or identify the storage size requested by the user based on the request. In some embodiments, the policy manager <NUM> may identify the one or more files identified by the request to store data. The policy manager <NUM> may measure or determine a file size for each of the files identified by the request to store data. Based on the file size determined for each of the files identified in the request to store data, the policy manager <NUM> may determine a total file size as the storage size requested by the user in storing the data.

In some embodiments, the policy manager <NUM> may identify the storage size assigned to the user and a remaining storage size from the total storage size assigned to the user. The assigned storage size may have been pre-set when the user set up the account with the enterprise storage service provider associated with the storage service <NUM>. The policy manager <NUM> may compare the total file size of the files identified in the request with the remaining storage size assigned to the user. If the total file size is determined to be less than or equal to the remaining storage size, the policy manager <NUM> may continue processing the request to carry out the storing of the data. Conversely, if the total file size is determined to be greater than the remaining storage size, the policy manager <NUM> may halt processing of the request and may send a failure notification to the client <NUM> that sent the request. The notification may indicate to the user of the client <NUM> that the total size of the data requested to be stored is too large.

With the identification of the profile of the user, the policy manager <NUM> may identify a policy for the user of the client <NUM>. The policy may specify usage of one or more of the storage service providers <NUM> based on the profile for the user. As described above, the storage service providers <NUM> may include at least one third-party storage service provider or at least one enterprise storage service provider. In some embodiments, the policy may specify a location of each storage service provider <NUM>, a storage size available at each storage service provider <NUM>, and device configurations compatible with each storage service provider <NUM>. The location may indicate a physical, geographic region or location of the storage service provider <NUM>. In some embodiments, the policy manager <NUM> may keep track of the available storage space at each storage service provider <NUM>. In some embodiments, the policy manager <NUM> may select the policy from a set of multiple policies for the user to carry out the request. Each policy may differ from the other in specifying which of the one or more storage service providers <NUM> are to be used for the user.

To identify the policy in storing the data of the user, the policy manager <NUM> may compare the profile for user with one or more of the policies. In comparing, the policy manager <NUM> may compare the location of the user in the profile with the location of each storage service provider <NUM> as specified in the policy. The policy manager <NUM> may compare the location of each storage service provider <NUM> specified in the policy with the one or more physical locations for storage of data as indicated in the user preference. The policy manager <NUM> may also compare the available storage space in each storage service provider <NUM> with the storage size requested by the user. In some embodiments, the policy manager <NUM> may determine which storage service provider <NUM> has more storage space available than the storage size requested by the user. The policy manager <NUM> may also identify which storage service providers <NUM> are preferred by the user in accordance with the preferences indicated in the user profile. In addition, the policy manager <NUM> may compare the compatible device configurations of the storage service provider <NUM> with the device configurations indicated in the user profile. Based on the comparison, the policy manager <NUM> may select the policy for the user. In some embodiments, the policy manager <NUM> may determine a number of matches between the specifications of policy and the user profile. Each match may correspond to when the user profile satisfy the specifications of the policy. The policy manager <NUM> may identify the policy with the highest number of matches in the specifications with the user profile.

When the request is determined to be a request to store data, the policy manager <NUM> may determine or select one or more of the storage service providers <NUM> to use to store the data of the user based on the policy for the user. The one or more storage service providers <NUM> selected based on the policy for the user may include at least one third-party storage service provider or at least one enterprise storage service provider. In determining the one or more storage service providers <NUM> to use in storing the data, the policy manager <NUM> may compare the user profile with the specifications of the policy. The policy may initially list or allow for multiple storage service providers <NUM> as potential candidates for storing the data of the user. The policy manager <NUM> may select a subset of the storage service providers <NUM> in accordance to the identified policy and the profile for the user, among other factors.

For each storage service provider <NUM> listed in the policy, the policy manager <NUM> may determine whether the location of the user indicated in the profile is within a threshold distance of the location of the storage service provider <NUM> as specified in the policy. The threshold distance may correspond to a physical or geographic distance from the location of a physical infrastructure for the storage service provider <NUM>. In some embodiments, the policy manager <NUM> may determine whether the client <NUM> of the user is within the threshold distance of the location of the storage service provider <NUM>. In some embodiments, prior to the comparison, the policy manager <NUM> may convert the network address for the client <NUM> to a geographic location using the network <NUM>. If the location of the user or the client <NUM> associated with the user is determined to be outside the threshold distance from the location of the storage service provider <NUM>, the policy manager <NUM> may exclude the storage service provider <NUM> from selection. The excluded storage service provider <NUM> may be one of the third-party storage service providers. If the location of the user or the client <NUM> associated with the user is determined to be outside threshold distance from the location of all the storage service providers <NUM>, the policy manager <NUM> may select the enterprise storage service provider (e.g., the storage service <NUM> itself) for storage of the data. On the other hand, if the location of the user or the client <NUM> associated with the user is determined to be within the threshold distance from the location of the at least one of the storage service providers <NUM>, the policy manager <NUM> may include the storage service provider <NUM> for selection to store the data. The storage service provider <NUM> may include the third-party storage service provider.

In selecting the storage service provider <NUM>, the policy manager <NUM> may also compare the available storage space at the storage service provider <NUM> to the requested storage size for the data of the user. As described above, the policy manager <NUM> may determine the requested storage size for the data of the user by determine a file size of the one or more files identified in the request from the client <NUM> of the user. In addition, the policy manager <NUM> may keep track of the available storage space at each storage service provider <NUM>. In some embodiments, the policy manager <NUM> may identify the available storage space at each storage vector <NUM> at each respective storage service provider <NUM>. Based on the available storage space at each storage vector <NUM>, the policy manager <NUM> may identify or determine the total available storage space for the respective storage service provider <NUM>. For each storage service provider <NUM>, the policy manager <NUM> may compare the available storage space at the storage service provider <NUM> with the requested storage size of the data of the user. If the available storage space at the storage service provider <NUM> is determined to be less than the requested storage size, the policy manager <NUM> may exclude the storage service provider <NUM> from selection. The excluded storage service provider <NUM> may be one of the third-party storage service providers. If all the available storage space at the storage service provider <NUM> is determined to be less than the requested storage size, the policy manager <NUM> may select the enterprise storage service provider (e.g., the storage service <NUM> itself) for storage of the data. On the other hand, if the available storage space at the storage service provider <NUM> is determined to be greater than or equal to the requested storage size, the policy manager <NUM> may include the storage service provider <NUM> for selection to store the data. The storage service provider <NUM> may include the third-party storage service provider.

Furthermore, the policy manager <NUM> may determine whether the device configurations of the client <NUM> of the user are compatible with one or more of the storage service providers <NUM>. As described above, the device configurations of the client <NUM> may include a device type (e.g., a mobile device, a laptop, a desktop, and a server) installed software (e.g., operating system, agents, and applications) and device capabilities (e.g., hard drive space, memory, and display resolution), among others. The policy may specify that the storage service provider <NUM> may be compatible with certain client configurations but may be incompatible with other device configurations. For each storage service provider <NUM>, the policy manager <NUM> may determine whether the device configurations of the client <NUM> are compatible with the device configurations specified by the policy for the storage service provider <NUM>. If the device configurations of the client <NUM> are determined to be incompatible with the device configurations of the storage service provider <NUM>, the policy manager <NUM> may exclude the storage service provider <NUM> from selection. The excluded storage service provider <NUM> may be one of the third-party storage service providers. If none of the storage service providers <NUM> are determined to be compatible with the device configurations of the client <NUM>, the policy manager <NUM> may select the enterprise storage service provider (e.g., the storage service <NUM> itself) for storage of the data. On the other hand, if the device configurations of the client <NUM> are determined to be compatible with the device configurations of the client <NUM>, the policy manager <NUM> may include the storage service provider <NUM> for selection to store the data. The storage service provider <NUM> may include the third-party storage service provider.

With the selection of one or more of the storage service providers <NUM>, the access controller <NUM> may manage access to the selected storage service providers <NUM>. In some embodiments, the access controller <NUM> may identify each of the storage service provider <NUM> selected based on the policy for the user of the client <NUM>. The access controller <NUM> may identify or determine whether the storage service provider <NUM> corresponds to the third-party storage service or the enterprise storage service. For each storage service provider <NUM> identified as corresponding to the enterprise storage service provider, the access controller <NUM> may authenticate access to the enterprise storage service provider using the request. As discussed above, the request to store data and the request to access data both may include the account identifier and the passcode to login to the enterprise storage service, among others. In some embodiments, the access controller <NUM> may authenticate the user with the enterprise storage service using the account identifier and the passcode parsed from the request. To authenticate the user, the access controller <NUM> may compare the passcode from the request with the passcode stored for the account identifier included in the request from the client <NUM>. If the passcodes match, the access controller <NUM> may determine that the authentication of the user is successful and may permit access to storage of the data included in the request onto the enterprise storage service provider. In some embodiments, the access controller <NUM> may authenticate the user without the request (and without the account identifier or the passcode), responsive to determining that the selected storage service provider corresponds to the enterprise storage service provider.

On the other hand, for each storage service provider <NUM> identified as corresponding to the third-party storage service provider, the access controller <NUM> may authenticate access to the third-party storage provider. In some embodiments, the access controller <NUM> may retrieve or obtain authentication credentials for accessing the one or more storage vectors <NUM> of the storage service provider <NUM>. The authentication credentials may include an account identifier and passcode, among other data, for accessing data via the third-party storage service provider. The account identifier and the passcode for the third-party storage service provider may differ from the account identifier and the passcode for the enterprise storage service provider. In some embodiments, the access controller <NUM> may maintain the authentication credentials for accessing the third-party storage service provider on a database accessible from the storage service <NUM>. The authentication credentials for the third-party storage service may have been received from the user when setting up the account with the enterprise storage service. The authentication credentials for the third-party storage service may be indexed or identified on the storage service <NUM> using the account identifier for the enterprise storage service associated with the storage service <NUM>. Using the account identifier of the user for authenticating with the enterprise storage service, the access controller <NUM> may find or identify the authentication credentials of the user for authenticating with the third-party storage service.

Using the authentication credentials for the third-party service provider, the access controller <NUM> may authenticate the user of the client <NUM> that sent the request. The access controller <NUM> may send or provide the authentication credential to the corresponding storage service provider <NUM> via the network <NUM>. In response to receiving the authentication credentials, the storage service provider <NUM> may parse to the authentication credentials to identify the account identifier and the passcode. The storage service provider <NUM> may store and maintain account credentials for accounts with the third-party storage service provider corresponding to the storage service provider <NUM>. The storage service provider <NUM> may then identify the passcode for the user using the account identifier received from the access controller <NUM>. To authenticate the user, the storage service provider <NUM> may compare the passcode received from the access controller <NUM> with the passcode stored on the storage service provider <NUM> for the account identifier. If the passcodes do not match, the storage service provider <NUM> may determine that the authentication is unsuccessful and may send a failure notification to the access controller <NUM>. The access controller <NUM> in turn may forward the failure notification to the client <NUM> of the user and may provide a prompt to re-enter authentication credentials for the third-party storage service provider. Conversely, if the passcodes match, the storage service provider <NUM> may determine that the authentication is successful, and may send a success notification to the access controller <NUM> to permit access to the storage service provider <NUM>. In some embodiments, the success notification may include the addresses, the locations, or the storage size of the one or more storage vectors <NUM> of the storage service provider <NUM>.

In some embodiments, the access controller <NUM> may retrieve or identify the address of each storage vector <NUM> in the storage service providers <NUM>. The retrieval or identification of the addresses of the storage vectors <NUM> may be independent of the authentication. The storage service providers <NUM> may include at least one third-party storage service provider or at least one enterprise storage service provider. For each storage service provider <NUM> selected based on the policy, the access controller <NUM> may identify the location, address, and the storage size of each storage vector <NUM> of the storage service provider <NUM>. In some embodiments, the access controller <NUM> may maintain and store the location, address, and the storage size of the storage vectors <NUM> of the storage service providers <NUM>. In some embodiments, the access controller <NUM> may send a request for addresses to each storage service provider <NUM> selected based on the policy for the user. In response to receipt to the request, the storage service provider <NUM> may identify the location, the address, or the storage size of each storage vector <NUM>. In some embodiments, the storage service provider <NUM> may determine or identify an available storage space on each storage vector <NUM>, in response to receipt of the request. The storage service provider <NUM> may provide a response with the addresses, the locations, or the storage size of each storage vector <NUM> maintained by the storage service provider <NUM> to the access controller <NUM>. Upon receipt of the response from the storage service provider <NUM>, the access controller <NUM> may parse the receipt to identify the location, the address, and the storage size of each storage vector <NUM> of the storage service provider <NUM>.

Based on the identification of the storage vectors <NUM> of the selected storage service providers <NUM>, the storage manager <NUM> may select a subset of the storage vectors <NUM> based on the policy or the profile for the users to store the data of the user. In some embodiments, the selection of the storage vector <NUM> may be responsive to successful authentication of the user with the enterprise or third-party storage service provider. The selection of the storage vectors <NUM> may be, for example, based on the location of the client <NUM> of the user relative to the locations of the storage vectors <NUM>. As discussed above, for the same storage service provider <NUM>, one set of storage vectors <NUM> may be situated in a geographic region or location different from another set of storage vectors <NUM>. To select the storage vectors <NUM> at each selected storage service provider <NUM>, the storage manager <NUM> may determine whether the location of the user indicated in the profile is within a threshold distance of the location of the storage vector <NUM>. The threshold distance may correspond to a physical or geographic distance from the location of the storage vector <NUM>. In some embodiments, the storage manager <NUM> may determine whether the client <NUM> of the user is within the threshold distance of the location of storage vector <NUM>. In some embodiments, prior to the comparison, the storage manager <NUM> may convert the network address for the client <NUM> to a geographic location using the network <NUM>. If the location of the user or the client <NUM> associated with the user is determined to be outside the threshold distance from the location of the storage vector <NUM>, the storage manager <NUM> may exclude storage vector <NUM> from selection. The excluded storage vector <NUM> may be one of the third-party storage service providers. If the location of the user or the client <NUM> associated with the user is determined to be outside threshold distance from the location of all storage vectors <NUM>, the storage manager <NUM> may select the enterprise storage service provider (e.g., the storage <NUM>) for storage of the data. On the other hand, if the location of the user or the client <NUM> associated with the user is determined to be within the threshold distance from the location of the at least one of the storage vectors <NUM>, the storage manager <NUM> may include the storage vector <NUM> for selection to store the data.

In selecting the storage vector <NUM>, the storage manager <NUM> may also compare the available storage space at the storage vector <NUM> to the requested storage size for the data of the user. In some embodiments, the storage manager <NUM> may determine the requested storage size for the data of the user by determine a file size of the one or more files identified in the request from the client <NUM> of the user. Additionally, the storage manager <NUM> may identify the available storage space at each storage vector <NUM> kept track by the storage service provider <NUM>. In some embodiments, the storage manager <NUM> may identify the available storage space at each storage vector <NUM> at each respective storage vector <NUM>. Based on the available storage space at each storage vector <NUM>, the storage manager <NUM> may identify or determine the total available storage space for the respective storage vector <NUM>. For each storage vector <NUM>, the storage manager <NUM> may compare the available storage space at the storage vector <NUM> with the requested storage size of the data of the user. If the available storage space at the storage vector <NUM> is determined to be less than the requested storage size, the storage manager <NUM> may exclude the storage vector <NUM> from selection. If all the available storage space at the storage vector <NUM> is determined to be less than the requested storage size, the storage manager <NUM> may select the enterprise storage service provider (e.g., the storage service <NUM> itself) for storage of the data. On the other hand, if the available storage space at the storage vector <NUM> is determined to be greater than or equal to the requested storage size, the storage manager <NUM> may include the storage vector <NUM> for selection to store the data.

In some embodiments, the storage manager <NUM> may parse the request to store data received from the client <NUM> of the user to retrieve or identify the data to be stored onto the storage vectors <NUM>. In some embodiments, the storage manager <NUM> may parse the request to identify the one or more files corresponding to the data to be stored onto the storage vectors <NUM>. In some embodiments, the storage manager <NUM> may retrieve or identify the one or more files identified by the request to store data using the file identifier included in the request. In some embodiments, the storage manager <NUM> may combine or aggregate the one or more files identified using the request into a single block of data.

In preparation of storing the data, the storage manager <NUM> may generate multiple portions of the data for storage across the storage vectors <NUM> of the selected storage service providers <NUM>. Each portion of data may include or correspond to a subset of bits, bytes (e.g., multiple bits), or blocks (e.g., multiple bytes) from the bitstream corresponding to the entirety of the data. In some embodiments, at least one portion data may include striped data. In some embodiments, at least one portion of data may include mirrored data. In some embodiments, the storage manager <NUM> may generate the multiple portions of the data for storage in association or in accordance with a Redundant Array of Independent Disks (RAID) level. The RAID level may specify striping of the portions of the data, mirroring of the portions of the data, and insertion of parity in the portions of the data. For example, RAID level <NUM> may specify data striping. RAID level <NUM> may specify mirroring of data. RAID level <NUM> may specify bit-level striping of data with Hamming code parity. RAID level <NUM> may specify byte level striping with parity. RAID level <NUM> may specify block-level striping with parity. RAID level <NUM> may specify block-level striping with distributed parity. RAID level <NUM> may specify block-level striping with doubly distributed parity.

In some embodiments, the storage manager <NUM> may partition or divide the data into the multiple portions. In some embodiments, the storage manager <NUM> may divide the data by stripping the data into the multiple portions. The striped data may include or correspond to consecutive subsets of bits, bytes, words, or blocks from the entirety of the data. In some embodiments, the storage manager <NUM> may divide the data using a moving window over the entire span of the data. The moving window may correspond to overlapping segments of the data. The portions of the data identified using the moving window may be partially common with other portions of the data. To divide the data into multiple portions, the storage manager <NUM> may identify each segment of the data from the entirety of the data. With each identified segment, the storage manager <NUM> may replicate the segment to generate the portion of data to store onto the storage vectors <NUM>. In some embodiments, the storage manager <NUM> may generate multiple replications of the same portions of the data. For each portion of the data, the storage manager <NUM> may generate mirrored data by replicating the portion one or more times. In some embodiments, for each portion of data, the storage manager <NUM> may determine or generate a parity portion to include into storage with the data based on the portion of the data. The parity portion may include bits, bytes (e.g., multiple bits), or blocks (e.g., multiple bytes). In some embodiments, the storage manager <NUM> may generate the parity portion in accordance to any number of parity functions, such as Hamming codes, Polynomial codes, and Reed-Solomon codes, among others.

The storage manager <NUM> may write, save, or otherwise store the portions of the data onto storage vectors <NUM> across the selected storage service providers <NUM>. As discussed above, the selected storage service providers <NUM> may include at least one third-party storage service provider or at least one enterprise storage service provider. The storage vectors <NUM> may be across one or more of the selected storage service providers <NUM>. In some embodiments, the storage manager <NUM> may store the portions of the data onto the selected subset of storage vectors <NUM> across the selected storage providers <NUM>. For example, the storage manager <NUM> may store a first portion of the data onto the storage vector 220A-<NUM> of the first storage service provider 215A corresponding to one of the selected third-party storage service providers. The storage manager <NUM> may also store a second portion of the data onto the storage vector 220B-<NUM> of the second storage service provider 215B corresponding to another selected third-party storage service provider or the enterprise storage service provider. In this manner, the data from the client <NUM> of the user may be stored over multiple third-party and enterprise storage service providers. In some embodiments, the storage manager <NUM> may store at least the portion of the data onto the storage <NUM> of the storage service <NUM>, when the storage service <NUM> is selected based on the policy and profile for the user. In some embodiments, the storage manager <NUM> may add the account identifier for the user into each portion of the data when storing the data onto the storage vectors <NUM> across the selected storage service providers <NUM>.

In some embodiments, the storage manager <NUM> may store the portions of the data onto the storage vector <NUM> of the storage service provider <NUM> in accordance with the RAID level. The storage manager <NUM> may traverse through the generated portions of the data to store onto the storage vectors <NUM> of the storage service providers <NUM>. For each portion, the storage manager <NUM> may identify the portion of the data as the mirrored portion, the striped portion, or the parity portion. If the portion is identified as mirrored, the storage manager <NUM> may store the mirrored portion of data on each of the storage vectors <NUM> across the selected storage service providers <NUM> or the storage <NUM> in accordance with the specified RAID level. If the portion is identified as striped, the storage manager <NUM> may store the striped portions of data on consecutive storage vectors <NUM> across the selected storage service providers <NUM> or the storage <NUM> in accordance with the specified RAID level. If the portion is identified as parity, the storage manager <NUM> may insert the portion prior or subsequent to the portion from which the parity portion was generated on the storage vector <NUM> or the storage <NUM> in accordance with the specified RAID level.

In some embodiments, the storage manager <NUM> may identify the address of each storage vector <NUM> from each selected storage service provider <NUM>. The storage vector <NUM> may be of the selected subset of storage vectors <NUM> from the selected storage service providers <NUM>. Using the addresses, the storage manager <NUM> may identify the storage vectors <NUM> across the one or more selected storage service providers <NUM> to store the data of the user. With the identification, the storage manager <NUM> may send the portion of data to the storage vector <NUM> for storage. In some embodiments, the storage manager <NUM> may generate a request to store the portion of the data to send to the storage vector <NUM> via the network <NUM>. The request to store data may include the address of the storage vector <NUM> and the portion of the data to be stored on the storage vector <NUM>. Upon receipt of the data, the storage vector <NUM> may store the portion of the data. In some embodiments, the storage vector <NUM> may parse the request to identify the portion of data for storage.

In storing the portions of the data, the storage manager <NUM> may generate an encrypted form for each portion data to store onto the storage vector <NUM>. In some embodiments, the storage manager <NUM> may use a cryptographic algorithm to generate the encrypted form of the portion of data. The cryptographic algorithm may include asymmetric cryptographic algorithms (e.g., a block cipher, stream cipher, and cryptographic hash function) and asymmetric cryptographic algorithms (e.g., RSA algorithm, Diffie-Hellman key exchange protocol, and digital signature), among others. In some embodiments, the storage manager <NUM> may apply the same cryptographic algorithms across the portions of the data generated from the data of the user. In some embodiments, the storage manager <NUM> may apply different cryptographic algorithms on at least two portions of the data to store across the storage vectors <NUM> of the storage service providers <NUM>. For example, the storage manager <NUM> may apply a SHA-<NUM> cryptographic hash function on the portion of the data to be stored on the storage vector 220A-<NUM> of the first storage service provider 215A. The storage manager <NUM> may apply an RSA algorithm on the portion of the data to be stored on the storage vector 220B-<NUM> on the second storage service provider 215B. Having applied the cryptographic algorithm, the storage manager <NUM> may store the encrypted form of the portion of data onto the storage vectors <NUM> across the selected storage service providers <NUM> or the storage <NUM> of the storage service <NUM>.

With the data of the user stored onto the storage vectors <NUM> across the selected storage providers <NUM>, the storage manager <NUM> may record the selected storage vectors <NUM> and the selected storage service providers <NUM> on which the data of the user is stored in a route table. The route table may be maintained on the storage service <NUM>. In some embodiments, the storage manager <NUM> may record the locations or the addresses of the selected storage vectors <NUM> and the selected storage service provider <NUM> on the route table. The locations or the addresses may be indexed, associated with, or otherwise identified with the account identifier of the user of the client <NUM> that sent the request to store the data on the route table. In some embodiments, the storage manager <NUM> may record the RAID level used to store the portions of the data of the user across the storage vectors <NUM> of the selected storage providers <NUM> on the route table. In some embodiments, the storage manager <NUM> may record a type of the portion of the data stored on each storage vector <NUM> onto the route table. The type may include mirror, striped, and parity in accordance with RAID. In some embodiments, the storage manager <NUM> may record a sequence of writing of the portions of data onto the storage vector <NUM>. In some embodiments, the storage manager <NUM> may record the type of cryptographic algorithm applied in storing the portions of data across the storage vectors <NUM> of the storage service provider <NUM> onto the route table. In some embodiments, the storage manager <NUM> may also update the available storage space at each storage vector <NUM> and each storage service provider <NUM>, responsive to storage of the data on the route table. In some embodiments, the storage manager <NUM> may also update the available storage space of the storage <NUM> on the route table.

When the request is determined to be a request to access data, the policy manager <NUM> may identify the selected storage vectors <NUM> and the selected storage providers <NUM> on which the data of the user is stored. The storage vectors <NUM> and the storage providers <NUM> may have been previously selected based on the policy or the profile for the user as described above. In some embodiments, the policy manager <NUM> may identify the storage <NUM> on which the data of the user is stored. As discussed above, the request to access data received from the client <NUM> may also include the account identifier corresponding to the user, among other information. In some embodiments, the policy manager <NUM> may parse the request to access data to identify the account identifier. Using the account identifier, the policy manager <NUM> may identify each storage vector <NUM> and each storage service provider <NUM> on which the data of the user is stored. The storage service provider <NUM> may include at least one enterprise storage service provider or at least one third-party storage service provider. In some embodiments, the policy manager <NUM> may identify each storage vector <NUM> and each storage service provider <NUM> as recorded using the account identified from the request to access data on the route table. The policy manager <NUM> may also identify the storage <NUM> of the storage service <NUM> on which the data of the user is stored. In some embodiments, the policy manager <NUM> may identify the locations and addresses of the storage vectors <NUM> and the storage service providers <NUM> on which the data of the user is stored.

The access controller <NUM> may authenticate the user of the client <NUM> that sent the request to access data in a similar manner as with the user of the client <NUM> that sent the request to store data. The authentication of the user may be with the enterprise storage service provider or the third-party storage service provider. As discussed above in summary, the access controller <NUM> may authenticate the user with the enterprise storage service using the account identifier and the passcode parsed from the request. To authenticate with the third-party storage service provider, the access controller <NUM> may retrieve or obtain authentication credentials for accessing the one or more storage vectors <NUM> of the storage service provider <NUM> using the account identifier of the user for authenticating with the enterprise storage service provider. With the authentication credentials for the third-party storage service provider, the access controller <NUM> may authenticate the user.

The storage manager <NUM> may retrieve or obtain different portions of the data across the storage vectors <NUM> of the selected storage service providers <NUM>. In some embodiments, the storage manager <NUM> may identify the storage vectors <NUM> and the storage service providers <NUM> using the identified addresses. In some embodiments, the storage manager <NUM> may also identify the storage <NUM> on the storage service <NUM>. With the identification, the storage manager <NUM> may access the storage vectors <NUM> of the storage service providers <NUM> to retrieve or obtain the portion of the data for the user stored thereon. The storage manager <NUM> may also access the storage <NUM> to retrieve or obtain the portion of the data for the user. In some embodiments, the storage manager <NUM> may aggregate the portions of the data retrieved from the storage vectors <NUM> and the storage <NUM>.

In some embodiments, the storage manager <NUM> may determine a decrypted form for each portion data to retrieve from the storage vector <NUM> or the storage <NUM>. In some embodiments, the storage manager <NUM> may use a cryptographic algorithm to generate the decrypted form of the portion of data. The cryptographic algorithm may include asymmetric cryptographic algorithms (e.g., a block cipher, stream cipher, and cryptographic hash function) and asymmetric cryptographic algorithms (e.g., RSA algorithm, Diffie-Hellman key exchange protocol, and digital signature), among others. In some embodiments, the storage manager <NUM> may determine or identify which cryptographic algorithm to apply in decrypting by accessing the route table of the type of cryptographic was applied in encrypting the portion of data. The storage manager <NUM> may then apply the identified cryptographic algorithm to the encrypted form the portion of the data to recover or generate the decrypted form of the portion of the data. The storage manager <NUM> may repeat the decryption over all the portions of the data stored in the storage vector <NUM> or the storage <NUM>.

The storage manager <NUM> may combine portions of the data retrieved from the storage vectors <NUM> across the storage service providers <NUM> or the storage <NUM>. As described above, each portion may include or correspond to a subset of bits, bytes (e.g., multiple bits), or blocks (e.g., multiple bytes) from the bitstream corresponding to the entirety of the data. With the portions of the data retrieved from the storage vectors <NUM> or the storage <NUM>, the storage manager <NUM> may reconstruct or generate the entirety of the data. In some embodiments, the storage manager <NUM> may combine the portions of the data in accordance to the RAID level with which the portions of data were stored. The storage manager <NUM> may traverse through the portions of the data retrieved from the storage vectors <NUM> of the storage service providers <NUM> or the storage <NUM>. For each portion, the storage manager <NUM> may identify the portion of the data as the mirrored portion, the striped portion, or the parity portion. If the portion is identified as mirrored, the storage manager <NUM> may retain the mirrored portions of the data and ignore the remaining portions identical to the selected mirror portion. The storage manager <NUM> may also concatenate, attach, or otherwise add the selected mirror portion to the other portions of the reconstructed data in accordance with the RAID level. The storage manager <NUM> may identify the RAID level used to store the data from the route table. If the portion is identified as striped, the storage manager <NUM> may retain the striped portion of the data. The storage manager <NUM> may also concatenate, attach, or otherwise add the striped portion to the other portions of the reconstructed data in accordance with the RAID level. If the portion is identified as parity, the storage manager <NUM> may check the parity portion against the prior or subsequent portion of data used to generate the parity portion. Based on the check, the storage manager <NUM> may perform error correction on the portion of the data, including the corresponding portion of the reconstructed data. In this manner, the storage manager <NUM> may recover data stored across multiple storage vectors <NUM> and storage providers <NUM>.

In maintaining the data across the storage vectors <NUM> and the storage <NUM>, the exception handler <NUM> may monitor for outages among the storage service providers <NUM>. An outage may correspond to any event leading to inaccessibility of the storage service provider <NUM> or the data stored on the storage service provider <NUM> via the network <NUM>. In some embodiments, the exception handler <NUM> may monitor for outages among each storage vector <NUM> of each storage service provider <NUM>. To monitor for outages at each storage service provider <NUM>, the exception handler <NUM> may wait for receipt of a heartbeat packet from the storage service <NUM>. In some embodiments, the exception handler <NUM> may wait for receipt of the heartbeat packet from each individual storage vector <NUM> of the storage service provider <NUM>. Each storage service provider <NUM> may send the heartbeat packet at a time interval via the network <NUM>. In some embodiments, the storage vectors <NUM> of each storage service provider <NUM> may also send the heartbeat packet at the time interval via the network <NUM>. The exception handler <NUM> may maintain a timer to keep track of a time elapsed since receipt of the previous heartbeat packet for each storage service provider <NUM> or each storage vector <NUM>. The exception handler <NUM> may compare the elapsed time to the time interval between each heartbeat packet. If the elapsed time for the storage service provider <NUM> is determined to be greater than the time interval, the exception handler <NUM> may determine an outage at the corresponding storage service provider <NUM>. In some embodiments, if the elapsed time for the storage vector <NUM> is determined to be greater than the time interval, the exception handler <NUM> may determine an outage at the corresponding storage vector <NUM>.

In some embodiments, the exception handler <NUM> may receive a termination notification from the storage service provider <NUM>. The exception handler <NUM> may also receive the termination notification from the individual storage vector <NUM>. The termination notification may indicate to the exception handler <NUM> that the storage service provider <NUM> or the storage vector <NUM> will not store or maintain the data of users making requests to the storage service <NUM>. In some embodiments, the termination notification may include the location and the address of the storage service provider <NUM> or the storage vector <NUM>. Upon receipt of the termination notification from the storage service provider <NUM>, the exception handler <NUM> may determine an outage at the storage service provider <NUM>. In some embodiments, responsive to receipt of the termination notification from the storage vector <NUM>, the exception handler <NUM> may determine an outage at the storage vector <NUM>.

Responsive to detection of an outage among the storage service providers <NUM> or the individual storage vectors <NUM>, the exception handler <NUM> may recover the data stored on the affected storage service providers <NUM> or the storage vectors <NUM>. The exception handler <NUM> may identify the storage service providers <NUM> with the outage. In some embodiments, the exception handler <NUM> may identify the storage vectors <NUM> with the outage. In some embodiments, the exception handler <NUM> may identify the one or more users (or account identifiers) whose data were stored on the storage vectors <NUM> with the outage. In some embodiments, the exception handler <NUM> may identify the profiles of the users. Based on the profiles of the users, the exception handler <NUM> may identify the policies of the user in the manner described above. Using the policy for each user, the exception handler <NUM> may identify a substitute storage service provider <NUM> to replace the storage service provider <NUM> with the outage. In some embodiments, the exception handler <NUM> may identify one or more substitute storage vectors <NUM> to replace the storage vectors <NUM> with the outage. The identification of the substitute storage service providers <NUM> and the storage vectors <NUM> may be done as in response to receipt of the request to store data detailed above with respect to the policy manager <NUM>.

The exception handler <NUM> may identify the one or more portions of the data stored on the storage vectors <NUM> of the storage service provider <NUM> with the outage. In some embodiments, the identification of the portion of the data may be based on the route table. In some embodiments, the exception handler <NUM> may identify the one or more portions of the data stored on storage vectors <NUM> without the outage. The portions of the data may have been for the same user, and stored across the storage vector <NUM> with the outage and the storage vector <NUM> without the outage. Based on the portion of the data identified across the storage vectors <NUM> without the outage and the route table, the exception handler <NUM> may replicate the portions of the data stored on the storage vector <NUM> with the outage. In some embodiments, the replication of the portions of the data by the exception handler <NUM> may be in accordance with the type of the portion of the data (e.g., mirrored, striped, or parity) the RAID level for the data of the user as recorded on the route table. In some embodiments, the replication of the portions of the data may be based on the sequence of the writing of the portions of the data onto the storage vectors <NUM> as recorded on the route table. For each user whose data is stored on the storage vector <NUM> with the outage, the exception handler <NUM> may identify the portions of data stored on the storage vectors <NUM> without the outage in accordance to the sequence of writing. The identified portions of data may be prior or subsequent to the storage vector <NUM> with the outage in the sequence recorded on the route table. For each identified portion of the data, the exception handler <NUM> may identify the type of the portion of the data as one of the mirrored, striped, and parity. Based on the identification of the types of the portions of the data and the RAID level, the exception handler <NUM> may recover the portions of the data stored on the storage vector <NUM> with the outage. The exception handler <NUM> may store the recovered portions of the data onto the one or more substitute storage service providers <NUM> or the storage vectors <NUM>. In some embodiments, the exception handler <NUM> may update the route table for the data of the user with the substitute service providers <NUM> or the storage vectors <NUM> storing the recovered portions of data.

Referring now to <FIG>, depicted is a flow diagram of an example embodiment for a method <NUM> of managing storage of data of a user across a plurality of third-party public storage service providers. The functionalities of method <NUM> may be implemented using, or performed by, the component described herein in conjunction with <FIG> and <FIG>, such as the client <NUM>, the storage service <NUM>, and storage service provider <NUM>. In overview, a storage service (e.g., the storage service <NUM>) receives a request to store data (<NUM>). The storage service identifies a policy for the user (<NUM>). The storage service determines which storage service provider to process the request (<NUM>). The storage service stores data across vectors of the storage service provider (<NUM>).

In further detail, the storage service (e.g., the storage service <NUM>) receives a request to store data (<NUM>). The storage service is in communication with a plurality of third-party storage service providers. Each third-party storage service provider may include one or more storage vectors for storing and maintaining data. The request to store data received from a client may include the data store via the storage service. The data may be in the form of files. The request may also include an account identifier corresponding to a user of the client.

The storage service identifies a policy for the user (<NUM>). The storage service identifies the policy for the user based on a profile for the user. Using the request, the storage service may identify the profile for the user. The profile for the user may include a location of the user, a storage size assigned to the user, and user preferences. The user preferences may include a preference for location of storage, preferred storage service providers, and device configurations of the client. The policy may specify selection of the storage service providers and the storage vectors based on the user profile.

The storage service determines which storage service provider to process the request (<NUM>). Based on the policy, the storage service selects one or more storage service provider to store the data of the user. If the location of the user is determined to be outside a threshold distance of the storage service provider, the storage service may exclude the storage service provider from selection for storage of the data of the user. On the other hand, if the location of the user is determined to be within the threshold distance of the storage service provider, the storage service may select the storage service provider for storage of the data of the user. The storage service may use other factors in selecting the storage service providers, such as available storage space and compatibility with the device configurations of the client.

The storage service stores data across the storage service provider (<NUM>). In storing the data, the storage service may generate multiple portions of the data for storage across the storage vectors of the storage service providers. Each portion of data may include or correspond to a subset of bits, bytes (e.g., multiple bits), or blocks (e.g., multiple bytes) from the bitstream corresponding to the entirety of the data. The storage service may store the multiple portions of the data across the storage vectors in accordance to a Redundant Array of Independent Disks (RAID) level. The portion of the data may be mirrored, striped, or parity. The storage service may record information regarding storage of the data for the user onto a route table.

Referring now to <FIG>, depicted is a flow diagram of an example embodiment for a method <NUM> of managing storage of data of a user across a plurality of third-party public storage service providers. The functionalities of method <NUM> may be implemented using, or performed by, the component described herein in conjunction with <FIG> and <FIG>, such as the client <NUM>, the storage service <NUM>, and storage service provider <NUM>. In overview, a storage service (e.g., the storage service <NUM>) may receive a request to access data (<NUM>). The storage service may obtain portions from storage vectors (<NUM>). The storage service may combine portions to generate data (<NUM>).

In further detail, the storage service (e.g., the storage service <NUM>) may receive a request to access data (<NUM>). The request to access data may include an account identifier corresponding to a user of the client. Using the request, the storage service may identify the storage service providers and storage vectors on which the data for the user is stored. The storage service may access the route table in identifying which storage service providers and which storage vectors.

The storage service may obtain portions from storage vectors (<NUM>). The storage service may access the storage service providers and the storage vectors to retrieve the portions of the data stored thereon. Each portion of data may include or correspond to a subset of bits, bytes (e.g., multiple bits), or blocks (e.g., multiple bytes) from the bitstream corresponding to the entirety of the data.

The storage service may combine portions to generate data (<NUM>). With the portions of the data, the storage service may reconstruct the entirety of the data for the user. The storage service may combine the portions of the data in accordance to the RAID level. The storage service may traverse through the retrieved portions of the data to identify a type. The type may be one of mirrored, striped, or parity. Based on the type of the portion of the data, the storage service may process the portion to reconstruct the entirety of the data.

It should be understood that the systems described above may provide multiple ones of any or each of those components and these components may be provided on either a standalone machine or, in some embodiments, on multiple machines in a distributed system. The systems and methods described above may be implemented as a method, apparatus or article of manufacture using programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof. In addition, the systems and methods described above may be provided as one or more computer-readable programs embodied on or in one or more articles of manufacture. The term "article of manufacture" as used herein is intended to encompass code or logic accessible from and embedded in one or more computer-readable devices, firmware, programmable logic, memory devices (e.g., EEPROMs, ROMs, PROMs, RAMs, SRAMs, etc.), hardware (e.g., integrated circuit chip, Field Programmable Gate Array (FPGA), Application Specific Integrated Circuit (ASIC), etc.), electronic devices, a computer readable non-volatile storage unit (e.g., CD-ROM, USB Flash memory, hard disk drive, etc.). The article of manufacture may be accessible from a file server providing access to the computer-readable programs via a network transmission line, wireless transmission media, signals propagating through space, radio waves, infrared signals, etc. The article of manufacture may be a flash memory card or a magnetic tape. The article of manufacture includes hardware logic as well as software or programmable code embedded in a computer readable medium that is executed by a processor. In general, the computer-readable programs may be implemented in any programming language, such as LISP, PERL, C, C++, C#, PROLOG, or in any byte code language such as JAVA. The software programs may be stored on or in one or more articles of manufacture as object code.

Claim 1:
A method for managing storage of data of a user across a plurality of third-party public storage service providers (<NUM>), the method comprising:
(a) receiving, by a storage service (<NUM>), a request to store data by a user, the storage service (<NUM>) configured to communicate with a plurality of third-party public storage service providers (<NUM>), and to maintain a plurality of storage vectors (<NUM>) included in each of the plurality of third-party public storage service providers (<NUM>), each storage vector (<NUM>) of the plurality of storage vectors configured to maintain data of a respective third-party public storage service provider (<NUM>) of the plurality of third-party public storage service providers (<NUM>);
(b) identifying, by the storage service (<NUM>), a policy for the user, the policy specifying usage of one or more of the plurality of third-party public storage service providers (<NUM>) based at least on a profile of the user;
(c) determining, by the storage service (<NUM>) based at least on the policy, one or more third-party public storage service providers (<NUM>) of the plurality of third-party public storage service providers (<NUM>) to use to store the data of the user,
(d) selecting, by the storage service (<NUM>), a first third-party public storage service provider from the plurality of third-party public storage service providers (<NUM>) responsive to determining that a location of the user is within a threshold distance of a location of a physical infrastructure of the first third-party public storage service;
(e) storing, by the storage service (<NUM>), a first portion of the data onto a first storage vector included in the first third-party public storage service provider of the one or more third-party public storage service providers (<NUM>); and
(f) storing, by the storage service (<NUM>), a second portion of the data onto one of a second storage vector included in a second third-party public storage service provider of the one or more third-party public storage service providers (<NUM>) or a storage (<NUM>) of the storage service;
wherein the method further comprises
selecting, by the storage service (<NUM>), a storage vector of the plurality of storage vectors (<NUM>) of the first third-party public storage provider, responsive to determining that a location of the storage vector in the first third-party public storage service provider (<NUM>) is within a threshold distance of the location of the user.