Downloading of server-based content through peer-to-peer networks

A system is described for downloading server-based content to peers in a P2P network. The server-based content can be partitioned and different peers can be given priority for downloading the different parts. A client on each peer can view what content is available on each of the other peers as well as what content is available on a virtual peer, which represents content on the server and only makes content that exists on the server and not on any peers available for download. Consequently, a client on a peer requesting to download the content can download the content from the peers and the virtual peer based on a file sharing protocol, such as BitTorrent.

TECHNICAL FIELD

The present disclosure generally relates to techniques for data sharing in peer-to-peer networks and more specifically to techniques for downloading server-based content via multiple peers.

BACKGROUND

In a typical peer-to-peer (P2P) network, multiple computing devices, or “peers”, are connected over the network in a way that allows the peers to share various resources among themselves. For example, in this architecture a peer that requests certain content, such as a file, can download the content from one or more peers on the network instead of from a server. Generally, in such networks a client application operates on each peer to enable the sharing of resources among the peers. Each client may operate based on a protocol, such as BitTorrent, which allows the peer to download different parts of a file from other peers and combine the downloaded parts to reproduce the file.

This approach offers several advantages over traditional server-based infrastructures. For example, with P2P networking, a peer can access information available on multiple peers, not just information that is available on a server. Also, data transfer may be performed more efficiently because it can utilize local networks and the flow of data can be distributed among multiple peers instead of being centralized on a server, which can contribute to faster download speeds, decreased network costs, and reduced server crowding.

P2P networks are sometimes used to improve the efficiency of data transfer within the organization and to reduce associated network costs. For example, computing devices in an enterprise may be connected over a high efficiency local network to produce a P2P network over which content can be distributed and shared throughout the enterprise.

However, not all data transfer scenarios are good candidates for traditional P2P networking topologies. In certain situations, it can also be important to provide a single central server or location that contains a copy of all data shared amongst the totality of the peers. For example, in many enterprise deployments, it is important that all the data contained on any single employee device is also backed up to a single data store or backup server. Such centralized backup data may then be used to restore a device in case of failures. Similarly, a central administrative server may be utilized for managing employee devices and distributing applications and other data to such devices. For example, an administrator may provision an employee's device by remotely adding the necessary software on the device to make the device ready for use. Such enterprise deployments may still benefit from certain P2P data transfer techniques that improve efficiency and lessen the overall load on the central server if the data is available on a peer device. However, if a file exists on a central server but not on any peers, a peer may not be able to leverage the P2P network to perform the download. Instead, the file may need to be requested directly from the sever. Particularly in cases where multiple peers request the same content from the server at the same time, problems of network congestion and server crowding can arise. The issues are exacerbated when the requested content is large. Furthermore, the transfer of large amounts of data from the remote server as a result of multiple peers downloading the same server-based content can involve associated network costs.

A more efficient approach is desirable for downloading server-based content via P2P networks.

DETAILED DESCRIPTION

Systems and methods in accordance with various embodiments of the present disclosure overcome at least some of the above-mentioned shortcomings and deficiencies by providing more efficient ways to download content located on a single central server to computing devices in a P2P network. In particular, embodiments described herein provide systems and method for efficiently transferring portions of server-based content to different peers in the P2P network, such that any peer can subsequently download the entire content by obtaining parts from other peers, without needing to access the server.

In a typical scenario, peers in a P2P network may be connected by a LAN (Local Area Network), and the server may be accessible by the peers via a WAN (Wide Area Network), such as the Internet. For example, the peers may be computing devices located in an enterprise connected to each other over a local (“on-premises”) network in the enterprise, and each peer may have Internet access to a server located in a remote data center. Transfer of data between peers may be performed quickly, efficiently, and with low cost to the enterprise by utilizing the local network. Transfer of data between the server and the peers, on the other hand, may be less efficient and more costly because it is performed over the Internet connection.

