Patent Description:
To provide for faster and more efficient obtaining of digital content, digital content can be downloaded, not from an original source computing device, but rather from a more conveniently located destination computing device that has previously downloaded the same digital content. For example, rather than downloading an operating system update from the operating system developer, one computer utilized by a family can download the update from another computer utilized by the same family that has previously downloaded the operating system update from the operating system developer. Assuming both computing devices are networked together through the family's in-home network, the transfer of the operating system update between such computing devices can be orders of magnitude faster than requiring both computing devices to independently obtain the operating system update across the Internet, or other like worldwide network, directly from the operating system developer. Moreover, the quantity of digital data transmitted from the operating system developer can be decreased, as copies of the operating system update can be, instead, obtained from other computing devices. In the above example, only a single copy of the operating system update need be downloaded by the family, with each computing device connected to the family's in-home network receiving a copy from another computing device that is also connected to, and part of, the family's in-home network.

While the above example can realize benefits for the family, such as by decreasing the quantity of data transmitted through the family's network service provider, thereby reducing the possibility of exceeding data limits enforced by the network service provider, and such as by increasing the speed with which subsequent computing devices coupled to the family's in-home network obtain the operating system update, such benefits can be many orders of magnitude more significant for the operators of large intranets of computing devices, such as are commonly found in corporations, large businesses, educational institutions, governmental agencies, and other like large groups of computer users. Often, the network administrators of such intranets are under significant cost and efficiency pressures to reduce the quantity of digital data communicated between the intranet and other networks, such as the ubiquitous Internet.

However, in intranets comprised of many hundreds or thousands of computing devices, the network proximity between such computing devices can be misleading. For example, corporate intranets can often communicate through communicational tunnels extending across the Internet, such that two computing devices may appear to be physically proximate, but may be located on opposite sides of the world. While downloading digital content from other computing devices communicationally coupled to the same intranet may be faster than obtaining it from other computing devices across the Internet, there can be significant efficiency advantages in obtaining the digital content from other computing devices, coupled to the same intranet, that are proximate, by network communicational connections, to the computing device seeking to obtain the digital content. Moreover, by being able to identify computing devices that are proximate, by network communication connections, to the computing device seeking to obtain the digital content, the disadvantage of transmitting data across the Internet, and thereby incurring network communication charges, as well as other inefficiencies, can be minimized.

Mechanisms by which computing devices self-organize into groups, such as leader election and/or consensus algorithms, generate large quantities of digital communications being exchanged by the computing devices across the intranets to which they are communicationally coupled, and, in some instances, across the Internet itself. Such large quantities of digital communications can bog down other digital communications, rendering the entire intranet, or other like subnetwork, less efficient, and increasing the costs of deploying and maintaining such an intranet. <CIT> discloses a method and system for introducing Quality of Service (QoS) into a peer network within existing Internet infrastructure itself lacking QoS. This is achieved by enabling a network peer to continuously discern the network's ability to deliver to that peer a particular Content Object (distributed in groups of component Packages among neighboring VOD peers) within predetermined times. Content Objects are divided into groups of component Packages and distributed to Clusters of neighboring network peers, enhancing QoS upon subsequent retrieval. Tracking Files (lists of network peers storing Package groups) and Tracking Indexes (lists of network peers storing Tracking Files) are generated to facilitate "on demand Content Objects retrieval. Dynamically monitoring network traffic (including VOD functionality, bandwidth and reliability) creates "distributed closed loop feedback," and in response, attributes of individual network peers (e.g., Trust Level and membership within a particular Cluster) are modified, and "content balancing functions performed (e.g., redistribution of Package groups among network peers) enables maintaining high QoS. <CIT> refers to overlay network peers that may be grouped so that each peer in a peer group has a similar transport network proximity measure with respect to the peers in other peer groups. A first set of transport network distances may include distances between a peer group and peer group neighbors of the peer group. A second set of distances may include distances between a peer and the peer group neighbors of the peer group. The peer may decide to join the peer group if the first set of distances is near to the second set. A first peer group may query a second peer group for the second peer group's neighboring peer groups. The distance between the first peer group and each of the second peer group's neighbors may be measured. Overlay network connections may be established between the first peer group and the closest of the second peer group's neighbors.

It is the object of the present invention to provide an improved method and system for enabling computing devices to self-organize into groups.

A message-limiting mechanism for enabling computing devices to self-organize into groups, such as into groups based on network proximity, can entail the transmission of values based on hierarchical evaluation such that only a computing device having a most extreme value continues to transmit, and recipient computing devices can self-organize into groups based on a most extreme value received by such recipient computing devices. The values utilized can be randomly generated and their broadcast can facilitate the identification of computing devices that are proximate, by network distance, to one another. Each computing device can retain a most extreme value received, unless a value generated by that computing device itself is more extreme, in which case the computing device can continue periodic broadcasts of such a value. The retention of received values can expire if periodic retransmissions of the value are not received. Each computing device can report its retained values, or its own value if no values were retained, and groupings can be generated based on the values reported by the computing devices. Various efficiencies can be implemented, such as staggering the times when computing devices would broadcast their values or delaying the reporting of values until they had been received multiple times. The grouping of computing devices can then facilitate the identification of peers, such as for purposes of downloading content from such peers.

Additional features and advantages will be made apparent from the following detailed description that proceeds with reference to the accompanying drawings.

The following detailed description may be best understood when taken in conjunction with the accompanying drawings, of which:.

The following description relates to the self-organization of networked computing devices into groups based on network proximity to facilitate peer matching. A message-limiting mechanism can entail the transmission of values based on hierarchical evaluation such that only a computing device having a most extreme value continues to transmit, and recipient computing devices can self-organize into groups based on a most extreme value received by such recipient computing devices. The values utilized can be randomly generated and their broadcast can facilitate the identification of computing devices that are proximate, by network distance, to one another. Each computing device can retain a most extreme value received, unless a value generated by that computing device itself is more extreme, in which case the computing device can continue periodic broadcasts of such a value. The retention of received values can expire if periodic retransmissions of the value are not received. Each computing device can report its retained values, or its own value if no values were retained, and groupings can be generated based on the values reported by the computing devices. Various efficiencies can be implemented, such as staggering the times when computing devices would broadcast their values or delaying the reporting of values until they had been received multiple times. The grouping of computing devices can then facilitate the identification of peers, such as for purposes of downloading content from such peers.

