Plaque It!
Sponsored by: Flash of Genius |
[0001] This application claims benefit of priority to provisional application Serial No. 60/401,928 filed Aug. 8, 2002 titled Abstracting Software Modules in a Peer-to-Peer Environment, which is hereby incorporated by reference in its entirety.
[0002] 1. Field of the Invention
[0003] This invention relates to peer-to-peer networking, and more particularly to abstracting software modules in a peer-to-peer environment.
[0004] 2. Description of the Related Art
[0005] The Internet has three valuable fundamental assets—information, bandwidth, and computing resources—all of which are vastly underutilized, partly due to the traditional client-server computing model. No single search engine or portal can locate and catalog the ever-increasing amount of information on the Web in a timely way. Moreover, a huge amount of information is transient and not subject to capture by techniques such as Web crawling. For example, research has estimated that the world produces two exabytes or about 2×10
[0006] Although miles of new fiber have been installed, the new bandwidth gets little use if everyone goes to one site for content and to another site for auctions. Instead, hot spots just get hotter while cold pipes remain cold. This is partly why most people still feel the congestion over the Internet while a single fiber's bandwidth has increased by a factor of 10{circumflex over ( )}6 since 1975, doubling every 16 months.
[0007] New processors and storage devices continue to break records in speed and capacity, supporting more powerful end devices throughout the network. However, computation continues to accumulate around data centers, which have to increase their workloads at a crippling pace, thus putting immense pressure on space and power consumption.
[0008] Finally, computer users in general are accustomed to computer systems that are deterministic and synchronous in nature, and think of such a structure as the norm. For example, when a browser issues a URL request for a Web page, the output is typically expected to appear shortly afterwards. It is also typically expected that everyone around the world will be able to retrieve the same page from the same Web server using the same URL.
[0009] The term peer-to-peer networking or computing (often referred to as P2P) may be applied to a wide range of technologies that greatly increase the utilization of information, bandwidth, and computing resources in the Internet. Frequently, these P2P technologies adopt a network-based computing style that neither excludes nor inherently depends on centralized control points. Apart from improving the performance of information discovery, content delivery, and information processing, such a style also can enhance the overall reliability and fault-tolerance of computing systems.
[0010]
[0011] A system and method for describing and identifying abstract software modules in peer-to-peer networking environments is described. In a peer-to-peer network, software modules may use the mechanism to provide information about the programming interface and functionality of software modules independently of protocols and behaviors that may be used to implement the software modules. Further, software modules may provide one or more implementations of a given functionality, using various protocols and behaviors, while retaining a common programming interface. The software modules may also provide one or more different network-compatible implementations for different execution environments.
[0012] Embodiments may use a tiered architecture to define abstract software modules in peer-to-peer networking environments. A first level of the tier may include one or more module classes. In one embodiment, the module class may include and/or define one or more of, but is not limited to, the “role” a module plays, how the module appears to other modules, and the module's API in each supported binding. In one embodiment, each module class may have one or more module specifications. Each module specification may have one or more module implementations. In one embodiment, a module specification may include, but is not limited to, the module's behavior as it appears from the outside, including the module's wire protocol and the module's compatibility with other instances of the same module, for example on other peers. In one embodiment, each module implementation may be an implementation of a module specification specific to one of one or more execution environments, bindings and/or other constraints.
[0013] In embodiments, one or more of these aspects of an abstract software module may be published separately in advertisements. Embodiments may use unique identifiers and advertisements to describe and identify software modules in a hierarchical manner. Using advertisements and identifiers, embodiments may provide a mechanism to identify a particular software module and its behavior. In one embodiment, no matter what platform an entity is on, the entity may preferably discover a particular implementation of the software module for the particular platform and thus be able to use the software module.
[0014] In one embodiment, one or more peers in a peer-to-peer network environment may host a class of software module. A module class advertisement may be generated for the module class. The module class advertisement may define a local behavior and an API for each peer-to-peer binding that supports the module class. A module class identifier may be assigned to the class of software module that uniquely identifies the module class. In one embodiment, the module class identifier may be included in the module class advertisement. In one embodiment, a role extension to the module class identifier may be generated for each instance of the module class configured to perform a different role in a context.
[0015] In one embodiment, a module specification identifier may be assigned to each of one or more module specifications of the module class. Each module specification identifier uniquely identifies its corresponding module specification. Each module specification may indicate an expected on-wire behavior and one or more network protocols for a particular embodiment of the module class. In one embodiment, a module specification advertisement may be generated for each module specification. In one embodiment, each module specification advertisement includes a corresponding module specification identifier. In one embodiment, each module specification advertisement includes or describes one or more mechanisms to invoke and use the module class.
[0016] In one embodiment, one or more module implementations may be generated for each module specification of the module class. Each module implementation is configured to execute within a particular execution environment. In one embodiment, a module implementation advertisement may be generated for each module implementation. In one embodiment, each module implementation advertisement includes a module specification identifier of the corresponding module specification.
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065] While the invention is described herein by way of example for several embodiments and illustrative drawings, those skilled in the art will recognize that the invention is not limited to the embodiments or drawings described. It should be understood, that the drawings and detailed description thereto are not intended to limit the invention to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope of the present invention as defined by the appended claims. The headings used herein are for organizational purposes only and are not meant to be used to limit the scope of the description or the claims. As used throughout this application, the word “may” is used in a permissive sense (i.e., meaning having the potential to), rather than the mandatory sense (i.e., meaning must). Similarly, the words “include”, “including”, and “includes” mean including, but not limited to.
[0066] A system and method for describing and identifying abstract software modules in peer-to-peer networking environments is described. In a peer-to-peer network, software modules may use the mechanism for abstract identity and definition to provide information about the programming interface and functionality of the software modules independently of protocols and behaviors that may be used to implement the software modules. Further, software modules in a peer-to-peer network may provide one or more implementations of a given functionality, using various protocols and behaviors, while retaining a common programming interface. The software modules may also provide one or more different network-compatible implementations for different execution environments.
[0067] While generally described herein for peer-to-peer environments implemented according to an exemplary peer-to-peer platform as described below, it is noted that embodiments of the system and method for describing and identifying abstract software modules in peer-to-peer networking environments may be used in peer-to-peer environments implemented according to other peer-to-peer platforms. Further, it is noted that embodiments may be used in other environments than peer-to-peer environments to describe and identify abstract software modules
[0068] Embodiments may use unique identifiers (e.g., UUIDs) and advertisements such as are described for the exemplary peer-to-peer platform described below to describe and identify software modules, such as services and applications, in a hierarchical manner. In one embodiment, a software module may be described in a module class advertisement and given a module class identifier. If that software module is used for different purposes in the same context, the software module may be further identified by an extension to its module class identifier that may be referred to as a role identifier or role extension. Each independent embodiment of the software module that provides an independent set of network protocols and behaviors may be assigned a module specification identifier.
[0069] In one embodiment, all implementations of all embodiments of a given module class for a given execution environment have the same programming interface. Therefore, software modules interacting locally may express their dependencies via their respective class identifiers (which may include a role extension), regardless of the particular execution environment and embodiment that was selected when configuring that environment.
[0070] In one embodiment, a software module may be assigned a module class identifier. Each independent embodiment of the software module that provides an independent set of network protocols and behaviors may be described by a module specification advertisement and assigned a module specification identifier. In one embodiment, a module specification identifier may be an extension of the identifier of the module class of which the module specification is an embodiment. In one embodiment, each implementation of each module specification may be described by a module implementation advertisement that may include one or more of, but is not limited to, the following information: a module specification identifier, an execution environment description, and a reference to a software environment (e.g. a software package which implements the module specification for the execution environment).
[0071] Embodiments may use a tiered architecture to define modules (e.g. services, advertisements, etc.) to abstract software modules in peer-to-peer networking environments.
[0072] In one embodiment, the module class
[0073] In one embodiment, each of these aspects of an abstract software module may be published separately in advertisements. One embodiment may provide module class advertisements, module specification advertisements, and module implementation advertisements to describe and identify abstract software modules in peer-to-peer networking environments.
[0074] In a peer-to-peer environment implemented with the exemplary peer-to-peer platform as described below, network resources such as peers, peer groups, pipes, and modules such as services may be represented by advertisements. Advertisements are language-neutral metadata documents for describing the network resources. Advertisements are used to describe peers, peer groups, pipes, content, modules such as services and other types of network resources. Advertisement types provided by the peer-to-peer platform may include one or more of, but are not limited to, peer advertisements, peer group advertisements, module class advertisements, module specification advertisements, module implementation advertisements, pipe advertisements, and rendezvous advertisements. Advertisements may be exchanged as documents in peer-to-peer protocol messages. One or more of the peer-to-peer platform protocols may use advertisements to provide information to entities interested in the peer-to-peer resources represented by the advertisements. Peer-to-peer platform protocols may be used to pass advertisements between peers and/or to access published advertisements.
[0075] In one embodiment, advertisements may include a series of hierarchically arranged elements. An advertisement's elements may appear in arbitrary order within the advertisement. Each element may include data or additional elements. An element may also have attributes. In one embodiment, attributes are name-value string pairs. An attribute may be used, for example, to store meta-data that may describe the data within the element. In one embodiment, peer-to-peer platform advertisements may be represented in the eXtensible Markup Language (XML). Other embodiments may use other encodings such as HTML or WML. In one embodiment, advertisements may be specified using a schema definition language such as the XML Schema Definition Language. In one embodiment, XML advertisements may be translated into other encodings such as HTML and WML to allow peers that do not support XML to access advertised resources. Advertisements are further described in the Advertisements section as well as other sections of the description of the exemplary peer-to-peer platform included below.
[0076] In one embodiment, a software module (e.g. service, application, etc.) class may be described by a module class advertisement
[0077] Using advertisements, embodiments may provide a mechanism to identify a particular software module (e.g. a service) and its behavior. In one embodiment, no matter what platform a user (or other entity such as another software module) is on, the user or other entity may locate (e.g. by a discovery process) a particular implementation of the software module for the particular platform and be able to use the software module. In one embodiment, to access a software module, a peer (or other entity such as another software module (e.g. service, application, etc.)) may use a discovery process such as that described herein for the exemplary peer-to-peer platform to discover a module implementation advertisement
[0078] As an example, a user or other entity may be able to locate and use a particular implementation of a printing service for use with the platform the user or other entity is on. In one embodiment, the user or other entity may first search for and locate a specification for the software module. Once the specification is located, the user or other entity may look for a particular implementation of the software module usable on the user or other entity's platform, load the implementation of the software module according to the advertisements for use on the platform, and run the software module.
[0079] The layers of advertisements may also serve to separate the specification from the implementation. This may reduce the size of the module implementation advertisements
[0080] In one embodiment, on a Java platform, after locating a desired module implementation advertisement
[0081] In one embodiment, a peer node may include a module advertisement and identifier generator for describing and identifying abstract software modules in peer-to-peer networking environments by generating module identifiers (e.g. module class identifiers
[0082]
[0083] Peer node
[0084] Each peer node
[0085] In order to interact with other peers (e.g. to form or join peer groups), a peer needs to be connected (e.g. by one or more network interfaces of its hosting peer node
[0086] In one embodiment, each peer node
[0087] In one embodiment, generated module advertisements. (e.g. module class advertisement
[0088] In one embodiment, a module class advertisement
[0089] The following illustrates an exemplary module class advertisement
<xs:element name=“MCA”type=“xxxx:MCA”/> <xs:complexType name=“MCA”> <xs:sequence> <xs:element name=“MCID”type=“xxxx:identifier”/> <xs:element name=“Name”type=“xs:string”minOccurs=“0”/> <xs:element name=“Desc”type=“xs:anyType”minOccurs=“0”/> </xs:sequence> </xs:complexType>
[0090] where the elements may include one or more of, but are not limited to:
[0091] MCID—Module class identifier
[0092] Name—A name associated with the module class. In one embodiment, the name is not required to be unique unless the name is obtained from a centralized naming service that guarantee name uniqueness. In one embodiment, this is an optional element.
[0093] Desc—Description. A string that may be used to describe and search for a module class. In one embodiment, this is an optional element.
[0094] In one embodiment, a module specification advertisement
[0095] In some embodiments of a peer-to-peer platform, one or more core peer group services (e.g. discovery, membership, resolver, etc.) may be implemented as software modules. In one embodiment, module specification identifiers
[0096] A module specification advertisement
[0097] The following illustrates an exemplary module specification advertisement
<xs:element name=“MSA”type=“xxxx:MSA”/> <xs:complexType name=“MSA”> <xs:sequence> <xs:element name=“MSID”type=“xxxx:IDENTIFIER”/> <xs:element name=“Vers”type=“xs:string”/> <xs:element name=“Name”type=“xs:string”minOccurs“0”/> <xs:element name=“Desc”type=“xs:anyType”minOccurs=“0”/> <xs:element name=“Crtr”type=“xs:string”minOccurs=“0”/> <xs:element name=“SURI”type=“xs:anyURI”minOccurs=“0”/> <xs:element name=“Parm”type=“xs:anyType”minOccurs=“0”/> <xs:element ref=“xxxx:PipeAdvertisement”minOccurs=“0”/> <xs:element name=“Proxy”type=“xs:anyURI”minOccurs=“0”/> <xs:element name=“Auth”type=“xxxx:IDENTIFIER”minOccurs=“0”/&
gt; </xs:sequence> </xs:complexType>
[0098] where the elements may include one or more of, but are not limited to:
[0099] MSID—module specification identifier
[0100] Vers—The version of the module specification that this advertisement advertises. In one embodiment, this is a required element.
[0101] Name—Name that may be associated with a module specification. The name may not be required to be unique. In one embodiment, the name may be obtained from a centralized naming service that guarantee name uniqueness, and therefore in this embodiment the name may be unique. In one embodiment, this is an optional element.
[0102] Desc—Description. A string that may be used to describe and search for a module specification. In one embodiment, this is an optional element.
[0103] CRTR—Creator. This element designates the creator of this module specification. In one embodiment, this is an optional element.
[0104] SURI—Specification URI (Uniform Resource Identifier). This element is a resource identifier that permits the retrieval of a document containing the module specification that this advertisement advertises. In one embodiment, this is an optional element.
[0105] Parm—May include one or more arbitrary parameters that may be interpreted by each implementation.
[0106] xxxx:PipeAdvertisement—Identifies a pipe advertisement which this module binds to an input pipe, and which thus may be used to establish a pipe to an implementation of this module specification. In one embodiment, this element name may be identical to the pipe advertisement document type since the entire element is an embedded pipe advertisement document. In one embodiment, this is an optional element.
[0107] Proxy—Proxy specification identifier. This is a module specification identifier
[0108] Auth—Authenticator specification identifier. This is a module specification identifier
[0109] In one embodiment, a module implementation advertisement
[0110] A module implementation advertisement
[0111] The following illustrates an exemplary module implementation advertisement
<xs:element name=“MIA”type=“xxxx:MIA”/> <xs:complexType name=“MIA”> <xs:sequence> <xs:element name=“MSID”type=“xxxx:IDENTIFIER”/> <xs:element name=“Comp”type=“xs:anyType”/> <xs:element name=“Code”type=“xs:anyType”/> <xs:element name=“PURI”type=“xs:anyURI”minOccurs=“0”/> <xs:element name=“Prov”type=“xs:string”minOccurs=“0”/> <xs:element name=“Desc”type=“xs:anyType”minOccurs=“0”/> <xs:element name=“Parm”type=“xs:anyType”minOccurs=“0”/> </xs:sequence> </xs:complexType>
[0112] where the elements may include one or more of, but are not limited to:
[0113] MSID—module specification identifier
[0114] Comp—Compatibility. An arbitrary element that may describe the environment in which this module implementation may be executed. Each framework capable of loading and executing the module may have its own requirements on the contents of this element. In one embodiment, this is a required element.
[0115] Code—This arbitrary element may include anything that is needed in addition to the package in order to load and execute the code of this module implementation. In one embodiment, for Java module implementations, this element may include a fully qualified class name containing the module's entry points. In one embodiment, this element may include the entire code.
[0116] PURI—Package URI (Uniform Resource Identifier). This element is a resource identifier that permits the retrieval of a package containing the code of this module implementation. In one embodiment, this is an optional element.
[0117] Prov—Provider. The provider of this module implementation. In one embodiment, this is an optional element.
[0118] Desc—Description. A string that may be used to describe and search for a module specification. In one embodiment, this is an optional element.
[0119] Parm—Parameter. May include one or more arbitrary parameters that may be interpreted by the module implementation's code.
[0120]
[0121]
[0122] As indicated at
[0123] In one embodiment, one or more module implementations may be generated for each module specification of the class of software module. Each module implementation is configured to execute within a particular execution environment. In one embodiment, a module implementation advertisement may be generated for each module implementation. In one embodiment, each module implementation advertisement includes a module specification identifier of the module specification implemented by the module implementation described and advertised by the module implementation advertisement. In one embodiment, two or more module implementations of the class of software module configured to execute within a particular execution environment may provide a common programming interface. As a result, software modules interacting locally may express their dependencies via their module class identifiers (including role extensions, if any), regardless of the particular execution environment and embodiment that was selected when configuring the execution environment.
[0124]
[0125] As indicated at
[0126]
[0127] As indicated at
[0128] The following are descriptions of embodiments of peer advertisements and peer group advertisements that may be used in embodiments of the system and method for describing and identifying abstract software modules in peer-to-peer networking environments.
[0129] A peer advertisement may describe a peer and the resources it provides to the group. A peer advertisement may include specific information about the peer including one or more of, but not limited to, its name, its unique identifier, its group identifier and descriptive information. A peer advertisement may also include endpoint addresses and any run-time attributes that individual peer services want to publish (such as being a rendezvous peer for a group).
[0130] The following illustrates an exemplary peer advertisement schema that may be used in embodiments and is not intended to be limiting:
<xs:element name=“PA”type=“xxxx:PA”/> <xs:complexType name=“PA”> <xs:sequence> <xs:element name=“PID”type=“IDENTIFIER”/> <xs:element name=“GID”type=“IDENTIFIER”/> <xs:element name=“Name”type=“xs:string”minOccurs=“0”/> <xs:element name=“Desc”type=“xs:anyType”minOccurs=“0”/> <xs:element name=“Svc” type=“xxxx:serviceParams” minOccurs=“0” maxOccurs=“unbounded”/> <xs:sequence> </xs:complexType>
[0131] where the elements may include one or more of, but are not limited to:
[0132] PID—Peer identifier that may uniquely identify the peer. Each peer may have a unique identifier. In one embodiment, this is a required element.
[0133] GID—The peer group identifier. This element may identify canonically which peer group this peer belongs to.
[0134] Name—A string that may be associated with the peer. In one embodiment, the name may not be required to be unique. In one embodiment, the name may be obtained from a centralized naming service that guarantees name uniqueness. In one embodiment, this is an optional element.
[0135] Desc—A string that may be used to index and search for a peer. In one embodiment, the string is not guaranteed to be unique. Two peers may have the same keywords. In one embodiment, this is an optional element.
[0136] Svc—Service. In one embodiment, any number of service elements may be included. In one embodiment, ach of the service elements may describe the association between a group service which may be denoted by its module class identifier (the value of an MCID (module class identifier) element), and arbitrary parameters encapsulated in a Parm (parameter) element. For example, all accessible endpoint addresses may be published in association with the Endpoint Service Module Class Identifier. The TLS Root certificate may be published under the Peer group Module Class Identifier (There may be a module class identifier for a Peer Group as well). The flag that denotes that this peer is a rendezvous for this group may be published under the Rendezvous Service module class identifier. In one embodiment, each service may be responsible for what is published under its module class identifier. The Service section may also optionally include an element (e.g., “isOff”) that may be used to indicate if this service is enabled or disabled. This element may be used to convey a configuration choice made by the owner of the peer.
[0137] A peer group advertisement may be used to describe peer group-specific resources including one or more of, but not limited to, name, group identifier, description, specification, and service parameters. The following illustrates an exemplary peer group advertisement schema that may be used in embodiments and is not intended to be limiting:
<xs:element name=“PGA”type=“xxxx:PGA”/> <xs:complexType name=“PGA”> <xs:sequence> <xs:element name=“GID”type=“xxxx:IDENTIFIER”/> <xs:element name=“MSID”type=“xxxx:IDENTIFIER”/> <xs:element name=“Name”type=“xs:string”minOccurs=“0”/> <xs:element name=“Desc”type=“xs:anyType”minOccurs=“0”/> <xs:element name=“Svc” type=“xxxx:serviceParam” minOccurs=“0” maxOccurs=“unbounded”/> </xs:sequence> </xs:complexType>
[0138] where the elements may include one or more of, but are not limited to:
[0139] GID—This element provides the peer group identifier. The peer group identifier is the canonical way of referring to a group and uniquely identifies the peer group.
[0140] MSID—Peer group specification identifier. This designates the module that provides the peer group mechanism for the group. The specification identifier may include an abstraction of that mechanism. This abstraction may be optionally described by a module specification advertisement, and one or more implementations may exist, which may each be described by a module implementation advertisement. In one embodiment, these advertisements may all be searched by peer group specification identifier. In one embodiment, this is a required element.
[0141] Name—A name that may be associated with the peer group. In one embodiment, the name is not required to be unique. In one embodiment, the name may be obtained from a centralized naming service that guarantee name uniqueness. In one embodiment, this is an optional element.
[0142] Desc—This element provides descriptive information that may be used to index and search for a peer group. In one embodiment, the content of this element may not be unique. For example, two peer groups may have the same keywords.
[0143] Svc—Service. In one embodiment, any number of service elements may be included. Each service element may describe the association between a group service denoted by its module class identifier (the value of an MCID element), and one or more arbitrary parameters encapsulated in a Parm element. This optional parameter may only be meaningful to some services. It may be used to configure a service specifically in relation with its use by this group. For example, a simple membership service may find an encrypted password list there. In one embodiment, this is an optional element.
[0144] The following describes in greater detail various types of peer-to-peer platform identifiers that may be used in embodiments of the system and method for describing and identifying abstract software modules in peer-to-peer networking environments.
[0145] In embodiments of peer-to-peer platforms such as the exemplary peer-to-peer platform described herein, peer-to-peer platform protocols may need to refer to peers, peer groups, pipes and other peer-to-peer platform resources. In one embodiment, these references may be presented in the protocols as peer-to-peer platform identifiers. Peer-to-peer platform identifiers may provide a mechanism for uniquely identifying specific peer groups, peers, pipes, contents and service instances, among other resources. Peer-to-peer platform identifiers may provide unambiguous references to the various peer-to-peer platform entities. There may be several types of peer-to-peer platform entities which may have peer-to-peer platform identifier types defined including one or more of, but not limited to: peer groups, peers, pipes, content, module classes and module specifications.
[0146] In one embodiment, peer-to-peer platform identifiers may be presented as Uniform Resource Names (URNs). URNs are a form of URI (Uniform Resource Identifier) that are intended to serve as persistent, location-independent, resource identifiers. Like other forms of URI, peer-to-peer platform identifiers are presented as text. See IETF RFC
[0147] In one embodiment, a peer-to-peer platform identifier is a standard URN in the peer-to-peer platform identifier namespace. Peer-to-peer platform identifier URNs are identified by a namespace identifier, for example “xxxx”. Each peer-to-peer platform identifier URN may also include an identifier format keyword. The identifier format keyword ma