To improve efficiency and reduce costs of data transfer, enterprises may employ systems and protocols that allow endpoints within the enterprise to obtain data over local networks instead of via servers, such as P2P file sharing systems and protocols. Various P2P file sharing systems and protocols are commercially available and well known in the field. Such systems and protocols may operate by allowing each device or “peer” in the P2P network to discover what content (such as files, applications, etc.) is available on other peers and download the content directly from the other peers. One particular example of a P2P file sharing protocol is the BitTorrent protocol.

With BitTorrent, computing devices connected by a network and running the BitTorrent client become peers. When content (e.g., file, application, etc.) is requested by a peer, a “swarm” is identified, which is the peers that have all or a portion of the content and are in the process of sending or receiving it (peers that are in the process of downloading the file will have portions of it). To identify the swarm, the client may communicate with a server (called a tracker) that finds peers with the complete or partial content, or that are in the process of sending or receiving it. The peer then begins receiving pieces of the content from different peers in the swarm simultaneously. Pieces are typically downloaded non-sequentially and are rearranged into the correct order by the BitTorrent client, which monitors which pieces it needs, and which pieces it has and can upload to other peers. As the peer receives a new piece of the content, it becomes a source of that piece for other peers in the swarm requesting that content. Once the entire content is downloaded to the peer, the peer can remain in the swarm and continue serving as a source of the content for other peers in the swarm requesting that content.

In various embodiments, a P2P file sharing protocol such as BitTorrent, may be modified with the techniques described herein to account for a topology that includes a single central server containing all data across the totality of all peers. In other embodiments, different applicable protocols and systems may be implemented to practice the techniques described herein, which protocols and systems may be previously existing or newly developed and used with the invention.

In various embodiments, in order for a peer to be able to download content from the P2P network, a complete copy of the content needs to be available on at least one peer. In cases where a copy of the content is not available on any peers but only on a server, the peers may need to download the content from the server. However, as discussed above, the server connection may be inefficient and costly. Further, when numerous peers attempt to access the server simultaneously, overcrowding of the server may result.

For example, such a situation may be encountered when an administrator attempts to deploy a server-stored application to numerous endpoints in the enterprise. Once the application is assigned to the multiple endpoints, each endpoint may simultaneously attempt to download the application from the server, which can cause overcrowding of the server. Also, particularly in cases where the application is considerably large, the enterprise may incur significant costs due large data transfers from the remote server to the endpoints.

To address such situations, embodiments described herein provide more efficient ways to download server-based content to peers in P2P networks, leveraging P2P file sharing capabilities. The process can begin by receiving a request to download the server-based content to computing devices in a P2P network. In response to the request, the content can be divided into multiple portions and each portion can be downloaded to a different peer, or different peers can be given priority for downloading different portions. A client application running on each peer can determine what portions of the content are available on each of the other peers and what content is available on the server. Consequently, to download the content to a peer, the client can download portions of the content available on other peers from such peers and only retrieve portions from the server if those portions are not available on any peers.

In this way, once a portion of the server-based content is downloaded to a peer, other peers may no longer need to access the server to obtain such portion and can instead obtain the portion from the peer, and other peers can subsequently obtain the content from those peers. As a result, the transfer of data from the server is minimized because once a piece of content is downloaded to one or more peers, other peers no longer need to access the server to obtain that piece, provided that at least one peer containing the piece is available and remains online.

In a preferred embodiment, the system can be implemented by introducing the concept of a virtual peer. The virtual peer can appear to each peer's client as another peer on the network that represents content on the central server. When a client downloads content from the virtual peer, the content would be downloaded from the server. Hence, a peer's client can download content using the same framework as in normal P2P file sharing except now with the addition of the virtual peer. The virtual peer can be treated by each client in the same way as any other peer, with the exception that content would be downloaded from the virtual peer only in the event that the content is not available on any other peers. For example, the virtual peer can be configured to mark content that is not available on any other peer as “available”, and to mark content that is available on other peers as “missing”. This way, content may be downloaded from the virtual peer (i.e., the server) only in the case that it is not available on any other peers, thus minimizing server access.