The techniques described herein make reference to evaluations of comparison, such as "greater than" or "less than". However, as will be recognized by those skilled in the art, the mechanisms described are agnostic as to the numerical relationship between more extreme and less extreme values. For example, the techniques described herein organize computing devices in accordance with randomly selected values, with a computing device having a highest value implementing described functionality, and computing devices having lower values implementing different functionality. Such techniques, however, are equally applicable if a computing device having a lowest value was selected to implement one set of functionality, while computing devices having higher values implemented the other set of functionality. Such techniques are also equally applicable if a computing device having a value closest to zero was selected to implement one set of functionality, while computing devices having values whose absolute value is further from zero were selected to implement the other set of functionality. Such techniques are also equally applicable if a computing device having a value closest to, for example, thirteen (or any other value), was selected to implement one set of functionality, while computing devices having values further away were selected to implement the other set of functionality. Accordingly, and only for ease of reference, and not by way of limitation, the techniques described are illustrated within the context of numerically larger values being utilized as the basis for selecting which set of functionality a computing device implements.

However, to encompass all of the evaluations of comparison that can equally implement the described mechanisms, the term "greater than", as utilized herein, means a numerical value that is closest to a selected differentiator, and the term "less than", as utilized herein, means a numerical value that is further from the selected differentiator. Thus, "greater than" means "numerically larger" within the illustrative examples shown in the Figures, and, similarly, "less than" means "numerically smaller". However, within an implementation where the smallest numerical value is to be utilized to select a computing device, from among others, the term "greater than" will mean "numerically smaller" and the term "less than" will mean "numerically larger". Similarly, within an implementation of where the numerical value whose absolute value is closest to zero is to be utilized to select a computing device, from among others, the term "greater than" will mean "numerically closer to zero" and the term "less than" will mean "numerically farther from zero". Similarly, within an implementation of where the numerical value closest to, for example, thirteen, is to be utilized to select a computing device, from among others, the term "greater than" will mean "numerically closer to thirteen" and the term "less than" will mean "numerically farther from thirteen". Referring back to the explicit definitions provided, in the first example, a value of positive infinity was utilized as the differentiator, with numerically larger values being selected over numerically smaller values; in the second example, a value of negative infinity was utilized as the differentiator, with numerically smaller values being selected over numerically larger ones; in the third example, a value of zero was utilized as the differentiator, with values numerically closer to zero being selected over values numerically farther from zero; in the fourth example of value of thirteen was utilized as the differentiator, with values numerically closer to thirteen being selected over values numerically farther from thirteen; and so on. Accordingly, the special definitions of "greater than" and "less than" that are explicitly provided, accommodate (as well as can be accommodated within the confines of language), the intended scope of the mechanisms described and claimed.

Although not required, the description below will be in the general context of computer-executable instructions, such as program modules, being executed by a computing device. More specifically, the description will reference acts and symbolic representations of operations that are performed by one or more computing devices or peripherals, unless indicated otherwise. As such, it will be understood that such acts and operations, which are at times referred to as being computer-executed, include the manipulation by a processing unit of electrical signals representing data in a structured form. This manipulation transforms the data or maintains it at locations in memory, which reconfigures or otherwise alters the operation of the computing device or peripherals in a manner well understood by those skilled in the art. The data structures where data is maintained are physical locations that have particular properties defined by the format of the data.

Generally, program modules include routines, programs, objects, components, data structures, and the like that perform particular tasks or implement particular abstract data types. Moreover, those skilled in the art will appreciate that the computing devices need not be limited to conventional personal computers, and include other computing configurations, including hand-held devices, multi-processor systems, microprocessor based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, and the like. Similarly, the computing devices need not be limited to stand-alone computing devices, as the mechanisms may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.

With reference to <FIG>, an exemplary system <NUM> is illustrated, providing context for some of the descriptions below. The exemplary system <NUM> is illustrated as comprising four computing devices, namely the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM>, which can be communicationally coupled to one another through a network, such as the exemplary network <NUM>. According to one aspect, the network <NUM> can comprise an unknown quantity of intermediate network devices, such that the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM> may or may not be close to one another in terms of network proximity. For example, three of the exemplary computing devices illustrated may be co-located on one floor of a single building, while the fourth computing device may be utilizing a network communication tunnel, such as a Virtual Private Network (VPN), to appear is if it is physically proximate to the other three computing devices, but which, instead, may be physically located a great distance away, with many intermediate network devices between it and the other three computing devices.

For purposes of identifying peers, it can be beneficial to group computing devices in accordance with network proximity, since computing devices that are proximate to one another, in terms of network connectivity, with few intermediate network or other computing devices, may be able to obtain digital content from one another more quickly and more efficiently, and, therefore, can be more optimal peers for purposes of digital content sharing, transmission and/or distribution. However, the identification of peers can entail the transmission of large quantities of messages across a network, such as the exemplary network <NUM>. Such messages can clog the network, or otherwise negatively impact networking functionality.

According to one aspect, therefore, to provide for self-organization of computing devices into groups according to network proximity, while limiting and/or reducing a quantity of messages exchanged, each of the computing devices can derive values by which they can comparatively evaluate one another. For example, such values can be randomly generated, or randomly selected from a predetermined range. As another example such values can be based on unique identifiers of computing devices, such as unique network addresses, unique hardware identifiers, unique machine or operating system identifiers, or other like unique identifiers. As yet another example, such values can be combinations of any of the above. For purposes of illustration, the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM> are illustrated as having derived values <NUM>, <NUM>, <NUM> and <NUM>, respectively. For ease of description of the intended mechanisms, the derived values <NUM>, <NUM>, <NUM> and <NUM> are shown in white numerals within the Figures and are referred to herein by their identifiers, and not their indicated numerical quantity and/or value. As will be recognized by those skilled in the art, such white numerals represent exemplary derived values, and not the numerical identifiers utilized within patent Figures to provide unique reference by which such elements can be nominated in the descriptions provided in the Specification.

A self-organization can commence when one of the computing devices, such as, for example, the exemplary computing device <NUM>, broadcasts a message to other computing devices on the network <NUM>, such as the exemplary computing devices <NUM>, <NUM> and <NUM>, informing such other computing devices of its derived value <NUM>. The broadcast <NUM> can be limited by the hardware implementing the network <NUM>. For example, routers, switches, and other like network devices can limit the delivery of broadcast messages to specific subsets of computing devices. Such subsets of computing devices can represent delineated groupings within the context of the establishment of the network to which the computing devices are communicationally coupled, such as the exemplary network <NUM>, and, consequently, a broadcast message can, by virtue of the setup of such networking hardware, travel to those computing devices that are, in fact, close, by network proximity, to the computing device issuing such a broadcast message.

