Abstract:
A cloud computing network device is disclosed. The device is configured to generate output data based on input data, wherein the output data is indicative of the input data, cause data indicative of the input data to be stored in a memory, and respond to instructions to access the input data by accessing the data stored in the memory.

Description:
CROSS REFERENCE TO RELATED APPLICATIONS 
       [0001]    This application claims the benefit of U.S. Provisional Application No. 61/734,521 filed Dec. 7, 2012, which is hereby incorporated by reference in its entirety and for all purposes. 
     
    
     FIELD OF THE INVENTION 
       [0002]    The present invention relates, generally, to cloud computing networks and, more particularly, to systems and methods for storing data on a cloud network. 
       BACKGROUND OF THE INVENTION 
       [0003]    A network of computing resources (e.g. hardware, software, memory, and peripherals), which are connected through a network, such as the Internet, may be referred to as a cloud computing network or a cloud. Devices (e.g. desktop computers, phones, laptop computers, and servers) which have access to a cloud, can utilize the computing resources of the cloud. In some implementations, given proper access authority, devices can access other devices connected to the cloud. 
         [0004]    Devices connected to the cloud generally have memory resources for storing data locally. Accordingly, a first device connected to the cloud may access data stored in the second device connected to the cloud. In addition, the cloud itself generally has memory resources for storing data in the cloud. Accordingly, the first and second devices may access data stored in the memory resources of the cloud. Storing data locally is significantly cheaper than storing data in the cloud, however, access to locally stored data may be slow, or impossible, if for example, the device storing the data locally is off. 
       SUMMARY OF THE INVENTION 
       [0005]    One implementation is a cloud storage controller. The controller includes an input port configured to receive input data from a first device, an output port configured to transmit signals indicative of output data to one or more second devices, an interface to a memory configured to store data, and a processor. The processor is configured to generate the output data based on the input data, where the output data is indicative of the input data, cause data indicative of the input data to be stored in the memory, and respond to instructions to access the input data by accessing the data stored in the memory. 
         [0006]    Another implementation is a cloud storage controller. The controller includes an interface to a memory configured to store data corresponding to data stored on a first device, an input port configured to receive instructions to change the data of the first device, and an output port configured to generate signals indicative of output data, and to transmit the output data to one or more other devices. The controller also includes a processor configured to, in response to the instructions, cause the data stored in the memory to change according to the instructions, determine whether the first device is available, and after determining that the first type device is available, cause information indicative of the change to be transmitted to the first device. 
         [0007]    Another implementation is a cloud storage controller. The controller includes an interface to a memory configured to store data corresponding to data stored on another device, and a processor. The processor is configured to access data characterizing the stored data corresponding to data stored on the other device, based on the accessed data, determine whether the data stored in the memory is to be maintained, and if the data stored in the memory is not to be maintained, cause the memory to not maintain the stored data. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0008]    The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate implementations of inventive concepts and, together with the description, serve to explain various advantages and principles of the invention. 
           [0009]      FIG. 1  is a block diagram illustrating an implementation of a cloud computing network. 
           [0010]      FIG. 2  is a flowchart diagram illustrating an implementation of a method of storing data to a cloud computing network. 
           [0011]      FIG. 3  is a flowchart diagram illustrating an implementation of a method of updating device data which has been changed on the cloud computing network. 
           [0012]      FIG. 4  is a flowchart diagram illustrating an implementation of a method of removing data stored on a cloud computing network. 
           [0013]      FIG. 5  is a block diagram illustrating an implementation of a device connected to a cloud computing network. 
       
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
       [0014]    Reference is made to implementations illustrated in the accompanying drawings. The same reference numbers are generally used throughout the drawings and the following description to refer to the same or like parts. 
         [0015]      FIG. 1  is a block diagram illustrating a cloud computing network  10 . As shown, the network  10  includes network resources  20  and a plurality of devices  30 . 
         [0016]    The network resources  20  may include, for example, computing resources such as servers, routers, computational resources, memory, databases, software, services such as printing, and the like. In some implementations, the network resources  20  are understood to be always available for use by the devices  30 . In this implementation, the network resources  20  include cloud storage controller  21 , and cloud storage  22 . 
         [0017]    The devices  30  may include such devices as desktop computers, phones, laptop computers, and servers. The devices  30  may be selectively connectable to the network resources  20 . For example, a user may turn on a laptop computer, connect to the cloud, access a file from a memory of the network resources  20 , and then disconnect from the cloud. 
         [0018]    A first method of allowing a user to share or access data from anywhere and anytime includes storing the data on the cloud network resources  20 . A second method of allowing the user to share were access data from anywhere and anytime include storing the data locally on one of the devices  30 . 
         [0019]    When data is stored on the cloud, the data is copied to storage that is a network resource  20 . Examples of such storage include services provided by Amazon S3, Dropbox, Google Drive, and Microsoft Skydrive. Using this method, once data is moved to the cloud, that data can be easily shared or accessed or modified from anywhere at any time. Some services, like dropbox, will also synchronize any modified data in the cloud back to the users device. This approach only allows sharing and access of data that is stored on the cloud. Accordingly, to allow for sharing or access, the user must upload the data to the cloud prior to sharing or access. Only after the file has been copied to the cloud, sharing of the file or access to it is possible. 
         [0020]    This approach has a benefit that access to the data is fast because the data may be in a datacenter that is well connected to the internet. In addition, availability of the data is high such that the data is available when needed because datacenters are designed to provide high availability compared to devices such as home computers. A downside to this approach is cost. It is expensive to keep data in a network resource  20  compared to keeping it on a device  30 . 
         [0021]    If data is stored locally, the data is stored, for example, in a local memory of a device  30 . For example, the data may be on a desktop computer (PC) at home. Software running on the PC allows remote access to data on this PC and allows data on the PC to be shared. The sharing may be, for example, with an HTTP URL that uniquely identifies the PC and the file (or folder or files) being shared. This approach has a benefit that there is no need to copy the data to the cloud. This method is therefore cheap since no cloud storage is involved. 
         [0022]    This approach has a downside that the access speed to the shared file is limited by the user&#39;s internet link. So sharing to even a small number of other users is not practical for most users. This approach also has a downside that access to a file is only possible when the device storing that file is connected to the network and is accessible. If there is a power failure at a home, the files on the at home device  30  can no longer be accessed. 
         [0023]    In some implementations, the network resources  20  include a cloud storage controller  21 , which is configured to selectively store certain data on cloud storage  22 . The cloud storage controller  21  allows devices  30  to use the expensive, high performance and high availability network resource memory for select data to maximize performance, and store other data locally to minimize cost. 
         [0024]    The cloud storage controller  21  attempts to predict which data from the local memories of the devices  30  is likely to be accessed by other devices  30 . The cloud storage controller  21  automatically stores a copy of the “likely to be accessed” data on a cloud storage  22 . Since the cloud storage  22  has high performance and high availability online storage, access to the data stored thereon is fast and highly available. In some implementations, the data stored in cloud storage  22  includes only a portion of a file stored locally on a device  30 . 
         [0025]    The performance of the system is based at least in part on the accuracy of the prediction performed by the cloud storage controller  21 . To perform this prediction, the cloud storage controller  21  may use information about habits of users of the devices  30 , information about the users activity from third parties, information on what files have been shared (so they are likely to be accessed), and information about and in the files and data itself. Other data and information sources can be used to improve the accuracy of the predictions. 
         [0026]    If requested data for a requesting device  30  is not available in the cloud storage  22 , the cloud storage controller  21  can (a) retrieve the data from a device  30  storing the requested data locally if the storing device  30  is available, and provide the requested data to the requesting device  30 , (b) schedule the data retrieval from the storing device  30  at a future time so that the requested data will be available when later requested, and indicate to the requesting device  30  that the requested data is not currently available, but may be available later, or (c) note that the storing device  30  is not available, and indicate to the requesting device  30  that the data is not available. 
         [0027]    In response to requests for data, the cloud storage controller  21  can also indicate to the requesting device  30  that the requesting device  30  can request the data directly from the storing device  30  data. In some implementations, the requesting device  30  may request the data directly from the storing device  30  without contacting the cloud storage controller  21 . 
         [0028]    When the storing device  30  is accessed through the cloud storage controller  21 , the requesting device  30  may receive no indication whether the data is sourced by cloud storage  22  associated with the cloud storage controller  21  or by the storing device  30 . 
         [0029]    In some implementations, to handle operations that change the state of the data stored in both the cloud storage  22  and locally on a storing device  30 , the cloud storage controller  21  is configured to propagate the results of the change operations to both the cloud storage  22  and the memory local to the storing device  30  before the cloud storage controller  21  provides a response to the initiator of the operation. 
         [0030]    In some implementations, the cloud storage controller  21  may provide a response to the initiator of the operation before the changes are propagated to the local memory of the storing device  30 . In such implementations, the cloud storage controller  21  may be configured to accumulate and optimize the propagation of changes to the memory local to the storing devices  30 . In such implementations, the change operations may be completed from the perspective of the initiators of the operations despite, for example, one or more of the storing devices  30  being unavailable. Once the cloud storage controller  21  has accepted an operation that changes the state of the data, the cloud storage controller  21  ensures that all normal subsequent requests for data reflect the results of the change operation regardless of whether the change has been propagated to the associated storing device  30 . Once the associated storing device  30  is available, the cloud storage controller  21  may determine whether to propagate the change to the local memory of the storing device  30 . 
         [0031]    This approach to selectively using the online storage may provide system performance similar to that of storing all data on the cloud with the cost similar to that of storing all data locally. The actual performance and cost depend on the size of the cloud storage  22  and the accuracy of the predictions made by the cloud storage controller  21  regarding the data that is likely to be requested. In some implementations, the chances that a request for data cannot be satisfied by the cloud storage controller  21  without accessing data stored locally are less than 1% using even a simple prediction method. Accordingly, various prediction methods may be used. 
         [0032]    In some implementations, the cloud storage controller  21  stores all data in category “A” (discussed below), stores low fidelity versions of data in category “B” (discussed below), and stores metadata for data in category “C” (discussed below). 
         [0033]    Category “A” data may include data with changes that have not been propagated to the local memory of the storing device  30 . Category “A” may also include data accessed, created, or modified within a specified time period, for example, within the last 30 days. Category “A” may also include data shared within a specified time period, for example, within the last 6 months. 
         [0034]    Category “B” data may include data which is not in Category “A” and meets other criteria, such as being created or modified within a time period, for example, within the last 60 days. The low fidelity versions of Category “B” data, may include data, such as photos and videos with enough resolution to be usable on a mobile device (e.g. 640 pixels longest edge for photos and 320 pixels longest edge for video). In some implementations, the 1st few pages of documents are generated as low fidelity versions of the data. 
         [0035]    Category “C” data may include all data locally stored. The metadata may include information such as filenames, file sizes, and dates associated with the data. Because the metadata is stored, users of devices  30  can browse the contents of all the other devices  30  while accessing only data stored on the cloud. 
         [0036]    In some implementations, different criteria may be additionally or alternatively used. For example, data accessed but not modified may be kept in the cloud storage  22  for a first time period, for example, a week, while modified files may be kept for a longer duration, for example, a month. The cloud storage controller  21  may be configured to use any of the following aspects of the data to determine whether the data is stored in the cloud storage  22 : 
         [0037]    (1) Last access time 
         [0038]    (2) Last modification time 
         [0039]    (3) Creation time 
         [0040]    (4) Size of file 
         [0041]    (5) Whether the data updated on the storing device  30   
         [0042]    (6) Sizes of low fidelity versions at different resolutions of interest 
         [0043]    (7) When the data was last shared 
         [0044]    (8) Number of devices or users shared with 
         [0045]    (9) Access pattern of the devices or users a file is shared with 
         [0046]    (10) Whether the data is related to terms recently used on the internet 
         [0047]    (11) Whether the data is related to birthdays, anniversaries or events in the life of users who have access to the data or who are related to such users 
         [0048]    (12) Whether the data is related to holidays, festivals, memorial days or other special days close to the current date. 
         [0049]    (13) Whether the data is related to activity of a user&#39;s or a user&#39;s relative&#39;s email or blog or company. 
         [0050]    (14) Any specific hints or requests from a user who may have or can get access to the data. 
         [0051]    The method for determining what data to store in cloud storage  22  can be tuned or customized in real time, for example, based on information as determined by the cloud storage controller  21 . The methods for determining can be specific to a device, a group of devices, a user, or a group of users. In some implementations, the cloud storage controller  21  is configured to determine patterns and to automatically tune the prediction and storage method based on access patterns. For example, the cloud storage controller  21  may determine that data that has been accessed once is rarely accessed again if not accessed within two weeks, and therefore, modifies the method for determining what data to store in the cloud storage  22  such that data that has been accessed once is discarded after two weeks of no activity. 
         [0052]      FIG. 2  is a flowchart diagram illustrating an implementation of a method of storing data to a cloud computing network. In some implementations, the method  200  is performed by a cloud storage controller such as cloud storage controller  21  discussed above with reference to  FIG. 1 . 
         [0053]    In step  210 , data stored locally on a device, such as one of the devices  30  of  FIG. 1 , is accessed. For example a first device  30  may access data stored locally on a second device  30  via the cloud storage controller  21 . 
         [0054]    In step  220 , the cloud storage controller determines whether the accessed data should be stored in a cloud storage such as cloud storage  22 . The determination may be made, for example, using one or more aspects of the criteria discussed above. 
         [0055]    In step  230 , if the cloud storage controller determines that the accessed data is to be stored, the cloud storage controller stores the accessed data in the cloud storage. 
         [0056]      FIG. 3  is a flowchart diagram illustrating an implementation of a method of updating device data which has been changed on the cloud computing network, where the changed data corresponds with data stored locally on a storing device. In some implementations, the method  300  is performed by a cloud storage controller such as cloud storage controller  21  discussed above with reference to  FIG. 1 . 
         [0057]    In step  310 , data stored in a cloud storage device, such as cloud storage  22  of  FIG. 1 , is changed. The change in the data may occur in response to an operation initiated by a device, such as one of the devices  30  of  FIG. 1 . For example, a user of a first device may access and edit a file stored on the cloud. In response to the saved edits, the data stored on the cloud representing the file is changed. 
         [0058]    In step  320 , the cloud storage controller determines whether the storing device is available. The storing device may be unavailable, for example, because the storing device is off or is not connected to a network. 
         [0059]    If the storing device is determined in step  320  to be unavailable, in step  330 , other operations are performed. The other operations may be unrelated to the changed data. However, some of the other operations may access the changed data, or further manipulate the changed data. The other operations accessing or manipulating the changed data operate on the changed data as if the changed data had been stored in the storing device. 
         [0060]    If the storing device is determined in step  320  to be available, in step  340 , the change data is written to the local memory of the storing device. Accordingly, the data of the storing device associated with data changed in the cloud is appropriately updated. 
         [0061]      FIG. 4  is a flowchart diagram illustrating an implementation of a method of removing data stored on a cloud computing network. In some implementations, the method  400  is performed by a cloud storage controller such as cloud storage controller  21  discussed above with reference to  FIG. 1 . 
         [0062]    In step  410 , data related to data stored in a cloud storage, such as cloud storage  22  of  FIG. 1 , is accessed. For example, the cloud storage controller may access metadata related to the data stored in the cloud storage. 
         [0063]    In step  420 , the cloud storage controller determines whether the data associated with the accessed data should be removed from the cloud storage. The determination may be made, for example, using criteria discussed above as applied to the accessed data. If the cloud storage controller determines that the data associated with the access data should not be removed from the cloud storage, the method returns to step  410 . 
         [0064]    In step  430 , if the cloud storage controller determines that the data associated with the accessed data is to be removed, the cloud storage controller removes the data associated with the accessed data from the cloud storage. For example, the cloud storage controller may remove indications that memory locations occupied by the data associated with the accessed data are occupied. 
         [0065]    In step  440 , the cloud storage controller determines whether additional data stored on the cloud storage should be analyzed for potential removal. If additional data is to be analyzed, the method returns to step  410 . 
         [0066]      FIG. 5  is a block diagram illustrating an implementation of a computing device  704 , such as the devices  30  or the cloud storage controller  21 . The above methods may be implemented by computer-program products that direct a computer system to perform the actions of the above-described methods and components. Each such computer-program product may comprise sets of instructions (codes) embodied on a computer-readable medium that directs the processor of a computer system to perform corresponding actions. The instructions may be configured to run in sequential order, or in parallel (such as under different processing threads), or in a combination thereof. 
         [0067]    Device  704  comprises a computer  602 , a monitor  606  coupled to computer  602 , one or more additional user output devices  730  (optional) coupled to computer  602 , one or more user input devices  740  (e.g., keyboard, mouse, track ball, touch screen) coupled to computer  602 , an optional communications interface  750  coupled to computer  602 , a computer-program product  705  stored in a tangible computer-readable memory in computer  602 . Computer-program product  705  directs device  704  to perform the above-described methods. Computer  602  may include one or more processors  760  that communicate with a number of peripheral devices via a bus subsystem  790 . These peripheral devices may include user output device(s)  730 , user input device(s)  740 , communications interface  750 , and a storage subsystem, such as random access memory (RAM)  770  and non-volatile storage drive  780  (e.g., disk drive, optical drive, solid state drive), which are forms of tangible computer-readable memory. 
         [0068]    Computer-program product  705  may be stored in non-volatile storage drive  780  or another computer-readable medium accessible to computer  602  and loaded into memory  770 . Each processor  760  may comprise a microprocessor, such as a microprocessor from Intel® or Advanced Micro Devices, Inc.®, or the like. To support computer-program product  705 , the computer  602  runs an operating system that handles the communications of product  705  with the above-noted components, as well as the communications between the above-noted components in support of the computer-program product  705 . Exemplary operating systems include Windows® or the like from Microsoft® Corporation, Solaris® from Oracle®, LINUX, UNIX, and the like. 
         [0069]    User input devices  740  include all possible types of devices and mechanisms to input information to computer system  602 . These may include a keyboard, a keypad, a mouse, a scanner, a digital drawing pad, a touch screen incorporated into the display, audio input devices such as voice recognition systems, microphones, and other types of input devices. In various embodiments, user input devices  740  are typically embodied as a computer mouse, a trackball, a track pad, a joystick, wireless remote, a drawing tablet, a voice command system. User input devices  740  typically allow a user to select objects, icons, text and the like that appear on the monitor  606  via a command such as a click of a button or the like. User output devices  730  include all possible types of devices and mechanisms to output information from computer  602 . These may include a display (e.g., monitor  606 ), printers, non-visual displays such as audio output devices, etc. 
         [0070]    Communications interface  750  provides an interface to other communication networks  795  and devices and may serve as an interface to receive data from and transmit data to other systems, WANs and/or the Internet. Embodiments of communications interface  750  typically include an Ethernet card, a modem (telephone, satellite, cable, ISDN), a (asynchronous) digital subscriber line (DSL) unit, a FireWire® interface, a USB® interface, a wireless network adapter, and the like. For example, communications interface  750  may be coupled to a computer network, to a FireWire® bus, or the like. In other embodiments, communications interface  750  may be physically integrated on the motherboard of computer  602 , and/or may be a software program, or the like. 
         [0071]    RAM  770  and non-volatile storage drive  780  are examples of tangible computer-readable media configured to store data such as computer-program product embodiments of the present invention, including executable computer code, human-readable code, or the like. Other types of tangible computer-readable media include floppy disks, removable hard disks, optical storage media such as CD-ROMs, DVDs, bar codes, semiconductor memories such as flash memories, read-only-memories (ROMs), battery-backed volatile memories, networked storage devices, and the like. RAM  770  and non-volatile storage drive  780  may be configured to store the basic programming and data constructs that provide the functionality of various embodiments of the present invention, as described above. 
         [0072]    Software instruction sets that provide the functionality of the present invention may be stored in RAM  770  and non-volatile storage drive  780 . These instruction sets or code may be executed by the processor(s)  760 . RAM  770  and non-volatile storage drive  780  may also provide a repository to store data and data structures used in accordance with the present invention. RAM  770  and non-volatile storage drive  780  may include a number of memories including a main random access memory (RAM) to store of instructions and data during program execution and a read-only memory (ROM) in which fixed instructions are stored. RAM  770  and non-volatile storage drive  780  may include a file storage subsystem providing persistent (non-volatile) storage of program and/or data files. RAM  770  and non-volatile storage drive  780  may also include removable storage systems, such as removable flash memory. 
         [0073]    Bus subsystem  790  provides a mechanism to allow the various components and subsystems of computer  602  communicate with each other as intended. Although bus subsystem  790  is shown schematically as a single bus, alternative embodiments of the bus subsystem may utilize multiple busses or communication paths within the computer  602 . 
         [0074]    A number of variations and modifications of the disclosed embodiments can also be used. Specific details are given in the above description to provide a thorough understanding of the embodiments. However, it is understood that the embodiments may be practiced without these specific details. For example, well-known circuits, processes, algorithms, structures, and techniques may be shown without unnecessary detail in order to avoid obscuring the embodiments. 
         [0075]    Implementation of the techniques, blocks, steps and means described above may be done in various ways. For example, these techniques, blocks, steps and means may be implemented in hardware, software, or a combination thereof. For a hardware implementation, the processing units may be implemented within one or more application specific integrated circuits (ASICs), digital signal processors (DSPs), digital signal processing devices (DSPDs), programmable logic devices (PLDs), field programmable gate arrays (FPGAs), processors, controllers, micro-controllers, microprocessors, other electronic units designed to perform the functions described above, and/or a combination thereof. 
         [0076]    Also, it is noted that the embodiments may be described as a process which is depicted as a flowchart, a flow diagram, a swim diagram, a data flow diagram, a structure diagram, or a block diagram. Although a depiction may describe the operations as a sequential process, many of the operations can be performed in parallel or concurrently. In addition, the order of the operations may be re-arranged. A process is terminated when its operations are completed, but could have additional steps not included in the figure. A process may correspond to a method, a function, a procedure, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination corresponds to a return of the function to the calling function or the main function. 
         [0077]    Furthermore, embodiments may be implemented by hardware, software, scripting languages, firmware, middleware, microcode, hardware description languages, and/or any combination thereof. When implemented in software, firmware, middleware, scripting language, and/or microcode, the program code or code segments to perform the necessary tasks may be stored in a machine readable medium such as a storage medium. A code segment or machine-executable instruction may represent a procedure, a function, a subprogram, a program, a routine, a subroutine, a module, a software package, a script, a class, or any combination of instructions, data structures, and/or program statements. A code segment may be coupled to another code segment or a hardware circuit by passing and/or receiving information, data, arguments, parameters, and/or memory contents. Information, arguments, parameters, data, etc. may be passed, forwarded, or transmitted via any suitable means including memory sharing, message passing, token passing, network transmission, etc. 
         [0078]    For a firmware and/or software implementation, the methodologies may be implemented with modules (e.g., procedures, functions, and so on) that perform the functions described herein. Any machine-readable medium tangibly embodying instructions may be used in implementing the methodologies described herein. For example, software codes may be stored in a memory. Memory may be implemented within the processor or external to the processor. As used herein the term “memory” refers to any type of long term, short term, volatile, nonvolatile, or other storage medium and is not to be limited to any particular type of memory or number of memories, or type of media upon which memory is stored. 
         [0079]    Moreover, as disclosed herein, the term “storage medium” may represent one or more memories for storing data, including read only memory (ROM), random access memory (RAM), magnetic RAM, core memory, magnetic disk storage mediums, optical storage mediums, flash memory devices and/or other machine readable mediums for storing information. The term “machine-readable medium” includes, but is not limited to portable or fixed storage devices, optical storage devices, and/or various other storage mediums capable of storing that contain or carry instruction(s) and/or data. 
         [0080]    While various embodiments of present invention have been described, it will be apparent to those of skill in the art that many more embodiments and implementations are possible that are within the scope of this invention. Accordingly, the present invention is not to be restricted except in light of the attached claims and their equivalents.