Hence, in embodiments utilizing virtual peers, server-based content can be partitioned and different peers can be given priority for downloading the different parts of the content. The client on each peer can then view what content is available on each of the other peers as well as what content is available on the virtual peer, which marks content that exists on the server and not on any peers as “available” and content that exists on any peers as “missing”. Consequently, a client on a peer requesting to download the content can download the content from the peers and the virtual peer.

FIG.1illustrates an example of a system for downloading server-based content to a P2P network, in accordance with various embodiments. As illustrated in the example ofFIG.1, a P2P network100can include peers102-1,102-2, through102-n. The P2P network100can include any number of peers (e.g., tens, hundreds, thousands, etc.). A peer (e.g.,102-1,102-2, through102-n) may be any type of computing device, such as a laptop, desktop computer, smartphone, tablet, and so on. The peers (102-1,102-2, through102-n) may be connected by any type of network (106) allowing the peers to communicate and exchange information with each other. In an ideal embodiment, the network106would be an efficient and low cost network, such as a LAN in an enterprise.

Each peer (102-1,102-2, through102-n) can contain a client application (108-1,108-2, through108-n) executing thereon that performs functions such as coordinating data sharing between the peers, as described further below. In various embodiments, a client (e.g.,108-1,108-2, through108-n) can implement a modified file sharing protocol to perform various features described herein.

The example ofFIG.1also includes a server112, which may be located in a data center. Each peer (102-1,102-2, through102-n) may be able to communicate with the server over a network110. The network110may be a less efficient and more costly network than network106, such as the Internet. The server112contains content116, which may be a file, a program, or any other set of electronic content that may be requested by one or more peers (102-1,102-2, through102-n). For example, users of peers (102-1,102-2, through102-n) may request to download the content116or an IT administrator may assign the content116(which may be in this case an application) to the peers (102-1,102-2, through102-n).

In various embodiments, the client (e.g.,108-1,108-2, through108-n) can receive the request to download the content116. In response to the request, the client (e.g.,108-1,108-2, through108-n) can discover which peers (e.g.,102-1,102-2, through102-n) in the P2P network100contain portions of the content116and what portions of the content116the peers (102-1,102-2, through102-n) have. Various known P2P file sharing systems and protocols provide a framework for discovering what content is available on other peers in P2P networks and the details of the discovery process are not discussed in detail herein so as not to obscure the salient points of the invention.

After discovering which peers (102-1,102-2, through102-n) contain parts of the content116, the client (e.g.,108-1,108-2, through108-n) can download portions of the content116available on the other peers (102-1,102-2, through102-n) from such peers. Various known P2P file sharing systems and protocols provide a framework for separating content into portions and downloading the portions from multiple peers in a P2P network environment, and the details of the process are not discussed in detail herein so as not to obscure the salient points of the invention.

In various embodiments, if any portions of content116are not available on the peers (102-1,102-2, through102-n), then the client (108-1,108-2, through108-n) can download those portions from the server112. For example, this can be performed by creating a virtual peer130representing the server112. The virtual peer130can appear to each client (e.g.,108-1,108-2, through108-n) as another peer in the P2P network100containing portions of the content116, while the virtual peer130actually represents the server112. To obtain a part of the content116from the virtual peer130, a client (108-1,108-2, through108-n) can download the part from the server112. However, to prevent clients (108-1,108-2, through108-n) from downloading parts of content116from the server112when such parts are available on the P2P network100(i.e., on a peer (e.g.,102-1,102-2, through102-n)), the virtual peer130can be configured to mark parts of content116as “available”, only when such parts are not available on the network100. Parts that are available on the network100can be marked as “missing”.

For example, the virtual peer130in the example ofFIG.1displays parts140of the content116. In this case, the content116has been divided into seven parts140, p1through p7. In the virtual peer130, parts p1and p2are marked with the letter “M”, to signify that those parts are missing because those parts are available in the P2P network100. That is, parts p1and p2of the content116are available on one of the peers102-1,102-2, through102-n. Parts p3through p7, however, are marked with the letter “A”, to signify that those parts are available, because those parts are not available in the P2P network100. That is, parts p3through p7of the content116are not available on any of the peers102-1,102-2, through102-n.