Alternatively, or in addition, the exemplary broadcast message <NUM> can specify a maximum quantity of network hops beyond which it is not to be broadcast. In such an instance, metadata can travel with the broadcast message <NUM> that can indicate a quantity of hops remaining at each network device.

According to one aspect, upon receiving a message, such as the exemplary message <NUM>, the recipient computing devices, such as the exemplary computing devices <NUM>, <NUM> and <NUM>, can compare the value provided in the message <NUM>, in this case the exemplary value <NUM>, to values that can have been generated by the recipient computing devices. For example, the exemplary computing device <NUM> can compare the value <NUM>, received via the broadcast message <NUM>, to an internally generated value <NUM>. In the exemplary system <NUM>, as can be seen from <FIG>, the computing device <NUM> can conclude that the value <NUM> is greater than the value <NUM> and, consequently, as a result of such a determination, can retain the value <NUM> in a value store <NUM> associated with the computing device <NUM>. For example, the value store <NUM> can be a data structure maintained on a storage medium of the computing device <NUM>. As another example, the value store <NUM> can be maintained on an external device, or by or on a separate computing device, on behalf of the exemplary computing device <NUM>. In addition, as a result of determining that the received value <NUM> is greater than the internally generated value <NUM>, the computing device <NUM> can prevent the transmission of any broadcast messages, transmitting the value <NUM>, from the computing device <NUM> itself. More specifically, since the computing device <NUM> can already determine that at least one other computing device has a value greater than its internally generated value, there is no point in transmitting the value <NUM>, since such transmission would only increase the quantity of messages exchanged over the exemplary network <NUM>. Accordingly, the computing device <NUM>, upon determining that the perceived value <NUM> is greater than the internally generated value <NUM>, can choose to not transmit any broadcast messages, transmitting the value <NUM>, from the computing device <NUM> itself. For example, as will be detailed further below, such broadcast messages can be scheduled to occur periodically. As another example, also detailed further below, such broadcast messages can start with an initial broadcast time that can be determined in advance. In such examples, the computing device <NUM>, upon the occurrence of a time at which the computing device <NUM> would have generated and transmitted a broadcast message transmitting the value <NUM>, the computing device <NUM> can, instead, not generate or transmit such a broadcast message.

The exemplary computing devices <NUM> and <NUM> can, likewise, compare the value <NUM>, received by such computing devices via the broadcast message <NUM>, to the values internally generated by such computing devices, namely the values <NUM> and <NUM>, respectively. As illustrated, the exemplary computing devices <NUM> and <NUM> can determine that the value <NUM> is not greater than their internally generated values <NUM> and <NUM>, respectively. As a result of such a determination, according to one aspect, the exemplary computing devices <NUM> and <NUM> can disregard the value <NUM>, or otherwise not retain it in their corresponding value stores, such as the exemplary value stores <NUM> and <NUM>, respectively.

Instead, according to one aspect, in response to determining that the value <NUM> is not greater than their internally generated values, one or more of the exemplary computing devices <NUM> and <NUM> can utilize such a determination to trigger their own broadcast of their own internally generated values. Turning to <FIG>, the exemplary system <NUM> shown therein illustrates an exemplary broadcast <NUM> of the value <NUM> from the computing device <NUM>, such as in response to receiving the broadcast message <NUM>, from the computing device <NUM>, shown in <FIG>, and determining that the value <NUM> transmitted thereby was less than the value <NUM> generated by the computing device <NUM>. Although not shown for simplicity of illustration, computing device <NUM> can have similarity generated and transmitted a broadcast message, broadcasting the value <NUM>, in response to receiving the broadcast message <NUM>. Alternatively, or in addition, the transmission of broadcast messages in response to receipt of broadcast messages broadcasting values that are determined to be less than the internally generated values, can be staggered, such as in the manner detailed below and, as such, the exemplary computing device <NUM> may have been staggered to transmit a responsive broadcast message after the exemplary computing device <NUM> generated and transmitted the broadcast <NUM>. In addition, the exemplary system <NUM> illustrates the effect, at the computing device <NUM>, of having received the broadcast message <NUM>, namely that the exemplary value store <NUM>, associated with the computing device <NUM>, now contains the value <NUM> retained therein.

As before, upon receipt of the broadcast message <NUM>, each of the receiving computing devices, such as the exemplary computing devices <NUM>, <NUM> and <NUM>, can compare the value <NUM>, transmitted in the message <NUM>, to an internally generated value, namely the exemplary values <NUM>, <NUM> and <NUM>, respectively. Turning to <FIG>, the exemplary system <NUM> shown therein illustrates an exemplary outcome of such a comparison. More specifically, within the illustrated example, the computing device <NUM> can compare the received value <NUM>, received via the broadcast message <NUM>, shown in <FIG>, to the internally generated value <NUM>, and, as shown in <FIG>, can conclude that the received value <NUM> is larger. Accordingly, as shown in the exemplary system <NUM> of <FIG>, the exemplary value store <NUM>, associated with the computing device <NUM>, can have retained therein the value <NUM> as a result of the determination that the value <NUM> is greater than the internally generated value <NUM>. In a similar manner, the exemplary computing device <NUM> can determine that the received value <NUM>, received via the broadcast message <NUM>, shown in <FIG>, is greater than the internally generated value <NUM>, and, as a result, can retain the value <NUM> in the exemplary value store <NUM> associated with the computing device <NUM>. Likewise, the exemplary computing device <NUM> can determine that the received value <NUM> is greater than the internally generated value <NUM>, and, as a result, can retain the value <NUM> in the exemplary value store <NUM> associated with the computing device <NUM>. Thus, as illustrated in the exemplary system <NUM>, shown in <FIG>, the exemplary value store <NUM>, associated with the computing device <NUM>, and the exemplary value store <NUM>, associated with the computing device <NUM>, can both have retained therein the value <NUM>.

As indicated previously, a determination that a received value is greater than an internally generated value can cause a computing device to no longer broadcast its internally generated value. Thus, for example, the exemplary system <NUM>, shown in <FIG>, can represent a time when the periodicity of the broadcast message <NUM>, shown in <FIG>, called for the value <NUM> to be broadcast again, by the computing device <NUM>. However, as detailed above, the computing device <NUM> can have determined that the received value <NUM> was greater than the internally generated value <NUM>. Accordingly, the computing device <NUM> can no longer send broadcast messages broadcasting the value <NUM>. Thus, no broadcast message, from the computing device <NUM>, is shown in the exemplary system <NUM> of <FIG>.

