Cloud computing typically utilizes a collection of virtual machines or other remote servers, rather than local servers or personal computers, to process, manage, or store user data. A communications network typically interconnects the remote servers as nodes in a “weave” configuration to form a computing fabric. One or more nodes of the computing fabric can cooperate with one another to provide a computing environment that facilitates execution of various software applications for delivering cloud computing services.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
During operation of a computing fabric, interconnected nodes can provide a computing environment for executing various software applications. For example, one or more nodes can execute software applications designed for banking, e-commerce, content delivery, online gaming, and/or other suitable cloud computing services. Typically, the various nodes of the computing fabric rely upon a repository external to the nodes for storing “golden” images of software applications. However, such an arrangement can be inefficient and unreliable. For instance, the external image repository may be unavailable due to service failures or other causes. Even if the external image repository is available, the nodes may experience latency issues and/or difficulties in retrieving images of the software applications due to network slowdowns or failures.
Several embodiments of the disclosed technology can address at least some of the foregoing difficulties by implementing distributed storage of images of software applications in at least some nodes in a computing fabric. As such, the need for an external repository can be eliminated. In one implementation, a number of nodes in a computing fabric can individually store an identical image or copy of a software application. Among these nodes, one can be designated or elected as a primary node, and the other nodes can be designated as secondary nodes. The primary node can generate and store tracking information or metadata that tracks the stored images of the software application. The metadata can include, for example, file names, file sizes, versions, creation date, upload date, storage node ID, download history, and/or other suitable information.
When a request is received for a copy of the stored image, in certain embodiments, the primary node can simply provide the stored metadata associated with the stored image to a requestor. The requestor can then determine one or more available nodes/locations from which a copy of the stored image may be retrieved. In other embodiments, the primary node can instead make such a determination based on information in the metadata and supply the determined node/location information to the requestor. Because multiple copies of the image are stored in a distributed fashion at different nodes of the computing fabric, a copy of the requested image can be retrieved even when one or more nodes become unavailable. Thus, the distributed storage of images can be highly available, fault tolerant, and scalable. In addition, close proximity between the nodes of the computing fabric and the stored images can also reduce latency when compared to accessing an external repository.
Certain embodiments of systems, devices, components, modules, routines, and processes for distributed storage of application images in a computing fabric are described below. In the following description, specific details of components are included to provide a thorough understanding of certain embodiments of the disclosed technology. A person skilled in the relevant art will also understand that the disclosed technology may have additional embodiments or may be practiced without several of the details of the embodiments described below with reference to
As used herein, the term “computing fabric” generally refers to a computing system having a plurality of nodes interconnected by a communications network in a “weave” or other suitable configurations. A “node” in a computing fabric generally refers to a computing element. In certain embodiments, a computing element can include a physical server with one or more computing processors, memory devices, and/or peripherals. In other embodiments, a computer element can include a system, application, or other suitable types of virtual machine with virtualized processor, memory, and/or storage devices. Nodes of a computing fabric can be interconnected by a physical computer network and/or one or more virtual computer networks.
Also used herein, a “software application” generally refers to one or more programs configured to perform a set of coordinated functions, tasks, or activities. Example software applications can include those designed for banking, e-commerce, content delivery, online gaming, and/or other suitable computing services. Also used herein, the term “image” generally refers to a digital copy of a piece of computer software, for example, a software application or a portion thereof.
As shown in
The communications network 107 can include any suitable types of network. For example, in one embodiment, the communications network 107 can include an Ethernet or Fast Ethernet network having routers, switches, load balancers, firewalls, and/or other suitable network components. In other embodiments, the communications network 107 can also include an InfiniBand network with corresponding network components. In further embodiments, the communications network 107 can also include a combination of the foregoing and/or other suitable types of computer networks.
The individual nodes 105 can include a physical server or a virtual machine hosted on a physical server. As such, the individual nodes 105 can include one or more physical and/or emulated processors and memory devices that contain instructions for execution by the one or more processors to provide certain software components discussed in more detail below with reference to
In the illustrated embodiment, the nodes 105 are designated as a primary node 104 and first, second, third, and fourth secondary nodes 106a-106d, respectively. Such designations are for convenience of description. In certain embodiments, the primary node 104 and the secondary nodes 106a-106d can be generally similar in components and functions. In other embodiments, the primary node 104 and the secondary nodes 106a-106d can have different configurations, components, and/or functions. In one embodiment, the primary node 104 is designed by an administrator (e.g., a user 101) via the client device 102. In another embodiment, the nodes 105 can elect one of the nodes 105 to be the primary node 104. In further embodiments, more than one of the nodes 105 may be designated, elected, or otherwise identified as the primary node(s) 104 configured for failover and/or other suitable backup purposes.
The primary node 104 can be configured to facilitate distributed storage of copies of application images 112 in the computing fabric 103, and thus eliminate the need for an external repository. Example upload, download, and deletion operations for the application image 112 in the computing fabric 103 are described below with reference to
During an upload operation, the primary node 104 can initially receive a client request 110 from the client device 102 to upload an application image 112. In the illustrated embodiment, the second secondary node 106b first receives the client request 110 and forwards it to the primary node 104. In other embodiments, the client device 102 can transmit the client request 110 directly to the primary node 104 or via one of the other secondary nodes 106a, 106c, or 106d.
In response to receiving client request 110, the primary node 104 can generate and store a record of image metadata 114 associated with the application image 112. The image metadata 114 can include a file name, file size, version, creation date, upload date, storage node ID, download history, and/or other suitable information. The primary node 104 can obtain at least one of the foregoing parameters from the client request 110 and can also assign at least one of the foregoing parameters by itself. For example, the primary node 104 can assign a version, an upload date, or other suitable information for the application image 112. The primary node 104 can then receive the application image 112 from the client device 102 via the computer network 117 according HTTP, FTP, or other suitable protocols. Even though the request 110 and the application image 112 are shown in
Upon receiving the application image 112, the primary node 104 can store a copy of the application image 112 along with associated image metadata 114 locally, for example, in a physical and/or emulated storage device (not shown). The primary node 104 can also transmit a copy of the associated image metadata 114 to one or more secondary nodes 106a-106d. In certain embodiments, the primary node 104 can select the one or more of the secondary nodes 106a-106d randomly, based on a proximity of physical or logical locations of the nodes 105, based on a storage capacity of the nodes 105, or based on other suitable conditions. In other embodiments, the primary node 104 does not select the secondary nodes 106a-106d, but instead transmits a copy of the image metadata 114 to every secondary node 106a-106d.
In
Based on the received confirmations 116, the primary node 104 can then update the image metadata 114 associated with the application image with, for example, storage ID(s) indicating nodes 105 at which a copy of the application image 112 is stored. In the illustrated example, the storage IDs can include IDs associated with the primary node 104 and the first and second secondary nodes 106a and 106b. The primary node 104 can also update the upload date, version, and/or other information associated with the application image 112.
The primary node 104 can also be configured to generate a response 118 indicating to the client device 102 that the requested upload is completed. In one embodiment, the primary node 104 can indicate upload completion when the confirmations 116 are received from more than 10%, 20%, 30%, 40%, 50%, or any other suitable value of the nodes 105. In other embodiments, the primary node 104 can indicate upload completion when the confirmations 116 are received from a target number (e.g., 5) of the nodes 105. In further embodiments, the primary node 104 can indicate upload completion based on other suitable criteria.
In response to the received client request 110′, the primary node 104 can determine available node(s) 105 at which a copy of the application image 112 is stored or is available. In certain embodiments, the primary node 104 can determine the available node(s) 105 based on information contained the stored image metadata 114 (e.g., the storage ID(s)). In other embodiments, the primary node 104 can also determine the available node(s) 105 based on a current status of the secondary nodes 106a-106d (e.g., online, offline, failure, alarm, etc.), a current traffic condition of the communications network 117 (
As shown in
The primary node 104 can also be configured to provide a copy of the stored application image 112 to one of the nodes 105 in the computing fabric 103. For example, as illustrated in
In further embodiments, the primary node 104 can select one of the nodes 105 based on at least one of availability, online status, network traffic condition, maintenance schedule, and/or other suitable parameters of the nodes 105 storing a copy of the application image 112. The primary node 104 (or other suitable network components, not shown) can obtain such information by, for example, periodically polling the one or more nodes 105 and store the obtained information in, for example, the image metadata 114. In other examples, the primary node 104 can also receive such information via the confirmation 116. In yet further embodiments, the primary node 104 can select one of the nodes 105 based on a combination of the foregoing and/or other suitable parameters. Upon selecting one of the nodes 105 (e.g., the second secondary node 106b in
In further embodiments, the primary node 104 can also inform the third secondary node 106c of the selection. In yet further embodiments, the primary node 104 can simply provide the image metadata 114 to the third secondary node 106c without selecting one of the nodes 105. Instead, the third secondary node 106c can select one of the nodes 105 based on information contained in the image metadata 114. The third secondary node 106c can then obtain a copy of the application image 112 from the second secondary node 106b. Once the file transfer is completed, the third secondary node 106c can transmit a confirmation 116 to the primary node 104 indicating accordingly. In response to the received confirmation 116, the primary node 104 can update the image metadata 114 indicating that a copy of the application image 112 is now also available on the third secondary node 106c as well.
Embodiments of the computing fabric 103 described above with reference to
In operation, the primary node 104 can be configured to select one or more secondary nodes 106a-106b for storing at least one portion of the uploaded application image 112. The selection criteria can be generally similar to those described above with reference to
The primary node 104 can further be configured to generate and store the image metadata 114 that tracks storage locations/nodes containing different portions of the application image 112. When a client request 110 is received for a copy of the application image 112, in one embodiment, the primary node 104 can determine one or more suitable nodes 105 from which the different portions 112a and 112b may be retrieved. For example, as shown in
In another example, the third secondary node 106c can transmit a client request 110″ to the primary node 104 for a complete copy of the application image 112. In response to the received client request 110″, the primary node 104 can determine that a copy of the first portion 112a is available from the first secondary node 106a, and that a copy of the second portion 112b is available from the second secondary node 106b. The primary node 104 can then transmit instructions 122 to each of the first and second secondary nodes 106a and 106b to transfer a copy of the stored first and second portions 112a and 112b to the third secondary node 106c, respectively.
Upon completion of the transfer, the third secondary node 106c can assemble a complete copy of the application image 112 from the first and second portions 112a and 112b. The third secondary node 106c can then transmit a confirmation 116 to the primary node 104 indicating accordingly. The primary node 104 can then update the image metadata 114 to indicate that a copy of both the first and second portions 112a and 112b are stored on the third secondary node 106c. In further embodiments, the primary node 104 can simply provide node/location availability information of the first and second portions 112a and 112b to the third secondary node 106c. In turn, the third secondary node 106c can determine from which node/location to retrieve a copy of the first and second portions 112a and 112b based on at least one of a proximity, network traffic condition, node/network load condition, and/or other suitable criteria.
Several embodiments of the computing fabric 103 can have highly available, fault tolerant, and scalable distributed storage of the application image 112. Because multiple copies of the application image 112 are stored in a distributed fashion at different nodes 105, one copy of the application image 112 can be available even when one or more of the nodes 105 fail or otherwise become unavailable. For example, referring to
Even though the computing framework 100 is described above as having particular components, the computing framework 100 can include additional and/or different hardware/software components than those in
In other embodiments, components of the computing fabric 103 may also be configured to perform additional and/or different operations. For example, in certain embodiments, the primary node 104 can be configured to validate a received client request 110 before performing an upload, download, deletion, or other operation. In other examples, the primary node 104 can also be configured to check if a particular application image 112 is stored in the computing fabric 103, or to list all application images 112 stored in the computing fabric 103 in response to a client request 110.
In any of the foregoing embodiments described above, upload, download, deletion, and other suitable types of operations can also be implemented as uninterruptible or commonly referred to as “atomic” operations. For example, during the upload operation described above with reference to
Components within a system may take different forms within the system. As one example, a system comprising a first component, a second component and a third component can, without limitation, encompass a system that has the first component being a property in source code, the second component being a binary compiled library, and the third component being a thread created at runtime. The computer program, procedure, or process may be compiled into object, intermediate, or machine code and presented for execution by one or more processors of a personal computer, a network server, a laptop computer, a smartphone, and/or other suitable computing devices. Various implementations of the source, intermediate, and/or object code and associated data may be stored in a computer memory that includes read-only memory, random-access memory, magnetic disk storage media, optical storage media, flash memory devices, and/or other suitable computer readable storage media excluding propagated signals.
As shown in
The software modules 141 can include an optional validation module 142, a metadata module 144, a control module 146, and a response module 148 operatively coupled to one another. In one embodiment, all of the software modules 141 can reside on a single computing device (e.g., a network server). In other embodiments, the software modules 141 can also reside on a plurality of distinct computing devices. In further embodiments, the software modules 141 may also include interface modules, input/output modules, and/or other suitable modules (not shown). The optional validation module 142 can be configured to validate any received client request 110 based on a security credential, a IP address from which the client request 110 is received, or other suitable conditions. The metadata module 144 can be configured to generate, update, and store the image metadata 114 associated with the application image 112 in the storage 150, as described in more detail above with reference to
The control module 146 can be configured to perform requested operations based on the received client request 110. For example, in one embodiment, if the received client request 110 indicates that an upload operation is requested, the control module 146 can be configured to receive and store the application image 112 in the storage 150, as described in more detail above with reference to
The response module 148 can be configured to generate and transmit a response 118 to the client device 102 (
As shown in
In response to determining that the client request is valid, the process 200 proceeds to receiving the application image from the client device 102 and storing the application image at, for example, the primary node 104 at stage 206. The process 200 also includes another stage 208 at which one or more secondary nodes 106a-106d (
The process 200 can then include transmitting, for example, from the primary node 104, image metadata associated with the received application image and/or the application image to the identified one or more secondary nodes 106a-106d at stage 210 and 211, respectively. Even though stages 210 and 211 are shown in
The process 200 can then include receiving confirmation(s) from the one or more secondary node 106a-106d at stage 212. The process 200 can then include a decision stage 214 to determine if the upload operation is completed successfully. Various criteria for such a determination are described in more detail above with reference to
As shown in
The file name field 302 can contain, for example, a text string representing a file name associated with an application image. The file size field can contain an integer, floating point, or other suitable types of value representing a file size associated with the application image. The version field 306 can contain, for example, an integer, decimal, or other suitable version value representing a version associated with an application image. In one embodiment, the version value may be assigned by the primary node 104 (
The creation date field 308 can contain, for example, a date, time, or other suitable values representing a date or time at which the application image was created. The upload date field 310 can contain, for example, a date, time, or other suitable values representing a date or time at which the application image is received from the client device 102. The storage node list field 312 can contain a list of node IDs associated with nodes 105 (
Depending on the desired configuration, the processor 804 may be of any type including but not limited to a microprocessor (pP), a microcontroller (pC), a digital signal processor (DSP), or any combination thereof. The processor 804 may include one more levels of caching, such as a level one cache 810 and a level two cache 812, a processor core 814, and registers 816. An example processor core 814 may include an arithmetic logic unit (ALU), a floating point unit (FPU), a digital signal processing core (DSP Core), or any combination thereof. An example memory controller 818 may also be used with processor 804, or in some implementations memory controller 818 may be an internal part of processor 804.
Depending on the desired configuration, the system memory 806 may be of any type including but not limited to volatile memory (such as RAM), non-volatile memory (such as ROM, flash memory, etc.) or any combination thereof. The system memory 806 may include an operating system 820, one or more applications 822, and program data 824. The program data 824 may include, for example, the application image 112 and the image metadata 114. This described basic configuration 802 is illustrated in
The computing device 800 may have additional features or functionality, and additional interfaces to facilitate communications between basic configuration 802 and any other devices and interfaces. For example, a bus/interface controller 830 may be used to facilitate communications between the basic configuration 802 and one or more data storage devices 832 via a storage interface bus 834. The data storage devices 832 may be removable storage devices 836, non-removable storage devices 838, or a combination thereof. Examples of removable storage and non-removable storage devices include magnetic disk devices such as flexible disk drives and hard-disk drives (HDD), optical disk drives such as compact disk (CD) drives or digital versatile disk (DVD) drives, solid state drives (SSD), and tape drives to name a few. Example computer storage media may include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data.
The system memory 806, removable storage devices 836, and non-removable storage devices 838 are examples of computer readable storage media. Computer readable storage media include storage hardware or device(s), examples of which include, but not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other media which may be used to store the desired information and which may be accessed by computing device 800. Any such computer readable storage media may be a part of computing device 800. The term “computer readable storage medium” excludes propagated signals and communication media.
The computing device 800 may also include an interface bus 840 for facilitating communication from various interface devices (e.g., output devices 842, peripheral interfaces 844, and communication devices 846) to the basic configuration 802 via bus/interface controller 830. Example output devices 842 include a graphics processing unit 848 and an audio processing unit 850, which may be configured to communicate to various external devices such as a display or speakers via one or more A/V ports 852. Example peripheral interfaces 844 include a serial interface controller 854 or a parallel interface controller 856, which may be configured to communicate with external devices such as input devices (e.g., keyboard, mouse, pen, voice input device, touch input device, etc.) or other peripheral devices (e.g., printer, scanner, etc.) via one or more I/O ports 858. An example communication device 846 includes a network controller 860, which may be arranged to facilitate communications with one or more other computing devices 862 over a network communication link via one or more communication ports 864.
The network communication link may be one example of a communication media. Communication media may typically be embodied by computer readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave or other transport mechanism, and may include any information delivery media. A “modulated data signal” may be a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media may include wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, radio frequency (RF), microwave, infrared (IR) and other wireless media. The term computer readable media as used herein may include both storage media and communication media.
The computing device 800 may be implemented as a portion of a small-form factor portable (or mobile) electronic device such as a cell phone, a personal data assistant (PDA), a personal media player device, a wireless web-watch device, a personal headset device, an application specific device, or a hybrid device that include any of the above functions. The computing device 800 may also be implemented as a personal computer including both laptop computer and non-laptop computer configurations.
Specific embodiments of the technology have been described above for purposes of illustration. However, various modifications may be made without deviating from the foregoing disclosure. In addition, many of the elements of one embodiment may be combined with other embodiments in addition to or in lieu of the elements of the other embodiments. Accordingly, the technology is not limited except as by the appended claims.
This application is a non-provisional of and claims priority to U.S. Provisional Application No. 62/153,917, filed on Apr. 28, 2015.
Number | Date | Country | |
---|---|---|---|
62153917 | Apr 2015 | US |