Thus, with this framework, each peer's client (108-1,108-2, through108-n) can view the portions of content116available on other peers (102-1,102-2, through102-n), and it can view the portions of content116not available on any peers but available on the server112via the virtual peer130. Then, the client (108-1,108-2, through108-n) can download the content116by obtaining portions from other peers (108-1,108-2, through108-n) and from the server112(via the virtual peer130). In various embodiments, because the virtual peer130can appear as a regular peer, the clients (108-1,108-2, through108-n) can perform the downloading of content116from other peers and from the server112, as well as share downloaded portions of content116with other peers (e.g.,102-1,102-2, through102-n).

FIG.2Aillustrates an example first step of a peer downloading portions of content from the P2P network and from the virtual peer, in accordance with various embodiments. The example ofFIG.2Aillustrates a downloading peer202, which can be any peer in the P2P network100that has requested to download the content116. That is, the downloading peer202can be any of peers102-1,102-2, through102-n. To download the content, the client (e.g.,108-1,108-2, through108-n) of the downloading peer202discovers what portions of the content are available on the virtual peer130and what portions of the content are available on other peers on the network100.FIG.2Aillustrates an example of such available portions of content116in the virtual peer130and in other peers in the P2P network100.

As illustrated in the example, the content116includes seven portions, p1through p7. A diagram206,204,140representing portions of content are illustrated in the P2P network100, the downloading peer202, and the virtual peer140, respectively, to illustrate by way of example portions of content116that might be available or missing in each of the network100, the downloading peer202, and the virtual peer, respectively. The letter “A” in a corresponding portion of content indicates that the portion is available in the location. The letter “M” in a corresponding portion of content indicates that the portion is missing in the location. For example, in the downloading peer202, all portions are marked “M”, indicating that all portions of the content116are missing (e.g., because the downloading peer202has just begun the download process and no portions of the content116have yet been transferred).

In the P2P network100, parts p1and p2are marked with the letter “A”, to signify that those parts are available in the network100. That is, parts p1and p2are available on at least one of the peers102-1,102-2, through102-n. For example, those parts may have been already downloaded by some peers102-1,102-2, through102-nfrom the server112. Parts p3through p7, however, are marked with the letter “M”, to signify that those parts are missing in the P2P network100. That is, parts p3through p7of the content116are not available on any of the peers102-1,102-2, through102-n.

In the virtual peer130, parts p1and p2are marked with the letter “M”, indicating that those parts are missing. In the case of the virtual peer130, those parts may actually be present on the server112, however they can be marked as “missing” because those parts are available in the P2P network100(in order to prevent peers from downloading these parts from the server112, since they are available on the peer network100). Parts p3through p7, however, are marked with the letter “A”, to signify that those parts are available, because those parts are not available in the P2P network100. That is, parts p3through p7of the content116are not available on any of the peers102-1,102-2, through102-n

The client of the downloading peer202, when requested to download the content116, would see the available portions206on the network100and the available portions140on the virtual peer130and begin to download the portions that it needs (i.e., portions missing on the peer202) from the virtual peer130and from peers in the network100. As illustrated, the downloading peer202can obtain portions p1and p2by downloading them from peers in the P2P network100and portion p3from the virtual peer (by downloading it from the server112). As mentioned, the virtual peer130may appear to the client of the downloading peer202as just another peer in the P2P network100. Hence, the client may operate according to any file sharing protocol, such as BitTorrent, to perform the functions of discovering portions of content on the P2P network100and virtual peer130, and to coordinate the download of parts from the virtual peer130and from the network100.

FIG.2Billustrates an example second step of a peer downloading portions of content from the P2P network and from the virtual peer, in accordance with various embodiments. As illustrated in the example ofFIG.2B, the downloading peer202now has a parts p1through p3of the content, which where were downloaded to the peer202in the first step as illustrated inFIG.2A.