According to one aspect, computing devices can retain received values in value stores associated with such computing devices for a predetermined amount of time. Consequently, if a repeated transmission of the value is not received within the predetermined amount of time, or, stated differently, if a quantity of time since a retained value was last received has exceeded a threshold amount of time, the retained value can be expired, or otherwise removed, from the value store. Thus, for example, the exemplary value store <NUM>, associated computing device <NUM>, can have retained therein both the value <NUM>, received from the broadcast message <NUM>, shown in <FIG>, as well as the value <NUM>, received from the broadcast message <NUM>, transmitted prior to the broadcast message <NUM>, and shown in <FIG>. However, as indicated previously, the computing device <NUM>, having received the value <NUM>, via the broadcast message <NUM>, can no longer be transmitting broadcasts of its value <NUM>. Consequently, at some point, the retained value <NUM>, in the value store <NUM>, will expire, or otherwise be removed because it was last received more than a threshold quantity of time ago.

Turning to <FIG>, the exemplary system <NUM> shown therein illustrates a time subsequent to that represented by the exemplary system <NUM> of <FIG>. As can be seen, within the exemplary system <NUM>, the exemplary value store <NUM>, associated with the computing device <NUM>, can no longer retain the value <NUM>, because, as indicated previously, the last receipt of the value <NUM>, back at the time illustrated by the exemplary system <NUM> of <FIG>, can have occurred more than the threshold amount of time ago. Conversely, as also illustrated by the exemplary system <NUM>, a subsequent broadcast message <NUM>, again transmitting the value <NUM>, can be transmitted by the computing device <NUM>. More specifically, since the exemplary computing device <NUM> has not previously received, or has not recently received, such as within a threshold amount of time, a value higher than the internally generated value <NUM>, the exemplary computing device <NUM> can never have chosen to stop periodic transmissions of the value <NUM>, or, if the exemplary computing device <NUM> had previously chosen to stop such periodic transmissions, the fact that no value higher than the internally generated value <NUM> has been previously received within the threshold amount of time, can have caused the exemplary computing device <NUM> to restart such periodic transmissions of the value <NUM>. In either case, a retransmission of the value <NUM>, such as via the broadcast message <NUM>, can occur, as illustrated by the exemplary system <NUM>.

According to one aspect, the periodicity with which values are broadcast by the computing devices, such as the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM>, can be established in advance and it can be informed by the delay, or the threshold amount of time, after which retained values can be expired from value stores. For example, the periodicity of broadcasts can be such that at least one additional broadcast will be scheduled to be transmitted prior to the time when a value, added or refreshed by an immediately preceding broadcast, will be expired from a value store. Thus, in such an example, a value can be expired from a value store after ten seconds, and a periodicity of broadcasting can be nine seconds. As another example, the periodicity of broadcasts can be such that two or more additional broadcasts will be scheduled to be transmitted prior to a time when a value, added or refreshed by an immediately preceding broadcast, will be expired from a value store. In such an instance, the value can be retained in a value store even if a broadcast is inadvertently missed, such as by failing to be properly delivered by underlying networking hardware, or failing to be received by an error or malfunction on the part of a recipient computing device.

To avoid simultaneous conflicting broadcasts, according to one aspect, an initial time when a computing device transmits a first broadcast, in the absence of any prior broadcast being received by that computing device, such an initial time can be established randomly. Such a randomly established time can randomly vary among the different computing devices such as, for example, the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM>. Accordingly, it is unlikely that two or more such computing devices will transmit a first broadcast at approximately the same time, thereby resulting in an inefficient conflict of messages. According to one aspect, the first broadcast can be scheduled to occur a random amount of time after a threshold event, such as a boot of an operating system executing on the computing device, or a startup of the computing device itself, or of one or more applications or utilities executing on the computing device, or of one or more hardware components of the computing device, such as, for example, a network hardware component.

As can be seen from the above descriptions, the mechanisms detailed in essence provide a way for computing devices to identify their peers, either based on a threshold quantity of hops, established as part of the broadcast, or based on how broadcasts are handled by the underlying networking hardware and infrastructure. Stated differently, communication among computing devices can identify, through broadcast messages, and an agreement upon an extreme value, the closest computing devices, by network proximity, based on the way the network was established and the relevant networking devices interconnected.

According to one aspect, the identification of the closest computing devices, by network proximity, can facilitate in the identification of peer computing devices which are more likely to be able to quickly and efficiently source digital content for download by other peer computing devices. Turning to <FIG>, the exemplary system <NUM> shown therein illustrates the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM>, such as after the exchange of messages illustrated in <FIG>, now utilizing the information established with that exchange of messages to communicate with an external service, such as the exemplary external content provision service <NUM>. For example, the exemplary computing device <NUM> can transmit a notification to the exemplary content provision service <NUM>, such as the exemplary notification <NUM>, providing an identification of the computing device <NUM> and an indication that the value <NUM> is associated with the computing device <NUM>, such as by being retained in the value store <NUM> associated with the computing device <NUM>. In a similar manner, the exemplary computing device <NUM> can transmit the exemplary notification <NUM> associating the computing device <NUM> with the value <NUM>. The exemplary computing device can, likewise, transmit the exemplary notification <NUM> associating the computing device <NUM> with the value <NUM>. The exemplary computing device <NUM> need not have a value retained in its value store <NUM>, and, consequently, can transmit a notification <NUM> associating the computing device <NUM> with the value <NUM>, which can be the internally generated value.

Within the exemplary content provision service <NUM>, an optional redirector server <NUM> is illustrated. Such an optional redirector server can initially receive notifications, such as the exemplary notifications <NUM>, <NUM>, <NUM> and <NUM>, and can, such as based on the values provided, determine to which of the servers of the content provision service <NUM>, such as the exemplary servers <NUM> and <NUM>, should the exemplary notifications <NUM>, <NUM>, <NUM> and <NUM> be redirected. For example, the optional redirector server <NUM> can hash the value <NUM>, such as from the notification <NUM>, and, based on such a hash, including being based on portions of the hash, such as the most significant, or least significant, digits, determine that the server <NUM> is an appropriate destination to which to redirect the notification <NUM>. Analogous determinations can be made with respect to the remaining notifications <NUM>, <NUM> and <NUM>.

