Within the field of computing, many scenarios involve the provision of a document service across a set of servers, which may be arranged in a set of one or more clusters. For example, the documents may represent objects of an object-oriented computing environment; records of a database; or messages in a distributed email system. In these and other scenarios, the document service may serve a set of client applications operated by one or more users of the document service.
In such scenarios, the server set may be configured to provide the document service to the one or more users in view of various considerations. As a first example, the document set may be distributed across the server set in various ways. As a second example, the server set may feature various types of replication, where two or more copies of one or more documents are stored by one or more servers, in order to facilitate fault detection and tolerance, availability, and concurrent access by two or more users. As a third example, the servers of the server set may be partitioned into two or more clusters, which may in turn be geographically distributed and/or allocated for particular roles. As a fourth example, the document service may serve discrete sets of documents to two or more clients, and it may be desirable to enforce security policies, such as permitting access of a particular data set to a first user while prohibiting access by a second user. As a fifth example, the document service may involve various types and volumes of communication among the servers regarding the state of the server set, such as the addition, removal, or reconfiguration of various servers. As a sixth example, it may be desirable to configure the server set in a flexible manner, such that changes to the server set may be implemented to adjust these and other characteristics of the server set and the document service.
In view of these considerations, an administrator may choose a configuration of the server set to achieve a combination of such features suitable for the types and uses of the document set. Many such features of the architecture of the servers, such as the network topologies, network communication and routing algorithms, and load-balancing techniques, may contribute to such configuration.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key factors or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
Presented herein are architectures for a server set that may facilitate the provision of a document service having a variety of desirable characteristics. A document set may be partitioned into at least two document ranges. The respective document ranges may be assigned to an agent, and, among the servers of the server set, one or more assigned servers may be selected to host the agent. The agent may then be deployed to the (one or more) assigned servers. A request is received to apply an operation to a selected document of the document set may be fulfilled by identifying the document range of the document, and one of the assigned servers that hosts an agent to which the document range has been assigned. The request may then be forwarded to the identified server to apply the requested operation to the selected document.
To the accomplishment of the foregoing and related ends, the following description and annexed drawings set forth certain illustrative aspects and implementations. These are indicative of but a few of the various ways in which one or more aspects may be employed. Other aspects, advantages, and novel features of the disclosure will become apparent from the following detailed description when considered in conjunction with the annexed drawings.
The claimed subject matter is now described with reference to the drawings, wherein like reference numerals are used to refer to like elements throughout. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the claimed subject matter. It may be evident, however, that the claimed subject matter may be practiced without these specific details. In other instances, structures and devices are shown in block diagram form in order to facilitate describing the claimed subject matter.
Within the field of computing, many scenarios involve a document set comprising at least one document, where respective documents comprise data that may be structured in some manner. As a first example, the documents may comprise the records within the tables of a database. As a second example, the records may comprise objects in an object-oriented computing environment. As a third example, the records may comprise elements structured according to a hierarchical format, such as a variant of the Extensible Markup Language (XML) or JavaScript Object Notation (JSON) hierarchical formats. The document set may be provided by a set of servers on behalf of one or more clients, each of which may involve one or more users operating one or more devices executing one or more applications that interact with the documents of the document service.
In such scenarios, the configuration of the servers may be selected to provide a document service with various characteristics. As a first example, the servers may be configured to distribute the documents of the document set in various ways; e.g., the document set may be evenly distributed over the servers, may be redundantly distributed over the servers, or may be distributed such that particular servers store particular subsets of related documents of the document set. As a second example, the server set may feature varying degrees of replication in order to facilitate fault tolerance (e.g., two or more servers may store replicas of a document, such that a document remains available from the first server even if the second server fails or becomes corrupted) and/or performance (e.g., requests for a document may be fulfilled by either of two or more servers respectively storing replicas of the document). As a third example, the server set may be partitioned into clusters, based on various logical considerations (e.g., security domains, network topologies, or the allocation of different servers into different roles) and/or physical considerations (e.g., distribution of the servers in different racks, rooms, buildings, or geographic regions). As a fourth example, the server set may provide the document service to two or more clients, and may apply security policies in order to provide access of a particular data set to the users of a first client while prohibiting such access to the users of a second client. As a fifth example, the server set may feature various types and levels of communication among the servers in order to share information and coordinate the document service in light of various configuration events arising within the server set, such as the addition, removal, or reconfiguration of one or more servers or document sets. As a sixth example, some configurations may promote the flexibility of the server set (e.g., providing rapid and easy reconfiguration of servers or changes to a document set), while other configurations may constrain such flexibility (e.g., exhibiting a delay, involving extensive reconfiguration, or creating unexpected consequences in response to such changes).
In view of these and other considerations, an administrator of the server set may configure a server set to provide a document service according to various architectures, where each architecture comprises a selection among the variety of computing resources for each aspect of the server set. For example, each architecture may feature a particular network topology; network configuration techniques, such as the protocols used to communicate information among the servers regarding network configuration changes; network routing algorithms for exchanging information among the servers; distribution algorithms for distributing the document set over the servers; and partitioning techniques to ensure the application of security and access policies. Moreover, respective architectures may exhibit various characteristics, such as scalability, availability, performance, fault tolerance, efficiency, flexibility, security, and cost, as compared with other architectures, and that the selection of a particular architecture for a particular document service to be provided by a particular server set may be difficult in view of the extensive set of options and tradeoffs.
In view of these and other properties of the server set 112, it may be appreciated that a wide variety of architectures exist that may be capable of providing a document service for a particular server set 112 on behalf of a particular set of clients 102 utilizing various client devices 104 and client applications 106. Respective architectures may result in various properties and/or tradeoffs of the server set 112, and an administrator may have difficulty choosing among the large set of available options to suit a particular server set 112 and document service. Moreover, it may be difficult for an administrator to reconfigure the server set after selecting an initial architecture. As a first example, altering the distribution of the documents 118 among the servers 116 may involve a relocation of a potentially large set documents 118 from a first server 206 to a second server 206. During this time, the involved documents 118 may be unavailable to the client 102 for whom the document service is being provided; because the documents 118 may not be reliably located, and/or because changes to a document 118 may fail to persist (e.g., if the document 118 has already been copied to a different server 116); and/or because related resources, such as indices, may have to be rebuilt. Thus, changes to the document set may result in extensive complications and down time for part or all of the document service. As a second example, it may be difficult to scale out the servers 116 of a cluster 114 in a particular manner. For example, some document distribution techniques may provide only limited options for specifying the distribution on a particular server 116 of a cluster 114. Thus, an administrator may wish to add one or more servers 116 on behalf of a particular client 102; to provide expanded capacity for a particular document set; or to add replicas 112 of some documents 118 stored by particular other servers 116. However, the document distribution manager may fill the servers 116 with documents 118 from several clients 102 participating in the document service. These and other limitations may arise from limited flexibility of the document service due to the architecture selected for the server set 112.
Presented herein are various architectures for a server set 112 that is capable of providing a document service with an appealing set of advantageous properties. In accordance with these architectures, respective servers 116 of a server set 112 may be configured to share a document set by partitioning the documents 118 into document ranges. For example, a mechanism may be provided to identify a numeric identifier of respective documents 118, such as a hashcode, and the document ranges may involve particular ranges of hashcodes. Additionally, each server 116 may be configured to execute one or more agents, where each agent is selected to service the documents 118 within one or more document ranges. Moreover, requests to apply one or more operations to one or more documents 118 may be performed by the agents associated with the document ranges of the documents 118. Respective servers 116 may therefore either invoke an agent hosted thereby to apply the operation to locally hosted documents 118, or forward the operation to another server 116 that is hosting such an agent. This architecture may facilitate many desirable characteristics of the configuration and performance of the server set 112 and the resulting document service.
For example, in the exemplary scenario 300 of
The architecture and techniques illustrated in the exemplary scenario 300 of
Still another embodiment involves a computer-readable medium comprising processor-executable instructions configured to apply the techniques presented herein. Such computer-readable media may include, e.g., computer-readable storage media involving a tangible device, such as a memory semiconductor (e.g., a semiconductor utilizing static random access memory (SRAM), dynamic random access memory (DRAM), and/or synchronous dynamic random access memory (SDRAM) technologies), a platter of a hard disk drive, a flash memory device, or a magnetic or optical disc (such as a CD-R, DVD-R, or floppy disc), encoding a set of computer-readable instructions that, when executed by a processor of a device, cause the device to implement the techniques presented herein. Such computer-readable media may also include (as a class of technologies that are distinct from computer-readable storage media) various types of communications media, such as a signal that may be propagated through various physical phenomena (e.g., an electromagnetic signal, a sound wave signal, or an optical signal) and in various wired scenarios (e.g., via an Ethernet or fiber optic cable) and/or wireless scenarios (e.g., a wireless local area network (WLAN) such as WiFi, a personal area network (PAN) such as Bluetooth, or a cellular or radio network), and which encodes a set of computer-readable instructions that, when executed by a processor of a device, cause the device to implement the techniques presented herein.
An exemplary computer-readable medium that may be devised in these ways is illustrated in
The techniques discussed herein may be devised with variations in many aspects, and some variations may present additional advantages and/or reduce disadvantages with respect to other variations of these and other techniques. Moreover, some variations may be implemented in combination, and some combinations may feature additional advantages and/or reduced disadvantages through synergistic cooperation. The variations may be incorporated in various embodiments (e.g., the exemplary method 400 of
A first aspect that may vary among embodiments of these techniques relates to the scenarios wherein such techniques may be utilized.
As a first variation of this first aspect, the techniques presented herein may be utilized with many types of client devices 104, such as servers, server farms, workstations, laptops, tablets, mobile phones, game consoles, and network appliances. Such client devices 104 may also provide a variety of computing components, such as wired or wireless communications devices; human input devices, such as keyboards, mice, touchpads, touch-sensitive displays, microphones, and gesture-based input components; automated input devices, such as still or motion cameras, global positioning service (GPS) devices, and other sensors; output devices such as displays and speakers; and communication devices, such as wired and/or wireless network components.
As a second variation of this first aspect, the servers 116 hosting the document service may comprise many types of server devices, including workstations, rack-mounted servers, massively parallel processors, and sets of consumer devices. Such servers may also be organized into clusters 114 according to various network architectures, such as a hierarchical domain architecture or a token-ring network architecture, or may be loosely organized, such as through a dynamic host configuration protocol (DHCP)-serviced network. Additionally, such servers 116 may be configured in various server set architectures, such as peer-to-peer, centralized, or role-based configurations, and may be provisioned to service clients 102 in various ways, such as a collection of dedicated servers 116 respectively provisioned for a single client 102; shared servers 116 respectively provisioned for two or more clients 102; and a mixture thereof.
As a third variation of this first aspect, the documents 118 of the document service may comprise many types of information, such as records in a database; human-readable documents in a library; objects in an object-oriented computing environment; and media objects comprising various forms of renderable media. The documents 118 may also be utilized by many types of applications 106, such as data-driven applications accessing the data as structured information; object-oriented applications that utilize objects respectively represented by a document 118 in the document set; and library or media interfaces configured to present or render the documents 118 for a user. These and other variations may be suitable for implementations of the techniques presented herein.
A second aspect that may vary among embodiments of the techniques presented herein relates to the types of criteria that may be specified in queries 516 for application to a document set 104.
As a first variation of this second aspect, the provisioning of the document set into document ranges 204 may be selected in various ways, e.g., an arbitrary selection of documents 118 for respective document ranges 204; a selection of topically related documents 118; and a selection of interrelated documents 118 that may be targeted together by a particular operation 306.
As a second variation of this second aspect, the documents 118 may be associated with document ranges 204 in various ways. As one example, respective document 118 may comprise a document identifier 202, and respective document ranges 204 may specify a document identifier range, such as a starting document identifier and an ending document identifier that represent the bounds of the document range 204. Among the range of document identifiers 202, the document set may be partitioned into at least two document identifier ranges; and any document 118 having a document identifier 202 within the document identifier range may be identified as associated with the document range 204.
As a third variation of this second aspect, the document identifiers 202 may be arbitrarily assigned to the document 118. For example, the document identifiers 202 may comprise a sequentially or randomly unique integer assigned to the document 118 upon document creation; a hashcode computed over some data or metadata of the document 118; or a globally unique identifier (GUID), or a universally unique identifier (UUID). In some scenarios, it may be desirable to choose the document identifiers 202 are unchanged by changes to the contents of the documents 118 (e.g., computing a hashcode using only document properties that do not change), so that references to the document 118 in other documents 118 or applications 106 according to the document identifier 202 of the document 118 remain accurate.
As a fourth variation of this second aspect, the partitions of the document set into document ranges may be selected in various ways. As a first example of this fourth variation, the document ranges may be selected arbitrarily; e.g., in the exemplary scenario 200 of
As a third example of this fourth variation, the document ranges may have semantic significance; e.g., a document range may be selected for a particular set of related documents 118, such as interrelated documents 118 or documents 118 that refer to a particular topic. However, in such scenarios, changes to the contents of a document 118 may result in a change to the document identifier 202, and potentially involving a relocation of the document 118 from a first server 116 to a second server 116 hosting an agent 206 that is associated with the document range 204 of the new identifier. Conversely, if the document ranges 204 have semantic significance, changes to the contents or metadata of a document 118 may change the document range 204 in which the document 118 is to be included (e.g., shifting the document 118 from a first document range 204 for a first set of interrelated documents to a second document range 204 for a second set of interrelated documents). In such scenarios, the document identifier 202 of the document 118 may be altered to associate the document 118 with the second document range 204. Alternatively, the partitioning may be altered such that the document identifier 202 of the document 118 is not changed, but is now associated with the second document range 204 instead of the first document range 204, thereby enabling both an association of documents 118 with semantically significant document ranges 204 and also a portability of documents 118 among such document ranges 204 without altering the document identifiers 202 of the documents 118.
One such technique for enabling the association of document identifiers 202 with document ranges 204 involves the generation of a partitioning map that identifies, for respective document identifier ranges, the agent 206 hosting the document identifier range, and, optionally, one or more servers 116 hosting such agents 206. Respective servers 116 may therefore be configured to identify the document range 204 of a particular document 118 by examining the partitioning map to identify the agent 206 assigned to a document identifier range that includes the document identifier 202 of the selected document 118. Additionally, the partitioning map may be updated to reflect changes in the partitioning for particular documents 118. For example, upon receiving a reassignment of a selected document 118 from a first agent 206 identified by the partitioning map to a second agent 118, the server 116 may generate an updated partitioning map that identifies the second agent 206 reassigned to service the selected document 118, and may distribute the updated partitioning map to at least one other server 116 of the server set 112. In this manner, the server set 112 may provide the association of documents 118 with document ranges 204 in a flexible manner that avoids altering the document identifiers 202 of the documents 118.
A third aspect that may vary among embodiments of these techniques involves the architecture of the server set 112, which may be selected to enable or facilitate various features of the document service.
As a first variation of this third aspect, respective servers 116 and agents 206 may be allocated in various ways. For example, the allocation may be selected arbitrarily or naïvely; e.g., the document set may be partitioned in to proportional document ranges 204 and assigned in proportional measure to the agents 206, which may be distributed proportionally over the hosting servers 116. Alternatively, the assignment of document ranges 204 to agents 206 and/or hosting of agents 206 by servers 116 may be selected in view of various considerations of the document service and/or server set 112. As a first such example, the server set 112 may provide documents 118 associated with at least two document sets, which may be distinguished by topic, by interrelationships among the documents 118, and/or by the clients 102 or applications 106 for which the documents 118 are hosted. Respective servers 116 may be assigned to a server role selected from a server role set comprising a dedicated server that hosts only agents 306 servicing the documents 118 of a selected document set (e.g., exclusively servicing the documents 118 of a particular topic, a particular group of interrelated documents 118, or for a particular client 102 or application 106), and a shared server that concurrently hosts a first agent 306 servicing documents 118 of a first document set and a second agent 306 servicing documents 118 of a second document set. The optional assignment of server roles may be selected by an administrator, or may be automatically selected based on various heuristics. In one such embodiment, the selection of server roles is based on a service level agreement associated with a document set; e.g., the document service may desirably exhibit particular service characteristics (such as capacity, availability, reliability, throughput, or latency) for a particular client 102 as identified by a service level agreement, and the selection of roles for servers 116 may be selected to fulfill the service level agreements of the document sets comprising the document service.
As a second variation of this third aspect, the architecture of the server set 112 may enable various levels of reliability, fault tolerance, performance, and/or scalability. To this end, the server set may include at least two agents 206 that share at least one document range 204; e.g., a first agent 206 hosted on a first server 116 may service a document range 204 of a document set replica that is also hosted by a second agent 206 hosted on a second server 116, such that either agent 206 remains available to provide the documents 118 if the other agent 206 and/or server 116 becomes unresponsive. The agents 206 may synchronize updates to the documents 118 within the document set replica, and/or may share the computational load of applying operations 306 to the documents 118 within the document range 204 of the document set replica. Such document set replicas may be advantageous in many scenarios (e.g., where the first server 116 is hosted in a first geographic region, and the second server 116 is hosted in a second geographic region that is not near the first geographic region), such that each server 116 may fulfill requests received from clients 102 and devices 104 within the respective geographic regions.
As a third variation of this third aspect, the architecture of the server set 112 may enable a redistribution of computational load of the document service, and may adjust to fluctuations in order to maintain acceptable performance. For example, respective servers 116 may measure a first computational load applied to the server 116, and may compare the first computational load applied to the server 116 with a second computational load applied to a second server 116 of the server set 112 (e.g., the number of documents 118 serviced by each server 116, the network capacity and bandwidth utilization of each server 116, and/or the processing consumed by the agents 206 of each server 116). If significant and persistent differences in computational load are identified, the servers 116 may interoperate to redistribute the computational load in various ways. As a first example, the first server 116 may transfer one or more agents 206 to the second server 116. As a second example, the servers 116 may repartition at least one document range 204 serviced by at least one agent 206 hosted by at least one of the servers 116 into an updated document range. These and other features may be achievable through the architecture of the server set 112 in accordance with the techniques presented herein.
A fourth aspect that may vary among implementations of the techniques presented herein involves the configuration of a server 116 to identify a second server 116 hosting an agent 206 managing the document range 204 of one or more documents 118 to which an operation 306 is to be applied, and the routing of operations 306 among the servers 116 of the server set 112.
As a first variation of this fourth aspect, a centralized directory or server may be utilized that tracks the hosting of agents 206 by servers 116 and/or the document ranges 204 associated with respective agents 206. For example, in order to forward an operation 306 to an agent 206 hosted by another server 116, a server 116 may contact an agent locating service with a request to identify an address of a second server 116 hosting an agent 206 selected to service the document range 204 of the documents 118 involved in the operation 306, and, upon receiving the address from the agent locating service, may forward the operation 306 to the address of the second server 116. Additionally, these queries may be facilitated by an agent locating cache provided on the server 116 to associate respective document ranges 204 with an address of another server 116 of the server set 112 hosting at least one agent 206 servicing the document range 204. Upon receiving the address of the second server 116, the server 116 may store the address of the second server in the agent locating cache; and when endeavoring to forward an operation 306 to another server 116, the server 116 may search the agent locating cache for the address of the second server 116 before sending the request to the agent locating service. However, in some scenarios, it may be undesirable to centralize the location of respective servers 116 (e.g., in an extensive and frequently changing server set 112, the agent locating service may become overloaded or may provide incorrect or stale information). Accordingly, it may be desirable to provide a less centralized technique that provides more efficient communication among the servers 116 of the server set 112.
As a second variation of this fourth aspect, respective servers 116 may be configured to store and share information about the servers 116 of the server set 112 and the agents 206 hosted thereupon, and to use such information to forward operations 306 to servers 116 hosting agents 206 that are capable of performing such operations. In particular, it may be desirable to select techniques that enable an efficient determination of such servers 116 in order to reduce the amount of coordination involved in routing an operation 306 to an appropriate server 116. However, it may also be desirable to reduce the volume of communication among the servers 116 in coordinating such information.
One such set of techniques involves arranging the servers in a particular logical configuration, such as in a hierarchy or a ring topology, where respective servers 116 may have a degree of proximity to each other server 116 in the server set 112. In some such embodiments, the organization may reflect the organization of document ranges 204 and/or the physical proximity and relationships of the servers 116. Additionally, respective servers 116 may be configured to store more information about neighboring servers that are near the server 116 in the logical configuration, and to store less information about distant servers that are not near the server 116 in the logical configuration. This configuration may enable an efficient local communication among a neighborhood of servers 116, and efficient but reduced communication between pairs of distant servers 116.
Such configurations may also facilitate efficient routing of operations 306 among the servers 116. For example, a server 116 may receive a request 304 comprising an operation 306 involving a document 118 having a document identifier 202 that is not serviced by the agents 206 hosted on the server 116, and may endeavor to identify and forward the operation 306 to an appropriate second server 116. If the document identifier 202 is within a document identifier range that is near the server 116 (e.g., of a second server 116 within the server neighborhood of the server 116), then the server 116 may have sufficient information to route the operation 306 directly to the second server 116. However, if the document identifier 202 is not within a document identifier range that is near the server 116, then the server 116 may have scant information about the distant servers 116 that provide an approximation of the appropriate distant server 116 for the operation 306. Even if the distant server 116 to which the server 116 forwards the operation 306 is also not hosting an agent 206 associated with the document range 204 of the documents 118 involved in the operation 306, the distant server may be near a third server 116 that is hosting such an agent 206 (e.g., the third server 116 may be within the server neighborhood of the distant server), and the distant server may be able to forward the operation 306 to the third server 116 hosting the agent 206. In this manner, the routing of operations 306 among the servers 116 may be efficiently achieved with a desirable balance of decentralization and conservation of communication.
As further illustrated in the exemplary scenario 800 of
As a third variation of this fourth aspect, additional variations in the server coordination and routing may be achievable within the server set 112. As a first such variation, the partitions of the document set and/or hosting of agents 206 may be adjusted to reflect changes in the server set 112. As a first such example, upon joining the server set 112, a new server 116 may be assigned a particular location in the ring topology between two other neighboring servers 116. The new server 116 may join the ring topology by interoperating with the neighboring servers 116 to repartition at least one document range 204 serviced by at least one agent 206 hosted by the neighboring server 116, such that the new server 116 may instantiate an agent 206 with an assignment to part of the document range 204.
As a second example of this third variation, respective servers 116 may be configured to adapt to the failure of other servers 116 of the server set 112. As a first such example, upon attempting to forward an operation 306 to a neighboring server 116 but failing to contact the neighboring server 116 due to a server or network failure, the server 116 may repartition the document ranges 204 serviced by the agents 206 hosted by the neighboring server 116 (e.g., either accepting assignment of the document ranges 204 and instantiating one or more agents 206 to handle the document ranges 204 formerly assigned to the failed neighboring server 116). This reassignment may involve collaboration with a second neighboring server 116; e.g., the server 116 and the second neighboring server 116 may interoperate to split the document ranges 204 formerly assigned to the failed neighboring server 116 between the two servers 116. As a second such example, upon failing to contact a second server 116 that is not in the server neighborhood of the server 116, the server 116 may identifying a neighboring server that is near the second server 116 (e.g., according to the ring topology 802), and forward the operation 306 to the neighboring server, which may perform the repartitioning of the document ranges 204 formerly assigned to the failed server. These and other variations in the interoperation of the servers 116 of the server set 112 may enable or facilitate many such features of the server set 112 and the document service in accordance with the techniques presented herein.
Although not required, embodiments are described in the general context of “computer readable instructions” being executed by one or more computing devices. Computer readable instructions may be distributed via computer readable media (discussed below). Computer readable instructions may be implemented as program modules, such as functions, objects, Application Programming Interfaces (APIs), data structures, and the like, that perform particular tasks or implement particular abstract data types. Typically, the functionality of the computer readable instructions may be combined or distributed as desired in various environments.
In other embodiments, device 902 may include additional features and/or functionality. For example, device 902 may also include additional storage (e.g., removable and/or non-removable) including, but not limited to, magnetic storage, optical storage, and the like. Such additional storage is illustrated in
The term “computer readable media” as used herein includes computer storage media. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions or other data. Memory 908 and storage 910 are examples of computer storage media. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, Digital Versatile Disks (DVDs) or other optical 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 information and which can be accessed by device 902. Any such computer storage media may be part of device 902.
Device 902 may also include communication connection(s) 916 that allows device 902 to communicate with other devices. Communication connection(s) 916 may include, but is not limited to, a modem, a Network Interface Card (NIC), an integrated network interface, a radio frequency transmitter/receiver, an infrared port, a USB connection, or other interfaces for connecting computing device 902 to other computing devices. Communication connection(s) 916 may include a wired connection or a wireless connection. Communication connection(s) 916 may transmit and/or receive communication media.
The term “computer readable media” may include communication media. Communication media typically embodies computer readable instructions or other data in a “modulated data signal” such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” may include a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal.
Device 902 may include input device(s) 914 such as keyboard, mouse, pen, voice input device, touch input device, infrared cameras, video input devices, and/or any other input device. Output device(s) 912 such as one or more displays, speakers, printers, and/or any other output device may also be included in device 902. Input device(s) 914 and output device(s) 912 may be connected to device 902 via a wired connection, wireless connection, or any combination thereof. In one embodiment, an input device or an output device from another computing device may be used as input device(s) 914 or output device(s) 912 for computing device 902.
Components of computing device 902 may be connected by various interconnects, such as a bus. Such interconnects may include a Peripheral Component Interconnect (PCI), such as PCI Express, a Universal Serial Bus (USB), Firewire (IEEE 1394), an optical bus structure, and the like. In another embodiment, components of computing device 902 may be interconnected by a network. For example, memory 908 may be comprised of multiple physical memory units located in different physical locations interconnected by a network.
Those skilled in the art will realize that storage devices utilized to store computer readable instructions may be distributed across a network. For example, a computing device 920 accessible via network 918 may store computer readable instructions to implement one or more embodiments provided herein. Computing device 902 may access computing device 920 and download a part or all of the computer readable instructions for execution. Alternatively, computing device 902 may download pieces of the computer readable instructions, as needed, or some instructions may be executed at computing device 902 and some at computing device 920.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.
As used in this application, the terms “component,” “module,” “system”, “interface”, and the like are generally intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a controller and the controller can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers.
Furthermore, the claimed subject matter may be implemented as a method, apparatus, or article of manufacture using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof to control a computer to implement the disclosed subject matter. The term “article of manufacture” as used herein is intended to encompass a computer program accessible from any computer-readable device, carrier, or media. Of course, those skilled in the art will recognize many modifications may be made to this configuration without departing from the scope or spirit of the claimed subject matter.
Various operations of embodiments are provided herein. In one embodiment, one or more of the operations described may constitute computer readable instructions stored on one or more computer readable media, which if executed by a computing device, will cause the computing device to perform the operations described. The order in which some or all of the operations are described should not be construed as to imply that these operations are necessarily order dependent. Alternative ordering will be appreciated by one skilled in the art having the benefit of this description. Further, it will be understood that not all operations are necessarily present in each embodiment provided herein.
Moreover, the word “exemplary” is used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as “exemplary” is not necessarily to be construed as advantageous over other aspects or designs. Rather, use of the word exemplary is intended to present concepts in a concrete fashion. As used in this application, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or”. That is, unless specified otherwise, or clear from context, “X employs A or B” is intended to mean any of the natural inclusive permutations. That is, if X employs A; X employs B; or X employs both A and B, then “X employs A or B” is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims may generally be construed to mean “one or more” unless specified otherwise or clear from context to be directed to a singular form.
Also, although the disclosure has been shown and described with respect to one or more implementations, equivalent alterations and modifications will occur to others skilled in the art based upon a reading and understanding of this specification and the annexed drawings. The disclosure includes all such modifications and alterations and is limited only by the scope of the following claims. In particular regard to the various functions performed by the above described components (e.g., elements, resources, etc.), the terms used to describe such components are intended to correspond, unless otherwise indicated, to any component which performs the specified function of the described component (e.g., that is functionally equivalent), even though not structurally equivalent to the disclosed structure which performs the function in the herein illustrated exemplary implementations of the disclosure. In addition, while a particular feature of the disclosure may have been disclosed with respect to only one of several implementations, such feature may be combined with one or more other features of the other implementations as may be desired and advantageous for any given or particular application. Furthermore, to the extent that the terms “includes”, “having”, “has”, “with”, or variants thereof are used in either the detailed description or the claims, such terms are intended to be inclusive in a manner similar to the term “comprising.”
This application is a continuation of, and claims priority under 35 U.S.C. §§ 119-120 to, U.S. patent application Ser. No. 15/650,801, entitled “Elastically Scalable Document-Oriented Storage Services,” filed on Jul. 14, 2017, which is in turn a continuation of, and claims priority under 35 U.S.C. §§ 119-120 to, U.S. patent application Ser. No. 13/830,493, entitled “Elastically Scalable Document-Oriented Storage Services,” filed on Mar. 14, 2013, the entirety of which is hereby incorporated by reference as if fully rewritten herein.
Number | Date | Country | |
---|---|---|---|
Parent | 15650801 | Jul 2017 | US |
Child | 16199732 | US | |
Parent | 13830493 | Mar 2013 | US |
Child | 15650801 | US |