The P2P network100, still has parts p1and p2, as it did previously, but now it also has parts p4and p5, indicating that there are now some peers in the network (e.g.,102-1,102-2, through102-n) that have parts p4and p5. This could happen, for example, if peers that have parts p4and p5, which were not previously online, have now come online. Also, with some protocols, such as BitTorrent, as soon as a peer downloads a part of content, that part can become available for other peers to download. Hence, parts p4and p5may have been downloaded by some peers (e.g.,102-1,102-2, through102-n) in the network100(e.g., from the server112) and are now available for peer202to download.

The virtual peer130shows parts p1, p2, p3, p4, and p5as missing (because those parts are available on the network100and the downloading peer202) and parts p6and p7as available (because those parts are not available on the network).

The client of the downloading peer202can again view the available portions206on the network100and the available portions140on the virtual peer130and download the portions that it needs (i.e., missing portions p4through p7) from the virtual peer130and from peers in the network100. As illustrated, the downloading peer202can obtain portions p4and p5by downloading them from peers in the P2P network100and portion p6from the virtual peer130(by downloading it from the server112).

As illustrated inFIGS.2A and2B, in this way, as available content on the peer network100continues to change (e.g., due to peers downloading content from the server or peers coming on- or off-line), the system can update the available content on the virtual peer130accordingly, such that content might only be downloaded from the server112when it is not available on the peer network100.

As mentioned previously, one of the advantages of the described invention is in reducing data transfer and simultaneous requests on servers (e.g.,112). However, even with a system where a downloading peer only requests content from the server when the content is not available on any peers, issues such as server overcrowding and downloading of the same data by peers may be encountered when a particular part of the content is not available on any peers and multiple downloading peers simultaneously request this same portion of content from the server. For example, this may be the case where multiple peers begin downloading new content and all the peers simultaneously request the first portion of content from the server.

In various embodiments, to address such issues, peers downloading content from the server can be assigned different priority for downloading specific portions of content that is only available on the server (or content that is displayed in the virtual peer). This may prevent multiple peers from downloading the same portions of the content at the same time. The download priority can be distributed so that different peers download different portions of the server-only content. Once the parts of the content are downloaded from the server to different peers, a peers may no longer request those parts from the server because those parts will be available on other peers (a virtual peer may make those parts unavailable once they are available on the peers).

In various embodiments, when a peer is assigned priority for a specific part of the content, the peer can be made to begin the process of downloading the content by downloading that specific part. For example, download priority can be assigned to a particular peer by making the peer begin the content download process by download certain portions of the server-only content (or content displayed in a virtual peer). In various embodiments, download priority can be assigned to a particular peer by making the peer download certain portions of the server-only content (or content displayed in a virtual peer) before it downloads any other portions of the server-only content. In these cases, different peers may be assigned priority for different portions of the server-only content, in order to limit the number of peers downloading the same content simultaneously. This way, when different peers are assigned priority for different parts of the server-only content (content on the virtual peer), the amount of duplicate content that is downloaded to the P2P network from the server (and the likelihood of server overcrowding) can be reduced.

In various embodiments, assigning download priority to peers for particular parts of content may be achieved in a variety of different ways. For example, when a peer is given priority over a certain portion, other peers may be prevented from downloading that portion from the server.

In various embodiments, download priority can be assigned to peers by sequentially dividing the content and assigning different portions to different peers. For example, when a certain number of peers request to download content that is only available on the server (or content that is available on the virtual peer), the content can be divided into a number of portions equal to the number of peers, and each portion can be assigned to a different peer for prioritized download. The content can be divided into equal parts and each part can be assigned to a different peer (if the content cannot be divided equally, then the remainder can also be assigned to a particular peer).

For example, the priority for parts of a certain set of content can be assigned as follows: First, the content can be separated into chunks, which may be units of data that will make up the parts assigned to the peers. The method for separating the content into chunks may be the same method as used in the system (e.g., by the file sharing protocol) for separating content. Namely, the file sharing system has to split files in order to enable downloading and uploading of parts of content between different peers, which may be performed using a chunking method. This same chunking method may be implemented in this step.

Various chunking functions can be used for separating the content into chunks. For example, the BitTorrent protocol splits content into chunks of a fixed size. Other chunking functions, such as Rabin fingerprinting, may also be used. What is important is that the chunking function used provides the same split for the same set of content (e.g., so that peers can send and receive chunks knowing their exact location in the content).