According to one aspect, the provided notifications can enable the content provision service <NUM>, such as, more precisely, the exemplary server <NUM>, to determine that each of the computing devices transmitting such notification, namely the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM>, are to be grouped together into a single grouping of computing devices, such as the exemplary grouping <NUM>. More specifically, exemplary server <NUM> can utilize the value, such as the exemplary value <NUM>, provided with each of the notifications <NUM>, <NUM>, <NUM> and <NUM>, to choose from among existing groupings, such as the exemplary groupings <NUM> and <NUM>, being maintained by the exemplary server <NUM>, or other groupings, such as a new grouping to be created by the exemplary server <NUM>. For example, upon receiving the exemplary notification <NUM>, the exemplary server <NUM> can create the grouping <NUM>, which can comprise computing devices that provide the value <NUM> based on the message exchange detailed above. The exemplary server <NUM> can further associate exemplary computing device <NUM> with such a grouping <NUM>. The subsequent receipt of notifications, such as the exemplary notifications <NUM>, <NUM> and <NUM>, can result in the exemplary server <NUM> associating the exemplary computing devices <NUM>, <NUM> and <NUM> with the grouping <NUM>. Thus, as illustrated by the exemplary system <NUM>, the exemplary grouping <NUM> can comprise identifiers <NUM> identifying the exemplary computing devices <NUM>, <NUM>, <NUM> and <NUM> as all being part of the grouping <NUM>.

Other server computing devices of the content provision service <NUM>, such as the exemplary server <NUM>, can maintain their own groupings, such as the exemplary groupings <NUM> and <NUM>, and the redirector server <NUM> can redirect, to the server <NUM>, notifications comprising values associated with the groupings maintained by the server <NUM>.

Such groupings can then be utilized, such as by the content provision service <NUM>, to identify peers from which computing devices can obtain digital content more efficiently than obtaining the digital content directly from the content provision service <NUM>, for example. Turning to <FIG>, the exemplary system <NUM> shown therein illustrates the utilization of the grouping generated in the manner illustrated by the exemplary system <NUM>. More specifically, a computing device, such as the exemplary computing device <NUM>, can issue a request <NUM> to the content provision service <NUM>. While the exemplary request <NUM> is illustrated as being directed to the server <NUM>, it can be directed to any server of the content provision service <NUM>, as the provision of content can be independent of the grouping of computing devices. In response the request <NUM>, content, such as the exemplary content <NUM>, can be provided from the content provision service, to the requesting computing device <NUM>, as illustrated by the communication <NUM>. Because the content provision service <NUM> can be external to an internal network comprising the computing devices <NUM>, <NUM>, <NUM> and <NUM>, for example, the delivery of the content <NUM>, can be at a reduced rate than what could have been obtained had the computing device <NUM> obtained the content from one of the computing devices <NUM>, <NUM> or <NUM>.

Subsequently, another of the computing devices, such as the exemplary computing device <NUM>, can issue a request, such as the exemplary request <NUM>, for the same content <NUM>. In response, according to one aspect, the content provision service <NUM> can determine that the computing device <NUM> is a peer of the computing device <NUM>, such as based on the computing device identifiers <NUM> in the grouping <NUM>. Since the exemplary content provision service <NUM> can have previously provided the content <NUM> to the exemplary computing device <NUM>, instead of providing the content <NUM> a second time to the same intranet or subnetwork that comprises the computing devices <NUM>, <NUM>, <NUM> and <NUM>, the exemplary content provision service <NUM> can, instead, return to the computing device <NUM> an identifier <NUM> identifying the computing device <NUM>, such as is illustrated by the communication <NUM>. The computing device <NUM> can then issue a request for the content <NUM>, such as the exemplary request <NUM>, to the computing device <NUM>, and can obtain therefrom the content <NUM>, as illustrated by the communication <NUM>. Because the communication <NUM> can occur between computing devices that are close in network proximity, such as being on the same subnetwork, the transfer of the content <NUM> from the computing device <NUM> to the computing device <NUM> can be much faster than the transfer of the same content from the content provision service <NUM>. Moreover, by obtaining the content <NUM> from a local computing device, such as the exemplary computing device <NUM>, the intranet, or subnetwork, can reduce the quantity of digital content it transmits and/or receives from wide area networks, such as the Internet.

Although illustrated with reference to an external content provision service <NUM>, according to one aspect, multiple computing devices can, in addition to exchanging the messages illustrated with reference to <FIG>, described in detail above, also self-identify their peers. More specifically, and with reference to <FIG>, the exemplary system <NUM> shown therein illustrates one mechanism by which self-identification of peers can be performed. A computing device, such as the exemplary computing device <NUM>, can be selected to maintain a grouping of computing devices, such as the exemplary grouping <NUM>, which can be analogous to the grouping <NUM> described above. According to one aspect, a computing device whose internally derived value was selected as greater than the other values internally derived by other computing devices of the group can be utilized as the computing device to maintain the grouping. Thus, for example, in response to subsequent broadcasts, such as the exemplary broadcast <NUM> shown in <FIG>, each of the other computing devices <NUM>, <NUM> and <NUM> receiving such a broadcast can generate response notifications, such as the exemplary response notifications <NUM>, <NUM> and <NUM>, respectively, identifying the computing devices <NUM>, <NUM> and <NUM>, respectively, to the computing device <NUM>.

Upon receiving the notifications <NUM>, <NUM> and <NUM>, the exemplary computing device <NUM> can create a grouping <NUM> and associate with the grouping the identifiers <NUM> of each of the computing devices <NUM>, <NUM> and <NUM>, which transmitted the notifications <NUM>, <NUM> and <NUM>, to the exemplary computing device <NUM>, as well as an identifier of the computing device <NUM> itself. The utilization of such a grouping to identify peers can either be performed by the computing device <NUM> itself, or can individually be performed by the computing devices <NUM>, <NUM> and <NUM>.

As to the former, turning to <FIG>, the exemplary system <NUM> shown therein illustrates one of the computing devices, such as the exemplary computing device <NUM>, requesting, such as illustrated by the communication <NUM>, the identification of a peer. For example, the computing device <NUM> can request, such as by the communication <NUM>, an identification of all of the peers in the grouping <NUM>, which can then be returned, from the exemplary computing device <NUM>, via the communication <NUM>. Upon receiving such identifications, the computing device <NUM> can communicate with each of the peers to determine whether any one or more of them has content that the computing device <NUM> seeks to download. For example, through such inter-peer communications, the computing device <NUM> can determine that the computing device <NUM> has the content <NUM> that the computing device <NUM> wishes to download. Consequently, the computing device <NUM> can issue a request <NUM>, to the computing device <NUM>, for the content <NUM>, which can then be returned, from the computing device <NUM>, as illustrated by the communication <NUM>. Alternatively, the computing device <NUM> can be notified when one or more of peers downloads content, such as the exemplary content <NUM>, and the request <NUM> can comprise an identification of the content <NUM>, causing the computing device <NUM> to return a single identifier via the communication <NUM>, namely an identifier of the computing device <NUM>.

As to the latter, turning to <FIG>, the exemplary computing device <NUM>, which can maintain the grouping <NUM>, can periodically notify each of the peers in the grouping of the set of computing devices that are in the grouping. Thus, for example, as illustrated by the exemplary system <NUM> shown in <FIG>, a periodic broadcast message, such as those detailed above, can be transmitted from the computing device <NUM> in the form of the broadcast message <NUM>. As before, such a broadcast message can comprise the value <NUM>. In addition, however, as illustrated by the exemplary system <NUM>, the broadcast message <NUM> can further comprise identifiers of the computing devices in the grouping <NUM>. In such a manner each of the other computing devices, such as the exemplary computing devices <NUM>, <NUM> and <NUM>, can be informed of the other computing devices within the group. Subsequently, a computing device, such as the exemplary computing device <NUM>, can communicate with each of the other identified peer computing devices to identify a peer computing device, such as the exemplary computing device <NUM>, which can comprise content that the computing device <NUM> seeks to obtain, such as the exemplary content <NUM>. The computing device <NUM> can then transmit a request <NUM> to the computing device <NUM> and can obtain therefrom, as illustrated by the communication <NUM>, the content <NUM> without having to download the content <NUM> from an external service.

Although illustrated and described within the context of a single grouping, a single computing device can be a member of multiple groupings. For example, and turning to <FIG>, the exemplary system <NUM> shown therein illustrates the previously described computing devices <NUM>, <NUM>, <NUM> and <NUM>, except now, also communicationally coupled to the network <NUM>, can be computing devices <NUM> and <NUM>. As before, a computing device can transmit a broadcast message, such as the exemplary broadcast message <NUM>, broadcast by the exemplary computing device <NUM>. Such a broadcast message, however, may only reach computing devices <NUM> and <NUM>, such as is illustrated in the exemplary system <NUM>. For example, as indicated previously, the design and set up of the underlying networking hardware may limit the reach of the broadcast message <NUM> to only the computing devices <NUM> and <NUM>. As another example, as also indicated previously, the broadcast message <NUM> can specify a maximum quantity of hops after which the broadcast message is not retransmitted. Such a maximum quantity of hops can have enabled the broadcast message <NUM> to reach the computing devices <NUM> and <NUM>, but not the computing devices <NUM>, <NUM> or <NUM>.

According to one aspect, the setting of a maximum quantity of hops can be informed by an existing quantity of computing devices within a grouping. More specifically, either an external service, such as that illustrated in <FIG>, or one of the local computing devices maintaining a grouping, such as that illustrated in <FIG>, can determine that an existing grouping comprises a greater quantity of computing devices than a threshold quantity. In such an instance, an instruction can be sent, either to the computing device currently periodically broadcasting messages, or to all of the computing devices within the grouping, that a fewer maximum quantity of hops is to be utilized for broadcast messages broadcasting the internally derived values of such computing devices, such as in the manner previously detailed. A fewer maximum quantity of hops can reduce the reach of the broadcast messages, thereby reducing a quantity of computing devices in the groupings.

An additional aspect of maximum hop quantity specification can utilize the hop-remaining metadata that can travel with the message, as indicated previously, to determine a distance of a receiving computing device from a transmitting computing device. For example, within the exemplary system <NUM> shown in <FIG>, if each of the computing devices was aware that broadcast messages were to be sent with a maximum of five hops, and the exemplary computing device <NUM> received the broadcast message <NUM> with hop metadata indicating that three hops remained, the exemplary computing device <NUM> can determine that it is only two hops away from the broadcasting computing device, such as, for example, the computing device <NUM>. Such information can then be provided, such as to the external service, in the manner illustrated in <FIG>, for example, and described in detail above, or to one of the local computing devices, as another example, such as in the manner illustrated in <FIG>, and described in detail above. The selection of the peer computing device can then be informed by a known hop distance, with peers determined to be a lesser quantity of hops away being preferred over peers that are determined to be a greater quantity hops away from a requesting computing device.

Returning back to the exemplary system <NUM>, shown in <FIG>, in response to the receipt of the broadcast message <NUM>, each of the computing devices <NUM> and <NUM> can, such as in a manner detailed above, compare the value received with the broadcast message <NUM>, namely the value <NUM>, to internally derived values such as, for example, the values <NUM> and <NUM>, respectively. Moreover, as also detailed above, if the received value <NUM> is greater than the internally derived value, such a received value can be retained in the value store associated with the receiving computing device. As can be seen, both the computing devices <NUM> and <NUM> can determine that the received value <NUM> is greater than the internally derived values <NUM> and <NUM>, respectively. As such, and turning to <FIG>, the exemplary system <NUM> shown therein illustrates the retaining of the value <NUM> in the value store <NUM>, associated with the computing device <NUM>, and in the value store <NUM>, associated with the computing device <NUM>.

As can be seen, the retaining of the value <NUM> in the value store <NUM> does not impact the retaining of the value <NUM> in the value store <NUM>. More specifically, exemplary computing device <NUM> can continue to broadcast the value <NUM>, since the computing device <NUM> is not aware of the computing device <NUM>. Similarly, the exemplary computing device <NUM> can continue to broadcast the value <NUM>, since the computing device <NUM> is not aware of the computing device <NUM>. Accordingly, a computing device that receives both broadcasts, such as, for example, the exemplary computing device <NUM>, can retain both the value <NUM> and the value <NUM> in the value store <NUM>, and can generate notifications associating the computing device <NUM> with both values. As in result, the exemplary computing device <NUM> can be grouped into multiple groupings. For example, the computing device <NUM> can be part of the exemplary grouping <NUM> illustrated with lighter shading in <FIG> and can also be part of the exemplary grouping <NUM> illustrated with darker shading in <FIG>.