The chunks of content can be represented by what is referred to as the bit field. Hence, the bit field can represent the sequence of chunks that make up the content. For example, the chunks can be numbered: chunk0=0, chunk1=1 . . . chunkN=N, and so on. The bit field length is the number of chunks, and if the value of the bit in the nthplace is 1, then the chunk is present; if it is 0, then the chunk is not present.

In the following example, content is separated into seven chunks, hence then the bit field can represent the seven chunks. In this case, the bit field size is 7. Further, the notation “Bitfield[n]” refers to the nthchunk. Hence, Bitfield[0] refers to chunk number0(numbering of chunks starts with zero), Bitfield[1] refers to chunk number1, and so on.

Content can be separated into parts using the following process:

Step1: Sort the peers (peers can be sorted by name, IP address, or any other identifying characteristic). Index i=the index of the peer in the list of peers. The first peer has an index i of zero.

Step2: Define a size “x”, indicating the number of chunks in the equal portions of content. x=bit field size/number of downloading peers. Also define a size “r”, indicating the number of chunks in any remainder when calculating x.

Step3: Define the range of the bit field assigned to each peer (this defines the chunks of the content from which the peer will prioritize download (e.g., chunks from which the peer will start the download)):For peers where i<(number of peers)−1:Peer(i) will be assigned chunks in the range from Bitfield[(x*i)] to Bitfield[(x*(i+1)−1]For peers where i=(number of peers)−1Peer(i) will be assigned the chunks in the range from Bitfield[(x*i)] to Bitfield[(x*(i+1)−1+r]

To illustrate an example, assume content has bit field size 7 (content is separated into 7 chunks) and there are two downloading peers (e.g., peers with IP addresses ip1: 10.0.0.1 and ip2:10.0.0.2). Peer1index i1=0; and Peer2index i2=1. In this case, x=3, because 7/2=3; and r=1, because Remainder(7/3)=1. Then:For Peer1:Peer1(i1=0) will be assigned chunks in the range from Bitfield[(3*0)] to Bitfield [(3*(0+1)−1]. That is, Bitfield[0] to Bitfield[2]. Hence, the first portion contains chunks0,1,2. Peer1can be assigned these chunks for prioritized download.For Peer2:Peer2(i2=1) will be assigned chunks in the range from Bitfield[(3*1)] to Bitfield [(3*(1+1)−1+1]. That is, Bitfield[3] to Bitfield[6]. Hence, the second portion contains chunks3,4,5,6. Peer2can be assigned these chunks for prioritized download.

Further, if a peer is added to or removed from the peer list (e.g., another peer requests to download the content or one of the downloading peers stops downloading), the procedure can be repeated to re-distribute download priority. Returning to our example, assume that another peer (e.g., ip: 1.0.0.3) is added. In this case, x=2; r=1; i1=0; i2=1; i3=2. Then: Pier1will be assigned chunks0,1; peer2will be assigned chunks2,3; and peer3will be assigned chunks4,5,6. Consequently, if peer1is removed, then x=3; r=1; i2=0 and i3=1. Then: peer2will be assigned chunks0,1,2; and peer3will be assigned chunks3,4,5,6.

In various embodiments, download priority for parts of the content can be assigned to peers randomly. For example, each peer can select the pieces or chunks to download from the virtual peer at random, with unified distribution. This approach may result in some peers downloading the same data from the server as others, however, particularly in cases where the bit field is large, the rate of redundant downloads may be low.

For example, to distribute priority randomly, the content (e.g., content on the virtual peer) can be divided into chunks and the chunks can be assigned randomly to different peers. Alternatively, sets of chunks can be distributed randomly. For example, sets of a given number of sequenced chunks can be randomly selected from the bit field and assigned to different peers.

In an embodiment, the bit field size can be divided by the number of peers requesting the content to determine how many chunks to include in each portion. Then, portions containing sequences of the determined number of chunks can be randomly chosen from the bit field and assigned to different peers.

In some cases where the content being downloaded from the server (e.g., content on the virtual peer) is small enough, e.g., smaller than a particular predetermined limit or threshold, it may not make sense to break the content up into portions for downloading (e.g., because breaking up the content and downloading it piece by piece imposes a certain amount of overhead). In these cases, the system can be configured for the peers to download the entire content instead of splitting it. For example, the system can determine whether a set of content requested by a peer is smaller than a certain predetermined threshold. Then, if the set is smaller than the threshold, the entire content can be requested for download by the peer. If, on the other hand, the content is larger than the threshold, then the content can be downloaded to the peer in sequential pieces.

FIG.3illustrates an example process flow for downloading server-based content to peers in a P2P network, in accordance with various embodiments. As illustrated, in operation302, one or more requests to download server-based content to peers in a P2P network can be received. In operation304, a virtual peer can be established that makes portions of the server-based content that are not available on the P2P network available for download by the peers from the virtual peer. As described previously, a client on each peer may be able to discover what parts of the contents are available on each of the other peers as well as on the virtual peer (which can appear to a client as another peer on the network). Content downloaded by a peer from the virtual peer can be downloaded to the peer directly from the server. In operation306, the peers can be assigned download priority for different parts of the content that is available on the peer. For example, the download priority of a peer can indicate what part of the content that is available on the virtual peer, the peer will download first. Different peers may be assigned priority for different portions of the content (e.g., assigned in sequence or at random), to limit the downloading of the same content by multiple peers. In operation308, each peer can download the server-based content by obtaining parts from other peers (when and if available on the other peers) and parts from virtual peer. In operation310, the virtual peer can be updated based on changes in content available on the P2P network. For example, as peers download parts of content from the virtual peer (from the server), the downloaded parts become available for other peers to download from those peers; accordingly, those parts can be removed from the virtual peer. Also, as new peers come online in the network or existing peers are removed, the parts of content available on the P2P network may change and the virtual peer can be updated accordingly. Consequently, the process can return to operation308, where the peers continue to download the content by obtaining parts from the network and from the virtual peer.

FIG.4illustrates an example of some general components of a computing device, in accordance with various embodiments. In this particular example, the device includes one or more processors (e.g., central processing units (CPUs)402for executing instructions that can be stored in a storage medium component. The storage medium can include many types of memory, persistent data storage, or non-transitory computer-readable storage media. For example, the storage medium may take the form of random access memory (RAM)401storing program instructions for execution by the processor(s)402, a persistent storage (e.g., disk or SSD)400, a removable memory for sharing information with other devices and/or the like. The computing device typically can further comprise a display component403, such as a monitor, a touch screen, liquid crystal display (LCD), or the like. In various embodiments, the computing device will include at least one input device405able to receive conventional input from a user. This conventional input can include, for example, a push button, touch pad, touch screen, wheel, joystick, keyboard, mouse, keypad, or any other such device or element whereby a user can input a command to the device. In some embodiments, the computing device can include a network interface component (NIC)404for communicating over various networks, such as a Wi-Fi, Bluetooth, RF, wired, or wireless communication systems. The device in many embodiments can communicate over a network, such as the Internet, and may be able to communicate with other devices connected to the same or other network.

The various environments in which the embodiments can be implemented may include a variety of data stores and other memory and storage media, as discussed above. These can reside in a variety of locations, such as on a storage medium local to one or more of the computers or remote from any or all of the computers across the network. In some embodiments, the information may reside in a storage-area network (“SAN”) familiar to those skilled in the art. Similarly, any necessary files for performing the functions attributed to the computers, servers, or other network devices may be stored locally and/or remotely, as appropriate. Where a system includes computerized devices, each such device can include hardware elements that may be electrically coupled via a bus, the elements including, for example, at least one central processing unit (CPU), at least one input device (e.g., a mouse, keyboard, controller, touch screen, or keypad), and at least one output device (e.g., a display device, printer, or speaker). Such a system may also include one or more storage devices, such as disk drives, optical storage devices, and solid-state storage devices such as random access memory (“RAM”) or read-only memory (“ROM”), as well as removable media devices, memory cards, flash cards, etc.