Turning to <FIG>, the exemplary flow diagram <NUM> shown therein illustrates an exemplary series of steps that can be performed by individual computing devices, which can, when separately and individually performed, provide the system functionality illustrated and described in detail above. Initially, at step <NUM>, a triggering event can occur which can act as an anchor from which broadcasting times can be determined for purposes of staggering, and otherwise temporarily spreading out, the transmission of broadcast messages. Such a triggering event, at step <NUM>, can be a startup of the computing device executing the steps of the exemplary flow diagram <NUM>, a boot of an operating system of such a computing device, a startup of one or more hardware subsystems, such as the networking subsystem, one or more application programs, or other like startup or boot triggers. Subsequently, at step <NUM>, an internal value can be generated as detailed above, such a value can be randomly generated, including random generations utilizing seed data from identifiers associated with the computing device, such as network identifiers, computing device identifiers, hardware identifiers and the like. Alternatively, or in addition, the value generated at step <NUM> can be derived from, or can be a portion of, or a whole of, one or more such values. At step <NUM>, predetermined broadcasting times can be established. As detailed above, such broadcasting times can indicate when a computing device will transmit a broadcast message comprising the value generated at step <NUM> unless, such as for the reasons detailed above, and which will be further indicated below within the context of the exemplary flow diagram <NUM>, such broadcasts are not to be sent. The broadcasting times established at step <NUM> can include periodic broadcasts that repeat on a predetermined periodicity so that other computing devices continue to retain the broadcast value in their value stores, and the retention of such a value does not expire. Additionally, the broadcasting times established at step <NUM> can include an initial broadcasting time, which can be based on the triggering event at step <NUM>, such as being a random delay after the triggering event of step <NUM>.

At step <NUM>, a determination can be made whether any broadcast messages, comprising values from other computing devices, have been received. If such a message has been received, then processing can proceed to step <NUM> and the received value can be compared with the value generated at step <NUM>. If the value received at step <NUM> is greater than the value generated at step <NUM>, processing can proceed to step <NUM>, and the received value can be retained in a value store for a predetermined amount of time. As indicated previously, the quantity of time for which a value can be retained in a value store can be based on a periodicity of broadcasting times, such as established at step <NUM>. For example, a value can be retained, at step <NUM>, for a sufficient amount of time that at least one periodic rebroadcast can be received. As another example, a value can be retained for a sufficient amount of time that at least two or more periodic broadcasts can be received, thereby accommodating transmission failures, receive failures and other like failures that can prevent the receipt of one or more periodic broadcasts.

At step <NUM>, as a consequence of the determination at step <NUM> that the received values is greater than the generated value, the periodic broadcasting of the generated value can be deactivated. Processing can then proceed with step <NUM>. Although illustrated in as an explicit step, step <NUM>, in which expired values are removed from the value store, can happen automatically upon the expiration of the relevant time, and need not be triggered by a precondition event (other than, of course, the expiration of the relevant time). Returning back to step <NUM>, if, at step <NUM>, no broadcast message is received, then processing can proceed directly to step <NUM>. Subsequently, at step <NUM>, a determination can be made as to whether any remaining values continue to be retained in the value store. If, at step <NUM>, it is determined that no such values remain, then the value generated at step <NUM> can, at that point in time, be a greatest value of which the computing device, executing the steps of the exemplary flow diagram <NUM>, is aware. Accordingly, at step <NUM>, the periodic broadcasting of the value generated at step <NUM> can be reactivated.

Returning back to step <NUM>, if values remain retained in the value store, then processing can proceed to step <NUM>, in which a determination is made as to whether the values in the value store have been retained for greater than a threshold amount of time. More specifically, to avoid constantly generating and transmitting notifications, according to one aspect, a notification, associating the computing device executing the steps of the exemplary flow diagram <NUM> with a value, can be generated only after the value has been associated with the computing device for a threshold amount of time. Thus, if the values in the value store have not been retained for greater than a threshold amount of time, processing can return to step <NUM>, detailed above. Conversely, if, at step <NUM>, it is determined the values retained in the value store have been retained for greater than a threshold amount of time, processing can proceed to step <NUM> and the notification can be generated and transmitted that associates the computing device performing the steps of the exemplary flow diagram <NUM> with the relevant values retained in the value store. As indicated previously, such notification can be transmitted to another local computing device, or to an external service. Processing can then return to step <NUM>.

Returning back to step <NUM>, subsequent to the reactivation of periodic broadcasting of the generated value, such as in response the preconditions detailed above, a determination can be made, at step <NUM>, as to whether a broadcasting time has been reached. If, at step <NUM>, it is determined that a broadcasting time has occurred, and broadcasts are not otherwise deactivated, then processing can proceed to step <NUM> and the value generated at step <NUM> can be broadcast. As indicated previously, the broadcasting of such a value can specify a maximum number of hops across which such a broadcast will extend. Returning back to step <NUM>, as shown by the exemplary flow diagram <NUM> of <FIG>, if, at step <NUM>, the computing device determines that the received value is not greater than the generated value, but is, instead, less than the generated value, then such a determination can trigger the broadcasting, such as at step <NUM>, without the broadcasting time having been reached, such as at step <NUM>.

Once the computing device broadcasts the generated value, such as at step <NUM>, processing can proceed to step <NUM>, where determination can be made that the value store has been empty for greater than a threshold quantity of time which, according to one aspect, can be the same threshold quantity of time utilized at step <NUM>. If the value store has not been empty for a sufficiently long period of time, as determined at step <NUM>, processing can return to step <NUM>. By contrast, if the value store has been empty for a sufficiently long period of time, a notification comprising an association between the computing device executing the steps of the exemplary flow diagram <NUM> and the value generated at step <NUM> can be generated at step <NUM>. As indicated previously, such notification can be transmitted to an external service, or an internal computing device which can be part of the same group as the computing device executing the steps of the exemplary flow diagram <NUM>. Processing can then return step <NUM> and proceed in the manner detailed above.

Turning to <FIG>, the exemplary flow diagram <NUM> shown therein illustrates an exemplary series of steps that can be performed by computing devices of an external service, such as a content delivery service, or one of the internal computing devices of the group of computing devices identified using the above described mechanisms. The steps of the exemplary flow diagram <NUM> illustrate an exemplary utilization of the grouping of computing devices to identify peer computing devices, such as to facilitate peer-to-peer transfers of digital content, thereby avoiding the downloading of digital content from external sources. Initially, at step <NUM>, a notification can be received from a computing device associating that computing device with a value that can have been derived utilizing the above described mechanisms. At step <NUM>, an optional step of utilizing the value to identify a computing device to which to redirect the notification, received at step <NUM>, can be performed. As indicated previously, such an identification can be based on a hash of the value, or other like identification mechanism.

At step <NUM>, a determination can be made as to whether a grouping associated with the value received in the notification at step <NUM> already exists. If such a grouping already exists, then, at step <NUM>, the computing device transmitting the notification received at step <NUM> can be associated with such an existing grouping of devices. Conversely, if, at step <NUM>, it is determined that no such association exists, processing can first proceed to step <NUM>, where a grouping of devices associated with the value can be created. Processing can then proceed to step <NUM> and associate the device transmitting the notification received at step <NUM> with the newly created grouping of devices.

As indicated previously, once a grouping of devices has been created, the grouping can be referenced to identify peers. For example, such as in step <NUM>, devices in an existing grouping can be searched to identify a specific peer, which can then be provided to the requesting device. More specifically, if the requesting device is seeking specific digital content, then a peer of such a device, as identified from an existing grouping, that has already obtained such digital content, can be determined, and the identification of such a peer can be provided. As another example, such as at step <NUM>, an enumeration of all of the devices in an existing grouping can be provided to one or more peers of such a grouping in response to an explicit request. As yet another example, such as at step <NUM>, the enumeration of all of the devices in the existing grouping can be periodically provided in a proactive manner, without being triggered by an explicit request.

Turning to <FIG>, an exemplary computing device <NUM> is illustrated which can perform some or all of the mechanisms and actions described above. The exemplary computing device <NUM> can include, but is not limited to, one or more central processing units (CPUs) <NUM>, a system memory <NUM>, and a system bus <NUM> that couples various system components including the system memory to the processing unit <NUM>. The system bus <NUM> may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. The computing device <NUM> can optionally include graphics hardware, including, but not limited to, a graphics hardware interface <NUM> and a display device <NUM>, which can include display devices capable of receiving touch-based user input, such as a touch-sensitive, or multi-touch capable, display device. Depending on the specific physical implementation, one or more of the CPUs <NUM>, the system memory <NUM> and other components of the computing device <NUM> can be physically co-located, such as on a single chip. In such a case, some or all of the system bus <NUM> can be nothing more than silicon pathways within a single chip structure and its illustration in <FIG> can be nothing more than notational convenience for the purpose of illustration.

The computing device <NUM> also typically includes computer readable media, which can include any available media that can be accessed by computing device <NUM> and includes both volatile and nonvolatile media and removable and non-removable media. Computer storage media includes media implemented in any method or technology for storage of content such as computer readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired content and which can be accessed by the computing device <NUM>. Computer storage media, however, does not include communication media. Communication media typically embodies 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 includes any content delivery media. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of the any of the above should also be included within the scope of computer readable media.

A basic input/output system <NUM> (BIOS), containing the basic routines that help to transfer content between elements within computing device <NUM>, such as during start-up, is typically stored in ROM <NUM>. By way of example, and not limitation, <FIG> illustrates operating system <NUM>, other program modules <NUM>, and program data <NUM>.

The computing device <NUM> may also include other removable/non-removable, volatile/nonvolatile computer storage media. By way of example only, <FIG> illustrates a hard disk drive <NUM> that reads from or writes to non-removable, nonvolatile magnetic media. Other removable/non-removable, volatile/nonvolatile computer storage media that can be used with the exemplary computing device include, but are not limited to, magnetic tape cassettes, flash memory cards, digital versatile disks, digital video tape, solid state RAM, solid state ROM, and other computer storage media as defined and delineated above. The hard disk drive <NUM> is typically connected to the system bus <NUM> through a non-volatile memory interface such as interface <NUM>.

The drives and their associated computer storage media discussed above and illustrated in <FIG>, provide storage of computer readable instructions, data structures, program modules and other data for the computing device <NUM>. In <FIG>, for example, hard disk drive <NUM> is illustrated as storing operating system <NUM>, other program modules <NUM>, and program data <NUM>. Note that these components can either be the same as or different from operating system <NUM>, other program modules <NUM> and program data <NUM>. Operating system <NUM>, other program modules <NUM> and program data <NUM> are given different numbers hereto illustrate that, at a minimum, they are different copies.

The computing device <NUM> may operate in a networked environment using logical connections to one or more remote computers. The computing device <NUM> is illustrated as being connected to the general network connection <NUM> through a network interface or adapter <NUM>, which is, in turn, connected to the system bus <NUM>. In a networked environment, program modules depicted relative to the computing device <NUM>, or portions or peripherals thereof, may be stored in the memory of one or more other computing devices that are communicatively coupled to the computing device <NUM> through the general network connection <NUM>. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between computing devices may be used.

Claim 1:
A system comprising:
a first server computing device comprising:
one or more first server processing units (<NUM>); and
one or more first server computer-readable media comprising computer-executable instructions which, when executed by the one or more first server processing units, cause the first server computing device to:
receive a first communication from a first client computing device (<NUM>, <NUM>, <NUM>, <NUM>), the first communication comprising a first value;
receive a second communication from a second client computing device (<NUM>, <NUM>, <NUM>, <NUM>), the second communication also comprising the first value;
associate both the first and second client computing devices with a first grouping of client computing devices based on both the first and second client computing devices transmitting the first value;
receive a request from the first client computing device for a first data;
search the first grouping of client computing devices for a computing device already having received the first data; and
transmit, to the first client computing device, in response to the request, an identification of the second client computing device as a source from which the first client computing device is to obtain the first data;
characterized by the first and second client computing devices being adapted to each independently retain the first
value by independently performing steps comprising:
generate a first random value (<NUM>, <NUM>, <NUM>, <NUM>);
receive a second random value (<NUM>, <NUM>, <NUM>, <NUM>) that was broadcast by another computing device;
retain the second random value in a value store in response to determining that the second random value is greater than the first random value;
discard the second random value from the value store in response to the receiving the second random value having last occurred more than a first predetermined amount of time ago;
broadcast the first random value in response to: (<NUM>) a broadcasting time occurring and (<NUM>) no greater value being retained in the value store at the broadcasting time, wherein the first random value is broadcasted only to one or more specific subsets of computing devices via network devices, wherein the computing devices of a subset are close by network proximity; and
not broadcast the first random value, despite the broadcasting time occurring, in response to a greater value being retained in the value store at the broadcast time.