This invention relates generally to the cloud-computing field, and more specifically to a new and useful method and system for managing a computing cluster in the cloud-computing field.
There are increasingly more and more cloud-based services and platforms. While the use of cloud computing has been influential in allowing new products to be developed and built, management of a computing cluster on which the service or platform runs is still a challenge. Each machine or device in the computing cluster typically has its configuration set individually. However, changes in other machines can impact how one might configure a particular machine, and synthesizing such information is not easily accomplished. Thus, there is a need in the cloud-computing field to create a new and useful method and system for managing a computing cluster.
This invention provides such a new and useful method and system.
The following description of the preferred embodiments of the invention is not intended to limit the invention to these preferred embodiments, but rather to enable any person skilled in the art to make and use this invention.
1. Method of a First Embodiment for Managing a Computer Cluster
As shown in
Step S110, which includes hosting a plurality of machines in a networked computing cluster, functions to operate a plurality of devices or hosts that require orchestration. The computing cluster is preferably an internet based plurality of machines (i.e., hosts), but may alternatively be an internally networked plurality of machines. The machines preferably provide computing and/or storage capabilities. A machine is preferably a server but may alternatively be any suitable dedicated device or virtual device. A machine may alternatively be a virtual machine wherein a single device facilitates running a plurality of virtual machines. A machine is preferably configured with machine state to perform a particular task. In one preferred embodiment the computing cluster is used for a telephony platform. For a telephony platform, the plurality of machines is preferably composed of call routers, load balancers, call queues, media processors, message routing devices, resource databases, and/or any additional devices. The machines may alternatively be setup for any suitable type of computing cluster. The networked computer cluster is preferably hosted by the entity administering the method, but the computer cluster may alternatively be hosted on a third party platform, or the whole of the computer cluster may alternatively be distributed over a plurality of platforms or computing clusters. The entity administering the method preferably has some level of operational control of the machines composing the computing cluster, either directly, an API of third party service, or any suitable control mechanism.
Step S120, which includes connecting the plurality of machines of the cluster to a configuration controller, functions to create channels to send and receive messages between a central device (e.g., a configuration controller) and the devices making up a computing cluster infrastructure. The communication channels are preferably implemented through a pubsub infrastructure as shown in
The configuration controller may have several variations of infrastructure. One preferred variation includes a single configuration controller machine integrated with the plurality of machines. A plurality of configuration controllers may additionally be used. In one variation, the configuration controller is implemented in an active-passive configuration as shown in
Step S130, which includes the configuration controller storing individual machine state for the plurality of machines, functions to store state information for machines of the computing cluster. The configuration controller is preferably a device or platform from which computing cluster orchestration may be carried out. The configuration controller may itself be distributively hosted. Machine state of a machine preferably includes configuration data and software. The machine state may additionally include operational data. The operational data may be external to the machine. The configuration data is preferably similar to file system related data. The software is preferably the code or source code executed by the machine. The operational data is resources such as a database, media resources, persistent data, or any suitable data used in operation. The machine state may alternatively include any suitable combination of the configuration data, software, operational data, and/or other machine related data. The machines preferably publish changes in machine state to the configuration controller. Alternatively, the configuration controller may periodically poll the machines. In yet another alternative, the configuration controller pulls machine state from a CDN. The machine state is preferably stored in a database. The machine state database 124 may be any suitable database or device for storing data such as a mySQL database, JSON, or an XML file. The machine state database preferably stores a record for each machine including the machine state. This information may include internal and/or external IP addresses of the machines, status, role(s), capacity/load, and/or any suitable operation information. As discussed further below, the database may additionally store a security key for each machine to securely identify a machine. Current machine state is preferably stored, and additionally, past machine state may be stored as a version history of the machines. The version history is preferably the machine state from different points in time. These versions may be used in comparing the machine state from different times or from different machines and resolving problems.
Step S140, which includes determining a new machine state from the state of the plurality of machines, functions to calculate a next state for a machine based on overall state of the cluster. A new machine state is preferably calculated based on the current machine state. The new machine state is additionally or alternatively calculated based on the machine state of associated machines of the computing cluster. The associated machines are preferably machines that interact directly or indirectly with the machine. Machines may alternatively be associated based on shared machine state (e.g., having the same role or status). For example, two machines that are configured as indicated in the machine state to be load balancers may be associated with each other. Calculating a new machine state based on the machine state of at least a second machine enables the machines to be updated more intelligently. Additionally, a plurality of new machine states may be calculated for a plurality of machines. A new machine state may be any suitable change to a machine state. The configuration data may be changed. The software may change which may be an update to a new version of software or change in role. The operational data may change, such as changes in a database resource of a machine. In some variations, the new machine state may be a defined as provisioning a new machine to scale the computing cluster, reprovisioning a machine to a new role, restarting a machine, or deprovisioning a machine to scale down.
The calculation of a new machine state is preferably initiated by a change in the computing cluster. In one variation, calculation of a new machine state is due to the change in machine state as a result of operation. For example, if a machine encounters an error, then new machine states are preferably calculated for other machines to accommodate for the down machine. This may include provisioning a new machine with a previous machine state of the down machine, or could alternatively be a redistribution of the machines responsibilities to other machines. This transfer of responsibilities is preferably conveyed through the new machine states. Similarly the calculation of a new machine state may be due to the usage and/or capacity of the machine. Load and capacity may be communicated through the configuration data in the machine state. In another variation, calculation of a new machine state is due to outside initiation. The configuration controller preferably includes an API, which may be used by an outside system or operator. An operator may issue instructions to change elements of the computing cluster. For example, an instruction may be set to scale particular resources up or down, to update software, to change operational data, or perform any suitable orchestration instruction. The calculation of new machine state may alternatively or additionally be calculated using auto-provisioning, self healing and/or any suitable algorithm. A finite state machine may be run to determine the new machine state of a particular machine as shown in
In one variation, the machines of the computing cluster include a plurality master devices each with a dedicated load balancers as shown in
Step S150, which includes updating a machine in the computing cluster with the new machine state, functions to set the machine to the new machine state. The new machine state is preferably communicated to the machine through the established channels of communication. The new machine state is preferably published through a hub and distributed to machines that have the appropriate subscription established in Step S124. Publications may be filtered which functions to direct the new machine state to the appropriate machine(s). As discussed above, a new machine state can preferably be selectively published (or filtered) based on any suitable machine characteristic such as IP address (or ID), status, role, capacity/load and/or any suitable aspect. Once new machine state is received at the machine, the machine may require being restarted to initialize the new machine state. Alternatively, the new machine state may be initialized during run time.
Additionally a method of the preferred embodiment includes the step of receiving a message through an API of the configuration controller S160, which functions to allow outside instructions for management of the computing cluster. The API is preferably a convenient interface for users or systems to access and change the computing cluster system. The API is preferably a RESTful API but may alternatively be any suitable API such as SOAP. Additionally, a user interface may be used as a front end control providing an alternate way for users to interact with the configuration controller through the API. The API is preferably used to alter configuration of a machine or machines. A user and/or an outside system may issue API calls. The API may additionally be used to access information about the computing cluster. The configuration controller, through the communication channels established in S120, preferably has stored and updated information about the machines. Additionally or alternatively the configuration controller may communicate with a machine requesting information. For example, an HTTP GET message using a common HTTP client tools such as curl, piped into an extensible stylesheet language transformation (XSLT) processor, can be used to generate any suitable type of configuration file. The command shown in
2. Method of a Second Embodiment for Managing a Computer Cluster
As shown in
As used in the description of method 200, a service instance preferably runs on a host. A host is preferably a machine that has one or more service instances running on the host machine. A service instance refers to a specific implementation of a service. A service preferably describes a type of module that performs a particular task or tasks within the computing cluster. For a telephony platform, the services of a computing cluster may include call routers, load balancers, call queues, media processors, message routing devices, resource databases, and/or any additional devices. In some variations, a service may be a dependent service. In other words, a first service (i.e., the dependent service) may require at least a second service. The second service may additionally be dependent on other services. The dependencies of services are preferably acyclical. A host may additionally run a load balancer for services that the hosted services depend upon as shown in
Step S250, which includes updating the machine state of at least one service instance, functions to alter operation of a machine in cluster. Updating may include starting a service instance, stopping a service instance, removing a service instance, updating the version of a service instance, or reverting a version of a service, changing type of service, or any other suitable change. The update is preferably accomplished by sending a new machine state to a service instance. The machine state is preferably versioned so that the new machine state may be supplied through a version controlled version of the machine state. The software and configuration data are preferably version controlled while operational data is preferably automatically updated as shown in
One variation of the method includes receiving a specified service update S260. An API or interface may be used for users or system to supply new machine state to the configuration controller. The specified service update preferably includes at least one service to update. The update may additionally include a sub-group parameter to update a sub-group of the instances of the specified service. If sub-group parameter is note included, all instances of the specified service are preferably updated with the new machine state. The sub-group parameter may be used to update a particular instance (e.g., using an instance ID), update a fixed number, update a percentage of service instances, update a type of sub-group (e.g., service instance of a particular version number), update a services based on a combination of conditions (e.g., updating either 33% or 20 instances whichever is greater), or updated according to any suitable way of specifying a sub-group.
The method 200 additionally preferably includes identifying service instances S270, which functions to determine which service instances to alter in Step S250. Service instances may be identified by processing a configuration file. The file is preferably describes the architecture of the plurality of machines. In one example a markup language may be used to describe the configuration as shown in
In another variation, the method includes monitoring the operation status of machines and/or services of the computing cluster. A scaling parameter is preferably set so that services may be scaled automatically when the scaling parameter is satisfied. The scaling parameter may be threshold, a pattern of events, or any suitable parameter to trigger the altering of service and/or host machine state. Thresholds are preferably set for appropriate operation parameters, and when a machine or a service instance reaches the threshold, scaling of a service may be automatically initiated by altering the machine state of appropriate services. A threshold is preferably set for provisioning and for deprovisioning such that the computing cluster can scale up and down. The configuration controller preferably manages this monitoring, but monitoring may alternatively occur on the machine or by any suitable component. In a telecommunication platform, the computing cluster preferably has very unique scaling requirements as compared to other systems. Large spikes may occur at any time. Telecommunication platforms additionally have a plurality of types of input channels. For example, a telecommunication platform preferably supports voice sessions, messaging, (e.g., SMS and/or MMS), video, and any other suitable type of input channel. The types of input channels typically have different service requirements. Service may be monitored and automatically altered according to the type of input channel. Services that are shared between services may additionally be pooled between types of input channels. The type of input channels of a telecommunication platform may include voice, video, messaging (e.g., SMS or MMS), or any suitable type of input channel.
Additionally, the method may be used to orchestrate a computing cluster being used with sustained session. A sustained session is preferably any suitable session that requires sustained use of a service instance for the duration of the session. Some examples of sustained sessions include voice calls and video streams that occur on telecommunications platforms. A service instance handling an operation for a sustained session is preferably kept at a constant state until all sustained sessions can cease use of that service instance. Preferably, the service instances that are dependent on such a service instance are altered appropriately in preparation, and when the sustained session ends, then the service instance is altered.
3. Method of a Third Embodiment for Managing a Computer Cluster
As shown in
Step S310, which includes managing a computer cluster with a plurality of machines of a first machine version in an active configuration, functions to run a computer cluster. The computer cluster is preferably managed in a manner substantially similar to the manner described above. The machines are typically network accessible services. The machines may be stand alone physical machines but may alternatively be a virtual machine, service, process, or any suitable operational component of a computing cluster. A machine is preferably versioned to a particular machine state. The machine version is preferably tracked along with the implications of that version (e.g., software versions, data resources, etc.). Alternatively, machine version may refer to the unique machine configuration. The machine version preferably includes configuration data and software. The machine version may additionally include operational data. In managing a computer cluster, a configuration controller may facilitate management of the plurality of machines. Managing a computer cluster with a plurality of machines preferably includes load balancing the plurality of machines of a first machine version. As shown in
The machines of a first version (hereafter referred to as MV1) are preferably configured for active operation within the computer cluster. In one preferred variation, machines may be configured as active, staged, or inactive. Active configuration preferably describes machines that are operating and being used in production. Typically, being used in production will include impacting state of the machine or a second machine, generating responses, performing a task on behalf of another component, or performing any process required in the operation of the computing cluster. In one variation, an actively configured machine will process data and store a result in a production database. In another variation, an actively configured machine will generate and transmit a response to an entity that made a request to the machine (e.g., a user or application). Thus, operation of an actively configured machine can impact the operational performance of the computing cluster.
A staged configuration preferably describes machines that are operating but integrated into the computer cluster in a controlled and/or limited manner. One technique to integrating the machine into the computer cluster in a limited manner would be to prevent the machine from modifying outside machine state. For example, the machine in a staged configuration may perform a task to update a database, but communication to the database may be ignored or a test database may be used for monitoring the database operations. An alternative technique to integrating the machine into the computer cluster in a limited manner would be to monitor the actions and/or response of the machine. The staged configuration is preferably used for monitoring a machine prior to integrating the machine into an active configuration. A machine in staged configuration will operate on data actively processed by the computer cluster, but while minimizing the risk of the machine impacting the operation of the computer cluster.
An inactive configuration preferably describes machines that are operational but not integrated for use within the computer cluster. A machine in an inactive configuration is preferably booted and ready for integration into the computer cluster. The machine may additionally be put into a sleep mode where the machine can be more quickly activated. An inactive configuration is preferably used for machines that are on standby. A machine in an inactive configuration may be backup machine for machines in an active configuration. For example, if a machine of a second machine version replaces a machine of a first machine version, then the machine of a first version may be kept in an inactive configuration in case the computer cluster needs to quickly revert to the old computer cluster state/configuration. Machines may additionally be set to a deactivated configuration, where the machine is powered down or deprovisioned from the cluster.
Step S320, which includes adding at least one machine of a second version to the computer cluster, functions to add a machine versioned different than the MV1. Typically, the machine of a second version (hereafter referred to as MV2) is an eventual or potential replacement to the MV1. Responsibilities and utility of the MV1 is typically redundant to the responsibilities and utility of MV2. As such, MV2 is preferably an updated machine version of MV2. Alternatively MV2 may be a previous version or completely new version. Adding the at least one MV2 may include incorporating the MV2 into a joint operational configuration of a plurality MV1's. Joint operational configuration describes computer cluster configuration to appropriately distribute work to a plurality of machines. As shown in
Step S330, which includes monitoring the operational status of the machine of a second version, functions to detect issues in computer cluster operation due to the introduction of an MV2. The operational status of MV2 preferably includes errors of the MV2, errors of other machines that attributed directly or indirectly to the MV2, inconsistencies of MV2 behavior, actions by the MV2, performance metrics, and/or any suitable indicators of the performance of MV2. Errors or quality metrics can be gathered through logs and other suitable analytic tools. Actions such as response communications and requests (e.g., database commands) can be simulated and/or compared to expected results (e.g., responses and requests of an MV1). Performance metrics are preferably a measure of how a task was performed by MV2. For example, if MV2 introduces a new algorithm for processing data, the computation time may be monitored. The operational status of the MV2 is preferably compared to the operational status of MV1. The health of the operational status may be measured relative to the MV1. In other words MV2 may be monitored to measure if MV2 has improved, equal, or decreased performance. For example, the errors encountered when MV2 is used may be compared to the errors encountered when MV1 is used.
Monitoring the operational status may additionally include executing a monitored transition strategy on a MV2, which functions to augment the operation of the computer cluster to facilitate monitoring an MV2. A transition strategy preferably impacts the manner in which a MV2 is integrated into the computer cluster. The strategy preferably determines the configuration of a plurality of MV2s and the transition conditions and/or progress from MV1s to MV2s. Preferably, at least one MV2 is initially added in one of a variety of staged configurations.
In a first variation of a staged configuration, the staged configuration is a limited active configuration (i.e., a “canary configuration”), which functions to use the MV2 in a limited capacity to warn of potential problems. Ideally, if there are issues with the MV2 the issues will only impact a small portion of tasks in the computer cluster. For example, if there are 19 MV1's and only 1 MV2 are used to service processing request then roughly 5% of processing requests will have a chance of encountering the issues introduced by the MV2. While in the limited active configuration, the operational status of the MV2 is preferably monitored. Based on the monitored operational status, more or fewer MV2's may be added to the computer cluster. MV2s are preferably incrementally or gradually introduced such that the replacement of the plurality of MV1s is distributed over a sustained period of time. MV1s are preferably incrementally replaced until all or a suitable portion of MV1s have been replaced by MV2s. During that time, monitoring of operational status preferably continues and the operational status may be used to inform the transition. Preferably, a plurality of MV1's is loadbalanced. A new MV2 is preferably introduced for load balancing along with the plurality of MV1's as shown in
In another variation of a staged configuration, the staged configuration is a simulation configuration (i.e., a “shadow configuration”). Machines in a simulation configuration are preferably semi-isolated and are, in a sense, quarantined from impacting operation of other components. When in simulation configuration a machine preferably operates on live data but the machine is prevented from impacting operation of outside machines. In particular, a simulation configuration limits the MV2 from impacting state and/or operation of a machine in an active configuration (e.g., a server or database used replying to an outside request). The live data is additionally sent to an active machine for normal processing. If a related machine was added based on a state calculation, the MV2 and related machine(s) may cooperatively operate in the simulation configuration, but the machines within the simulation configuration are preferably blocked from altering the state of machines not within the simulation configuration. A plurality of different simulations through out the system may occur simultaneously. Preferably, the MV2 is matched with at least one MV1. Incoming communication, data, and/or requests are preferably sent to both the MV1 and the MV2 as shown in
Step S340, which includes transitioning the computer cluster to use the machine of a second version in an active configuration, functions to introduce the MV2 to replace a MV1. The computer cluster can preferably be eventually updated to use only the second machine version (in place of the first machine version) as shown in
A method of a preferred embodiment may additionally or alternatively include reverting the computer cluster from a machine of a second machine version to a machine of a first machine version. Preferably, the MV1 that was replaced as the active component by an MV2 was set to an inactive configuration. The MV1 is thus transitioned out of the inactive configuration into an active configuration. For example, a computer cluster may initially be load balancing a plurality of machines in a second machine version that are handling processing work for the computer cluster (i.e., the MV2's are in an active configuration). A plurality of machines in a first machine version that were recently decommissioned may be kept powered in a standby mode but not handling any work from a load balancer (i.e., the MV1's are in an inactive configuration). If suddenly numerous errors begin to occur that were previously not encountered when the MV1's were in active configuration, the system many automatically revert to the MV1's. Because the MV1's were kept in an inactive configuration they can be quickly reconfigured to replace the MV2's. The MV2's may be set to an inactive configuration or alternatively set to a staging configuration for additional monitoring. If the source of the problem is identified or resolved the MV2's may once again be actively configured.
4. System for Managing a Computer Cluster
As shown in
The computing cluster no of the preferred embodiment functions to provide the base infrastructure a user is wishing to manage. The computing cluster 110 is preferably composed of a plurality of machines 112 or computing resources/machines. The machines may be identical in setup or may alternatively be composed of a variety of systems such as web servers, voice over internet protocol (VoIP) systems, media processors, load balancers, databases, proxy servers, caches, queues, and/or any suitable computing device and/or storage devices. The computing cluster no may be composed of a variety of hardware systems, software platforms, and/or virtual machines. A machine 112 preferably has operation information available to interested parties, preferably access through the configuration controller 120. The operation information preferably includes machine status (e.g., booting, running, shut down, etc.), internal internet protocol (IP) address, external IP, role (e.g., web server, VoIP, load balancer, media processor, etc.), capacity/load, and/or any suitable operation settings or information. A machine 112 preferably manages communication of the operation information and self operation (such as performing roles or changing status). A machine additionally has machine state information. The machine state information preferably includes configuration data, software, and operational data. The configuration data is preferably similar to file system related data. The software is preferably the code or source code executed by the machine. The operational data is resources such as a database, media resources, persistent data, or any suitable data used in operation. The machine state may alternatively include any suitable combination of the configuration data, software, operational data, operational information and/or other machine related data. A machine may alternatively have a parent device that manages, monitors, and communicates operation information of the machine, such as a load balancer in charge of a plurality of resources.
The configuration controller 120 of the preferred embodiment functions to act as an interface to controlling the computing cluster 110. The configuration controller functions to simplify the management and control of a cloud-computing environment. The configuration controller preferably includes an access API 122, a machine state database 124, and a machine communication system 126. The configuration controller additionally includes a state machine engine that generates new machine state of a machine. The inputs to the state machine engine preferably include the old machine state. A plurality of machine states of associated machines may additionally be input into the state machine engine.
The access API 122 preferably functions to act as an interface for interested parties to interact with operation information and change the operation of machines within the computing cluster 110. The access API is preferably a REST API (Representational State Transfer API) as is known in the art, but the access API may alternatively be a SOAP (Simple Object Access Protocol) API or any suitable programmatic communication interface. A REST API preferably follows RESTful practices as is well known in the art. RESTful is understood in this document to describe a Representational State Transfer architecture. RESTful Hypertext Transfer Protocol (HTTP) requests are preferably made to the configuration controller 120. The HTTP requests are preferably stateless, thus each message communicated preferably contains all necessary information for operation of a user command. The configuration controller preferably does not need to remember or store previous communications to be aware of the state. The machines 112, machine state, and related resources are preferably viewed as addressable resources. Consistent with the RESTful conventions, a GET request of a resource may return the current state of a resource, while PUT may update the state, PUT or POST may be used to create a new resource, and DELETE may be used to destroy a resource. The access API 112 can preferably be used by users to access operation information of one or more of the machines in the computing cluster 110. For example, as a REST API a simple HTTP request using the access API 122 can obtain a list of machines, and can preferably filter information on status, role, or any suitable operation information. The operation information is preferably returned in an HTTP response, preferably containing the operation information formatted as xml.
The machine state database 124 preferably functions to store operation information of the machines 112 of the computing cluster 110. The machine state database 124 may be any suitable database or device for storing data such as a mySQL database or an XML file. The machine state database 124 preferably stores a record for each machine 112. The information stored for each machine 112 preferably includes machine state, internal and/or external IP addresses of the machines, status, role(s), capacity/load, and/or any suitable operation information. The database 124 may additionally store a security key 130 for each machine to securely identify a machine 112.
The machine communication system 126 preferably functions to be a communication infrastructure between machines 112 of the computing cluster 110 and the configuration controller 120. The machine communication system 126 is preferably a publishing and subscription service such as pubsub messaging system. As shown in
Additionally, the system of the preferred embodiment preferably includes a secret key 130 shared by a machine 112 and the configuration controller 120. The secret key 130 is preferably a cryptographic code that uniquely verifies communication between the machine 112 and configuration controller 120. The secret key 130 is preferably supplied at boot time of the machine 112 but may alternatively be established at any suitable time. The secret key 130 is preferably included in communications between a machine 112 and the configuration controller 120.
An alternative embodiment preferably implements the above methods in a computer-readable medium storing computer-readable instructions. The instructions are preferably executed by computer-executable components preferably integrated with a distributed, networked computing cluster with a plurality of machines and a configuration controller. The computer-readable medium may be stored on any suitable computer readable media such as RAMs, ROMs, flash memory, EEPROMs, optical devices (CD or DVD), hard drives, floppy drives, or any suitable device. The computer-executable component is preferably a processor but the instructions may alternatively or additionally be executed by any suitable dedicated hardware device.
As a person skilled in the art will recognize from the previous detailed description and from the figures and claims, modifications and changes can be made to the preferred embodiments of the invention without departing from the scope of this invention defined in the following claims.
This application is a continuation in part of U.S. patent application Ser. No. 13/167,562, filed 23 Jun. 2011, titled “SYSTEM AND METHOD FOR MANAGING A COMPUTING CLUSTER”, which claims priority to U.S. Provisional Application No. 61/357,938, filed 23 Jun. 2010, titled “SYSTEM AND METHOD FOR MANAGING A PLURALITY OF HOSTS” which are both incorporated in their entirety by this reference.
| Number | Name | Date | Kind |
|---|---|---|---|
| 5274700 | Gechter et al. | Dec 1993 | A |
| 5526416 | Dezonno et al. | Jun 1996 | A |
| 5581608 | Jreij et al. | Dec 1996 | A |
| 5598457 | Foladare et al. | Jan 1997 | A |
| 5867495 | Elliott et al. | Feb 1999 | A |
| 5934181 | Adamczewski | Aug 1999 | A |
| 6026440 | Shrader et al. | Feb 2000 | A |
| 6094681 | Shaffer et al. | Jul 2000 | A |
| 6138143 | Gigliotti et al. | Oct 2000 | A |
| 6185565 | Meubus et al. | Feb 2001 | B1 |
| 6192123 | Grunsted et al. | Feb 2001 | B1 |
| 6206564 | Adamczewski | Mar 2001 | B1 |
| 6223287 | Douglas et al. | Apr 2001 | B1 |
| 6232979 | Shochet | May 2001 | B1 |
| 6269336 | Ladd et al. | Jul 2001 | B1 |
| 6317137 | Rosasco | Nov 2001 | B1 |
| 6373836 | Deryugin et al. | Apr 2002 | B1 |
| 6425012 | Trovato et al. | Jul 2002 | B1 |
| 6426995 | Kim et al. | Jul 2002 | B1 |
| 6430175 | Echols et al. | Aug 2002 | B1 |
| 6434528 | Sanders | Aug 2002 | B1 |
| 6445694 | Swartz | Sep 2002 | B1 |
| 6445776 | Shank et al. | Sep 2002 | B1 |
| 6459913 | Cloutier | Oct 2002 | B2 |
| 6493558 | Bernhart et al. | Dec 2002 | B1 |
| 6496500 | Nance et al. | Dec 2002 | B2 |
| 6501739 | Cohen | Dec 2002 | B1 |
| 6501832 | Saylor et al. | Dec 2002 | B1 |
| 6507875 | Mellen-Garnett et al. | Jan 2003 | B1 |
| 6577721 | Vainio et al. | Jun 2003 | B1 |
| 6600736 | Ball et al. | Jul 2003 | B1 |
| 6606596 | Zirngibl et al. | Aug 2003 | B1 |
| 6614783 | Sonesh et al. | Sep 2003 | B1 |
| 6625258 | Ram et al. | Sep 2003 | B1 |
| 6625576 | Kochanski et al. | Sep 2003 | B2 |
| 6636504 | Albers et al. | Oct 2003 | B1 |
| 6662231 | Drosset et al. | Dec 2003 | B1 |
| 6704785 | Koo et al. | Mar 2004 | B1 |
| 6707889 | Saylor et al. | Mar 2004 | B1 |
| 6711129 | Bauer et al. | Mar 2004 | B1 |
| 6711249 | Weissman et al. | Mar 2004 | B2 |
| 6738738 | Henton | May 2004 | B2 |
| 6757365 | Bogard | Jun 2004 | B1 |
| 6765997 | Zirngibl et al. | Jul 2004 | B1 |
| 6768788 | Orolin et al. | Jul 2004 | B1 |
| 6778653 | Kallas et al. | Aug 2004 | B1 |
| 6785266 | Swartz | Aug 2004 | B2 |
| 6788768 | Saylor et al. | Sep 2004 | B1 |
| 6792086 | Saylor et al. | Sep 2004 | B1 |
| 6792093 | Barak et al. | Sep 2004 | B2 |
| 6798867 | Zirngibl et al. | Sep 2004 | B1 |
| 6807529 | Johnson et al. | Oct 2004 | B2 |
| 6807574 | Partovi et al. | Oct 2004 | B1 |
| 6819667 | Brusilovsky et al. | Nov 2004 | B1 |
| 6820260 | Flockhart et al. | Nov 2004 | B1 |
| 6829334 | Zirngibl et al. | Dec 2004 | B1 |
| 6834265 | Balasuriya | Dec 2004 | B2 |
| 6836537 | Zirngibl et al. | Dec 2004 | B1 |
| 6842767 | Partovi et al. | Jan 2005 | B1 |
| 6850603 | Eberle et al. | Feb 2005 | B1 |
| 6870830 | Schuster et al. | Mar 2005 | B1 |
| 6873952 | Bailey et al. | Mar 2005 | B1 |
| 6874084 | Dobner et al. | Mar 2005 | B1 |
| 6885737 | Gao et al. | Apr 2005 | B1 |
| 6888929 | Saylor et al. | May 2005 | B1 |
| 6895084 | Saylor et al. | May 2005 | B1 |
| 6898567 | Balasuriya | May 2005 | B2 |
| 6912581 | Johnson et al. | Jun 2005 | B2 |
| 6922411 | Taylor | Jul 2005 | B1 |
| 6931405 | El-Shimi et al. | Aug 2005 | B2 |
| 6937699 | Schuster et al. | Aug 2005 | B1 |
| 6940953 | Eberle et al. | Sep 2005 | B1 |
| 6941268 | Porter et al. | Sep 2005 | B2 |
| 6947417 | Laursen et al. | Sep 2005 | B2 |
| 6947988 | Saleh | Sep 2005 | B1 |
| 6961330 | Cattan et al. | Nov 2005 | B1 |
| 6964012 | Zirngibl et al. | Nov 2005 | B1 |
| 6970915 | Partovi et al. | Nov 2005 | B1 |
| 6977992 | Zirngibl et al. | Dec 2005 | B2 |
| 6985862 | Stroem et al. | Jan 2006 | B2 |
| 6999576 | Sacra | Feb 2006 | B2 |
| 7003464 | Ferrans et al. | Feb 2006 | B2 |
| 7006606 | Cohen et al. | Feb 2006 | B1 |
| 7010586 | Allavarpu et al. | Mar 2006 | B1 |
| 7020685 | Chen et al. | Mar 2006 | B1 |
| 7039165 | Saylor et al. | May 2006 | B1 |
| 7062709 | Cheung | Jun 2006 | B2 |
| 7076037 | Gonen et al. | Jul 2006 | B1 |
| 7076428 | Anastasakos et al. | Jul 2006 | B2 |
| 7089310 | Ellerman et al. | Aug 2006 | B1 |
| 7103003 | Brueckheimer et al. | Sep 2006 | B2 |
| 7103171 | Annadata et al. | Sep 2006 | B1 |
| 7106844 | Holland | Sep 2006 | B1 |
| 7111163 | Haney | Sep 2006 | B1 |
| 7140004 | Kunins et al. | Nov 2006 | B1 |
| 7143039 | Stifelman et al. | Nov 2006 | B1 |
| 7197331 | Anastasakos et al. | Mar 2007 | B2 |
| 7197461 | Eberle et al. | Mar 2007 | B1 |
| 7197462 | Takagi et al. | Mar 2007 | B2 |
| 7197544 | Wang et al. | Mar 2007 | B2 |
| 7225232 | Elberse | May 2007 | B2 |
| 7227849 | Raesaenen | Jun 2007 | B1 |
| 7260208 | Cavalcanti | Aug 2007 | B2 |
| 7266181 | Zirngibl et al. | Sep 2007 | B1 |
| 7269557 | Bailey et al. | Sep 2007 | B1 |
| 7272212 | Eberle et al. | Sep 2007 | B2 |
| 7272564 | Phillips et al. | Sep 2007 | B2 |
| 7277851 | Henton | Oct 2007 | B1 |
| 7283515 | Fowler | Oct 2007 | B2 |
| 7286521 | Jackson et al. | Oct 2007 | B1 |
| 7287248 | Adeeb | Oct 2007 | B1 |
| 7289453 | Riedel et al. | Oct 2007 | B2 |
| 7296739 | Mo et al. | Nov 2007 | B1 |
| 7298732 | Cho | Nov 2007 | B2 |
| 7308085 | Weissman | Dec 2007 | B2 |
| 7308408 | Stifelman et al. | Dec 2007 | B1 |
| 7324633 | Gao et al. | Jan 2008 | B2 |
| 7324942 | Mahowald et al. | Jan 2008 | B1 |
| 7328263 | Sadjadi | Feb 2008 | B1 |
| 7330463 | Bradd et al. | Feb 2008 | B1 |
| 7330890 | Partovi et al. | Feb 2008 | B1 |
| 7340040 | Saylor et al. | Mar 2008 | B1 |
| 7349714 | Lee et al. | Mar 2008 | B2 |
| 7369865 | Gabriel et al. | May 2008 | B2 |
| 7373660 | Guichard et al. | May 2008 | B1 |
| 7376223 | Taylor et al. | May 2008 | B2 |
| 7376586 | Partovi et al. | May 2008 | B1 |
| 7376733 | Connelly et al. | May 2008 | B2 |
| 7376740 | Porter et al. | May 2008 | B1 |
| 7412525 | Cafarella et al. | Aug 2008 | B2 |
| 7418090 | Reding et al. | Aug 2008 | B2 |
| 7428302 | Zirngibl et al. | Sep 2008 | B2 |
| 7440898 | Eberle et al. | Oct 2008 | B1 |
| 7447299 | Partovi et al. | Nov 2008 | B1 |
| 7454459 | Kapoor et al. | Nov 2008 | B1 |
| 7457249 | Baldwin et al. | Nov 2008 | B2 |
| 7457397 | Saylor et al. | Nov 2008 | B1 |
| 7473872 | Takimoto | Jan 2009 | B2 |
| 7486780 | Zirngibl et al. | Feb 2009 | B2 |
| 7496054 | Taylor | Feb 2009 | B2 |
| 7500249 | Kampe et al. | Mar 2009 | B2 |
| 7505951 | Thompson et al. | Mar 2009 | B2 |
| 7519359 | Chiarulli et al. | Apr 2009 | B2 |
| 7522711 | Stein et al. | Apr 2009 | B1 |
| 7536454 | Balasuriya | May 2009 | B2 |
| 7552054 | Stifelman et al. | Jun 2009 | B1 |
| 7571226 | Partovi et al. | Aug 2009 | B1 |
| 7613287 | Stifelman et al. | Nov 2009 | B1 |
| 7614046 | Daniels et al. | Nov 2009 | B2 |
| 7623648 | Oppenheim et al. | Nov 2009 | B1 |
| 7630900 | Strom | Dec 2009 | B1 |
| 7631310 | Henzinger | Dec 2009 | B1 |
| 7644000 | Strom | Jan 2010 | B1 |
| 7657433 | Chang | Feb 2010 | B1 |
| 7657434 | Thompson et al. | Feb 2010 | B2 |
| 7668157 | Weintraub et al. | Feb 2010 | B2 |
| 7672295 | Andhare et al. | Mar 2010 | B1 |
| 7675857 | Chesson | Mar 2010 | B1 |
| 7676221 | Roundtree et al. | Mar 2010 | B2 |
| 7715547 | Ibbotson et al. | May 2010 | B2 |
| 7742499 | Erskine et al. | Jun 2010 | B1 |
| 7779065 | Gupta et al. | Aug 2010 | B2 |
| 7875836 | Imura et al. | Jan 2011 | B2 |
| 7882253 | Pardo-Castellote et al. | Feb 2011 | B2 |
| 7920866 | Bosch et al. | Apr 2011 | B2 |
| 7926099 | Chakravarty et al. | Apr 2011 | B1 |
| 7936867 | Hill et al. | May 2011 | B1 |
| 7962644 | Ezerzer et al. | Jun 2011 | B1 |
| 7979555 | Rothstein et al. | Jul 2011 | B2 |
| 8023425 | Raleigh | Sep 2011 | B2 |
| 8069096 | Ballaro et al. | Nov 2011 | B1 |
| 8081958 | Soderstroem et al. | Dec 2011 | B2 |
| 8103725 | Gupta et al. | Jan 2012 | B2 |
| 8126128 | Hicks, III et al. | Feb 2012 | B1 |
| 8149716 | Ramanathan et al. | Apr 2012 | B2 |
| 8150918 | Edelman et al. | Apr 2012 | B1 |
| 8156213 | Deng et al. | Apr 2012 | B1 |
| 8185619 | Maiocco et al. | May 2012 | B1 |
| 8196133 | Kakumani et al. | Jun 2012 | B2 |
| 8233611 | Zettner | Jul 2012 | B1 |
| 8238533 | Blackwell et al. | Aug 2012 | B2 |
| 8243889 | Taylor et al. | Aug 2012 | B2 |
| 8266327 | Kumar et al. | Sep 2012 | B2 |
| 8295272 | Boni et al. | Oct 2012 | B2 |
| 8306021 | Lawson et al. | Nov 2012 | B2 |
| 8326805 | Arous et al. | Dec 2012 | B1 |
| 8346630 | McKeown | Jan 2013 | B1 |
| 8355394 | Taylor et al. | Jan 2013 | B2 |
| 8417817 | Jacobs | Apr 2013 | B1 |
| 8429827 | Wetzel | Apr 2013 | B1 |
| 8438315 | Tao et al. | May 2013 | B1 |
| 8462670 | Chien et al. | Jun 2013 | B2 |
| 8467502 | Sureka et al. | Jun 2013 | B2 |
| 8503639 | Reding et al. | Aug 2013 | B2 |
| 8503650 | Reding et al. | Aug 2013 | B2 |
| 8509068 | Begall et al. | Aug 2013 | B2 |
| 8532686 | Schmidt et al. | Sep 2013 | B2 |
| 8542805 | Agranovsky et al. | Sep 2013 | B2 |
| 8582450 | Robesky | Nov 2013 | B1 |
| 8594626 | Woodson et al. | Nov 2013 | B1 |
| 8601136 | Fahlgren et al. | Dec 2013 | B1 |
| 8611338 | Lawson et al. | Dec 2013 | B2 |
| 8613102 | Nath | Dec 2013 | B2 |
| 8649268 | Lawson et al. | Feb 2014 | B2 |
| 8667056 | Proulx et al. | Mar 2014 | B1 |
| 8675493 | Buddhikot et al. | Mar 2014 | B2 |
| 8755376 | Lawson et al. | Jun 2014 | B2 |
| 8767925 | Sureka et al. | Jul 2014 | B2 |
| 8806024 | Francis et al. | Aug 2014 | B1 |
| 8837465 | Lawson et al. | Sep 2014 | B2 |
| 8838707 | Lawson et al. | Sep 2014 | B2 |
| 8861510 | Fritz | Oct 2014 | B1 |
| 8948356 | Nowack et al. | Feb 2015 | B2 |
| 8964726 | Lawson et al. | Feb 2015 | B2 |
| 9014664 | Kim et al. | Apr 2015 | B2 |
| 9015702 | Bhat | Apr 2015 | B2 |
| 20010038624 | Greenberg et al. | Nov 2001 | A1 |
| 20010043684 | Guedalia et al. | Nov 2001 | A1 |
| 20010051996 | Cooper et al. | Dec 2001 | A1 |
| 20020006124 | Jimenez et al. | Jan 2002 | A1 |
| 20020006125 | Josse et al. | Jan 2002 | A1 |
| 20020006193 | Rodenbusch et al. | Jan 2002 | A1 |
| 20020064267 | Martin et al. | May 2002 | A1 |
| 20020067823 | Walker et al. | Jun 2002 | A1 |
| 20020077833 | Arons et al. | Jun 2002 | A1 |
| 20020126813 | Partovi et al. | Sep 2002 | A1 |
| 20020136391 | Armstrong | Sep 2002 | A1 |
| 20020165957 | Devoe et al. | Nov 2002 | A1 |
| 20020176378 | Hamilton et al. | Nov 2002 | A1 |
| 20020198941 | Gavrilescu et al. | Dec 2002 | A1 |
| 20030006137 | Wei et al. | Jan 2003 | A1 |
| 20030014665 | Anderson et al. | Jan 2003 | A1 |
| 20030018830 | Chen et al. | Jan 2003 | A1 |
| 20030023672 | Vaysman | Jan 2003 | A1 |
| 20030026426 | Wright et al. | Feb 2003 | A1 |
| 20030046366 | Pardikar et al. | Mar 2003 | A1 |
| 20030051037 | Sundaram et al. | Mar 2003 | A1 |
| 20030058884 | Kallner et al. | Mar 2003 | A1 |
| 20030059020 | Meyerson et al. | Mar 2003 | A1 |
| 20030060188 | Gidron et al. | Mar 2003 | A1 |
| 20030061317 | Brown et al. | Mar 2003 | A1 |
| 20030061404 | Atwal et al. | Mar 2003 | A1 |
| 20030088421 | Maes et al. | May 2003 | A1 |
| 20030097447 | Johnston | May 2003 | A1 |
| 20030103620 | Brown et al. | Jun 2003 | A1 |
| 20030123640 | Roelle et al. | Jul 2003 | A1 |
| 20030195990 | Greenblat | Oct 2003 | A1 |
| 20030196076 | Zabarski et al. | Oct 2003 | A1 |
| 20030211842 | Kempf et al. | Nov 2003 | A1 |
| 20030229890 | Lau et al. | Dec 2003 | A1 |
| 20030231647 | Petrovykh | Dec 2003 | A1 |
| 20040008635 | Nelson et al. | Jan 2004 | A1 |
| 20040011690 | Marfino et al. | Jan 2004 | A1 |
| 20040044953 | Watkins et al. | Mar 2004 | A1 |
| 20040052349 | Creamer et al. | Mar 2004 | A1 |
| 20040060044 | Das et al. | Mar 2004 | A1 |
| 20040071275 | Bowater et al. | Apr 2004 | A1 |
| 20040101122 | Da Palma et al. | May 2004 | A1 |
| 20040102182 | Reith et al. | May 2004 | A1 |
| 20040165569 | Sweatman et al. | Aug 2004 | A1 |
| 20040172482 | Weissman et al. | Sep 2004 | A1 |
| 20040205689 | Ellens et al. | Oct 2004 | A1 |
| 20040213400 | Golitsin et al. | Oct 2004 | A1 |
| 20040218748 | Fisher | Nov 2004 | A1 |
| 20040228469 | Andrews et al. | Nov 2004 | A1 |
| 20040240649 | Goel | Dec 2004 | A1 |
| 20050005200 | Matena et al. | Jan 2005 | A1 |
| 20050010483 | Ling | Jan 2005 | A1 |
| 20050021626 | Prajapat et al. | Jan 2005 | A1 |
| 20050025303 | Hostetler | Feb 2005 | A1 |
| 20050038772 | Colrain | Feb 2005 | A1 |
| 20050043952 | Sharma et al. | Feb 2005 | A1 |
| 20050047579 | Salame | Mar 2005 | A1 |
| 20050060411 | Coulombe et al. | Mar 2005 | A1 |
| 20050091572 | Gavrilescu et al. | Apr 2005 | A1 |
| 20050125251 | Berger et al. | Jun 2005 | A1 |
| 20050128961 | Miloslavsky et al. | Jun 2005 | A1 |
| 20050135578 | Ress et al. | Jun 2005 | A1 |
| 20050141500 | Bhandari et al. | Jun 2005 | A1 |
| 20050147088 | Bao et al. | Jul 2005 | A1 |
| 20050177635 | Schmidt et al. | Aug 2005 | A1 |
| 20050181835 | Lau et al. | Aug 2005 | A1 |
| 20050228680 | Malik | Oct 2005 | A1 |
| 20050238153 | Chevalier | Oct 2005 | A1 |
| 20050240659 | Taylor | Oct 2005 | A1 |
| 20050243977 | Creamer et al. | Nov 2005 | A1 |
| 20050246176 | Creamer et al. | Nov 2005 | A1 |
| 20050262494 | Fung et al. | Nov 2005 | A1 |
| 20050289222 | Sahim | Dec 2005 | A1 |
| 20060008073 | Yoshizawa et al. | Jan 2006 | A1 |
| 20060015467 | Morken et al. | Jan 2006 | A1 |
| 20060047666 | Bedi et al. | Mar 2006 | A1 |
| 20060067506 | Flockhart et al. | Mar 2006 | A1 |
| 20060129638 | Deakin | Jun 2006 | A1 |
| 20060143007 | Koh et al. | Jun 2006 | A1 |
| 20060168334 | Potti et al. | Jul 2006 | A1 |
| 20060184930 | Fuente et al. | Aug 2006 | A1 |
| 20060203979 | Jennings | Sep 2006 | A1 |
| 20060209695 | Archer et al. | Sep 2006 | A1 |
| 20060212865 | Vincent et al. | Sep 2006 | A1 |
| 20060215824 | Mitby et al. | Sep 2006 | A1 |
| 20060217823 | Hussey | Sep 2006 | A1 |
| 20060217978 | Mitby et al. | Sep 2006 | A1 |
| 20060222166 | Ramakrishna et al. | Oct 2006 | A1 |
| 20060256816 | Yarlagadda et al. | Nov 2006 | A1 |
| 20060262915 | Marascio et al. | Nov 2006 | A1 |
| 20060270386 | Yu et al. | Nov 2006 | A1 |
| 20060285489 | Francisco et al. | Dec 2006 | A1 |
| 20070002744 | Mewhinney et al. | Jan 2007 | A1 |
| 20070006217 | Tammana | Jan 2007 | A1 |
| 20070011328 | Srinivasan | Jan 2007 | A1 |
| 20070036143 | Alt et al. | Feb 2007 | A1 |
| 20070050306 | McQueen | Mar 2007 | A1 |
| 20070070906 | Thakur | Mar 2007 | A1 |
| 20070070980 | Phelps et al. | Mar 2007 | A1 |
| 20070071223 | Lee et al. | Mar 2007 | A1 |
| 20070074174 | Thornton | Mar 2007 | A1 |
| 20070121651 | Casey et al. | May 2007 | A1 |
| 20070127691 | Lert | Jun 2007 | A1 |
| 20070127703 | Siminoff | Jun 2007 | A1 |
| 20070130260 | Weintraub et al. | Jun 2007 | A1 |
| 20070133771 | Stifelman et al. | Jun 2007 | A1 |
| 20070149166 | Turcotte et al. | Jun 2007 | A1 |
| 20070153711 | Dykas et al. | Jul 2007 | A1 |
| 20070167170 | Fitchett et al. | Jul 2007 | A1 |
| 20070192629 | Saito | Aug 2007 | A1 |
| 20070208862 | Fox et al. | Sep 2007 | A1 |
| 20070232284 | Mason et al. | Oct 2007 | A1 |
| 20070242626 | Altberg et al. | Oct 2007 | A1 |
| 20070265073 | Novi et al. | Nov 2007 | A1 |
| 20070286180 | Marquette et al. | Dec 2007 | A1 |
| 20070291905 | Halliday et al. | Dec 2007 | A1 |
| 20070293200 | Roundtree et al. | Dec 2007 | A1 |
| 20070295803 | Levine et al. | Dec 2007 | A1 |
| 20080005275 | Overton et al. | Jan 2008 | A1 |
| 20080025320 | Bangalore et al. | Jan 2008 | A1 |
| 20080037715 | Prozeniuk et al. | Feb 2008 | A1 |
| 20080037746 | Dufrene et al. | Feb 2008 | A1 |
| 20080040484 | Yardley | Feb 2008 | A1 |
| 20080052395 | Wright et al. | Feb 2008 | A1 |
| 20080091843 | Kulkarni | Apr 2008 | A1 |
| 20080101571 | Harlow et al. | May 2008 | A1 |
| 20080104348 | Kabzinski et al. | May 2008 | A1 |
| 20080134049 | Gupta et al. | Jun 2008 | A1 |
| 20080139166 | Agarwal et al. | Jun 2008 | A1 |
| 20080146268 | Gandhi et al. | Jun 2008 | A1 |
| 20080152101 | Griggs | Jun 2008 | A1 |
| 20080154601 | Stifelman et al. | Jun 2008 | A1 |
| 20080155029 | Helbling et al. | Jun 2008 | A1 |
| 20080162482 | Ahern et al. | Jul 2008 | A1 |
| 20080165708 | Moore et al. | Jul 2008 | A1 |
| 20080177883 | Hanai et al. | Jul 2008 | A1 |
| 20080201426 | Darcie | Aug 2008 | A1 |
| 20080209050 | Li | Aug 2008 | A1 |
| 20080222656 | Lyman | Sep 2008 | A1 |
| 20080229421 | Hudis et al. | Sep 2008 | A1 |
| 20080232574 | Baluja et al. | Sep 2008 | A1 |
| 20080235230 | Maes | Sep 2008 | A1 |
| 20080256224 | Kaji et al. | Oct 2008 | A1 |
| 20080275741 | Loeffen | Nov 2008 | A1 |
| 20080310599 | Purnadi et al. | Dec 2008 | A1 |
| 20080313318 | Vermeulen et al. | Dec 2008 | A1 |
| 20080316931 | Qiu et al. | Dec 2008 | A1 |
| 20080317222 | Griggs et al. | Dec 2008 | A1 |
| 20080317232 | Couse et al. | Dec 2008 | A1 |
| 20080317233 | Rey et al. | Dec 2008 | A1 |
| 20090046838 | Andreasson | Feb 2009 | A1 |
| 20090052437 | Taylor et al. | Feb 2009 | A1 |
| 20090052641 | Taylor et al. | Feb 2009 | A1 |
| 20090059894 | Jackson et al. | Mar 2009 | A1 |
| 20090063502 | Coimbatore et al. | Mar 2009 | A1 |
| 20090074159 | Goldfarb et al. | Mar 2009 | A1 |
| 20090075684 | Cheng et al. | Mar 2009 | A1 |
| 20090083155 | Tudor et al. | Mar 2009 | A1 |
| 20090089165 | Sweeney | Apr 2009 | A1 |
| 20090089352 | Davis et al. | Apr 2009 | A1 |
| 20090089699 | Saha et al. | Apr 2009 | A1 |
| 20090093250 | Jackson et al. | Apr 2009 | A1 |
| 20090113034 | Krishnappa et al. | Apr 2009 | A1 |
| 20090125608 | Werth et al. | May 2009 | A1 |
| 20090129573 | Gavan et al. | May 2009 | A1 |
| 20090136011 | Goel | May 2009 | A1 |
| 20090170496 | Bourque | Jul 2009 | A1 |
| 20090171659 | Pearce et al. | Jul 2009 | A1 |
| 20090171669 | Engelsma et al. | Jul 2009 | A1 |
| 20090171752 | Galvin et al. | Jul 2009 | A1 |
| 20090182896 | Patterson et al. | Jul 2009 | A1 |
| 20090217293 | Wolber et al. | Aug 2009 | A1 |
| 20090220057 | Waters | Sep 2009 | A1 |
| 20090221310 | Chen et al. | Sep 2009 | A1 |
| 20090222341 | Belwadi et al. | Sep 2009 | A1 |
| 20090225748 | Taylor | Sep 2009 | A1 |
| 20090225763 | Forsberg et al. | Sep 2009 | A1 |
| 20090232289 | Drucker et al. | Sep 2009 | A1 |
| 20090234965 | Viveganandhan et al. | Sep 2009 | A1 |
| 20090235349 | Lai et al. | Sep 2009 | A1 |
| 20090252159 | Lawson et al. | Oct 2009 | A1 |
| 20090276771 | Nickolov et al. | Nov 2009 | A1 |
| 20090287800 | Chi et al. | Nov 2009 | A1 |
| 20090288012 | Hertel et al. | Nov 2009 | A1 |
| 20090288165 | Qiu et al. | Nov 2009 | A1 |
| 20090300194 | Ogasawara | Dec 2009 | A1 |
| 20090307650 | Saraf et al. | Dec 2009 | A1 |
| 20090316687 | Kruppa | Dec 2009 | A1 |
| 20090318112 | Vasten | Dec 2009 | A1 |
| 20100037204 | Lin et al. | Feb 2010 | A1 |
| 20100070424 | Monk | Mar 2010 | A1 |
| 20100082513 | Liu | Apr 2010 | A1 |
| 20100087215 | Gu et al. | Apr 2010 | A1 |
| 20100088187 | Courtney et al. | Apr 2010 | A1 |
| 20100088698 | Krishnamurthy | Apr 2010 | A1 |
| 20100115041 | Hawkins et al. | May 2010 | A1 |
| 20100142516 | Lawson et al. | Jun 2010 | A1 |
| 20100150139 | Lawson et al. | Jun 2010 | A1 |
| 20100153578 | Van Gassel et al. | Jun 2010 | A1 |
| 20100167689 | Sepehri-Nik et al. | Jul 2010 | A1 |
| 20100188979 | Thubert et al. | Jul 2010 | A1 |
| 20100191915 | Spencer | Jul 2010 | A1 |
| 20100208881 | Kawamura | Aug 2010 | A1 |
| 20100217837 | Ansari et al. | Aug 2010 | A1 |
| 20100217982 | Brown et al. | Aug 2010 | A1 |
| 20100232594 | Lawson et al. | Sep 2010 | A1 |
| 20100235539 | Carter et al. | Sep 2010 | A1 |
| 20100251329 | Wei | Sep 2010 | A1 |
| 20100251340 | Martin et al. | Sep 2010 | A1 |
| 20100257513 | Thirumalai et al. | Oct 2010 | A1 |
| 20100281108 | Cohen | Nov 2010 | A1 |
| 20100291910 | Sanding et al. | Nov 2010 | A1 |
| 20110029882 | Jaisinghani | Feb 2011 | A1 |
| 20110029981 | Jaisinghani | Feb 2011 | A1 |
| 20110053555 | Cai et al. | Mar 2011 | A1 |
| 20110072423 | Fukata | Mar 2011 | A1 |
| 20110078278 | Cui et al. | Mar 2011 | A1 |
| 20110081008 | Lawson et al. | Apr 2011 | A1 |
| 20110083179 | Lawson et al. | Apr 2011 | A1 |
| 20110093516 | Geng et al. | Apr 2011 | A1 |
| 20110096673 | Stevenson et al. | Apr 2011 | A1 |
| 20110110366 | Moore et al. | May 2011 | A1 |
| 20110131293 | Mori | Jun 2011 | A1 |
| 20110167172 | Roach et al. | Jul 2011 | A1 |
| 20110170505 | Rajasekar et al. | Jul 2011 | A1 |
| 20110176537 | Lawson et al. | Jul 2011 | A1 |
| 20110211679 | Mezhibovsky et al. | Sep 2011 | A1 |
| 20110251921 | Kassaei et al. | Oct 2011 | A1 |
| 20110253693 | Lyons et al. | Oct 2011 | A1 |
| 20110255675 | Jasper et al. | Oct 2011 | A1 |
| 20110265168 | Lucovsky et al. | Oct 2011 | A1 |
| 20110265172 | Sharma et al. | Oct 2011 | A1 |
| 20110267985 | Wilkinson et al. | Nov 2011 | A1 |
| 20110274111 | Narasappa et al. | Nov 2011 | A1 |
| 20110276892 | Jensen-Horne et al. | Nov 2011 | A1 |
| 20110276951 | Jain | Nov 2011 | A1 |
| 20110280390 | Lawson et al. | Nov 2011 | A1 |
| 20110283259 | Lawson et al. | Nov 2011 | A1 |
| 20110289126 | Aikas et al. | Nov 2011 | A1 |
| 20110299672 | Chiu et al. | Dec 2011 | A1 |
| 20110310902 | Xu | Dec 2011 | A1 |
| 20110320449 | Gudlavenkatasiva | Dec 2011 | A1 |
| 20110320550 | Lawson et al. | Dec 2011 | A1 |
| 20120000903 | Baarman et al. | Jan 2012 | A1 |
| 20120011274 | Moreman | Jan 2012 | A1 |
| 20120017222 | May | Jan 2012 | A1 |
| 20120023544 | Li et al. | Jan 2012 | A1 |
| 20120028602 | Lisi et al. | Feb 2012 | A1 |
| 20120036574 | Heithcock et al. | Feb 2012 | A1 |
| 20120039202 | Song | Feb 2012 | A1 |
| 20120059709 | Lieberman et al. | Mar 2012 | A1 |
| 20120079066 | Li et al. | Mar 2012 | A1 |
| 20120083266 | Vanswol et al. | Apr 2012 | A1 |
| 20120089572 | Raichstein et al. | Apr 2012 | A1 |
| 20120094637 | Jeyaseelan et al. | Apr 2012 | A1 |
| 20120110564 | Ran et al. | May 2012 | A1 |
| 20120114112 | Rauschenberger et al. | May 2012 | A1 |
| 20120149404 | Beattie et al. | Jun 2012 | A1 |
| 20120170726 | Schwartz | Jul 2012 | A1 |
| 20120173610 | Bleau et al. | Jul 2012 | A1 |
| 20120174095 | Natchadalingam et al. | Jul 2012 | A1 |
| 20120179907 | Byrd et al. | Jul 2012 | A1 |
| 20120180021 | Byrd et al. | Jul 2012 | A1 |
| 20120180029 | Hill et al. | Jul 2012 | A1 |
| 20120198004 | Watte | Aug 2012 | A1 |
| 20120201238 | Lawson et al. | Aug 2012 | A1 |
| 20120208495 | Lawson et al. | Aug 2012 | A1 |
| 20120226579 | Ha et al. | Sep 2012 | A1 |
| 20120239757 | Firstenberg et al. | Sep 2012 | A1 |
| 20120254828 | Aiylam et al. | Oct 2012 | A1 |
| 20120281536 | Gell et al. | Nov 2012 | A1 |
| 20120288082 | Segall | Nov 2012 | A1 |
| 20120290706 | Lin et al. | Nov 2012 | A1 |
| 20120304245 | Lawson et al. | Nov 2012 | A1 |
| 20120304275 | Ji et al. | Nov 2012 | A1 |
| 20120316809 | Egolf et al. | Dec 2012 | A1 |
| 20120321070 | Smith et al. | Dec 2012 | A1 |
| 20130029629 | Lindholm et al. | Jan 2013 | A1 |
| 20130031158 | Salsburg | Jan 2013 | A1 |
| 20130047232 | Tuchman et al. | Feb 2013 | A1 |
| 20130054684 | Brazier et al. | Feb 2013 | A1 |
| 20130058262 | Parreira | Mar 2013 | A1 |
| 20130067448 | Sannidhanam et al. | Mar 2013 | A1 |
| 20130097298 | Ting et al. | Apr 2013 | A1 |
| 20130156024 | Burg | Jun 2013 | A1 |
| 20130179942 | Caplis et al. | Jul 2013 | A1 |
| 20130201909 | Bosch et al. | Aug 2013 | A1 |
| 20130204786 | Mattes et al. | Aug 2013 | A1 |
| 20130212603 | Cooke et al. | Aug 2013 | A1 |
| 20130244632 | Spence et al. | Sep 2013 | A1 |
| 20140064467 | Lawson et al. | Mar 2014 | A1 |
| 20140105372 | Nowack et al. | Apr 2014 | A1 |
| 20140106704 | Cooke et al. | Apr 2014 | A1 |
| 20140123187 | Reisman | May 2014 | A1 |
| 20140129363 | Lorah et al. | May 2014 | A1 |
| 20140153565 | Lawson et al. | Jun 2014 | A1 |
| 20140185490 | Holm et al. | Jul 2014 | A1 |
| 20140254600 | Shibata et al. | Sep 2014 | A1 |
| 20140274086 | Boerjesson et al. | Sep 2014 | A1 |
| 20140282473 | Saraf et al. | Sep 2014 | A1 |
| 20140355600 | Lawson et al. | Dec 2014 | A1 |
| 20140379670 | Kuhr | Dec 2014 | A1 |
| 20150004932 | Kim et al. | Jan 2015 | A1 |
| 20150004933 | Kim et al. | Jan 2015 | A1 |
| 20150023251 | Giakoumelis et al. | Jan 2015 | A1 |
| 20150066865 | Yara et al. | Mar 2015 | A1 |
| 20150181631 | Lee et al. | Jun 2015 | A1 |
| Number | Date | Country |
|---|---|---|
| 1684587 | Mar 1971 | DE |
| 0282126 | Sep 1988 | EP |
| 1464418 | Oct 2004 | EP |
| 1522922 | Apr 2005 | EP |
| 1770586 | Apr 2007 | EP |
| 2134107 | Sep 1999 | ES |
| 10294788 | Apr 1998 | JP |
| 2004166000 | Jun 2004 | JP |
| 2004220118 | Aug 2004 | JP |
| 2006319914 | Nov 2006 | JP |
| 9732448 | Sep 1997 | WO |
| 02087804 | Nov 2002 | WO |
| 2006037492 | Apr 2006 | WO |
| 2009018489 | Feb 2009 | WO |
| 2009124223 | Oct 2009 | WO |
| 2010037064 | Apr 2010 | WO |
| 2010040010 | Apr 2010 | WO |
| 2010101935 | Sep 2010 | WO |
| 2011091085 | Jul 2011 | WO |
| Entry |
|---|
| RFC 3986: Uniform Resource Identifier (URI): Generic Syntax; T. Berners-Lee, R. Fielding, L. Masinter; Jan. 2005; The Internet Society. |
| Complaint for Patent Infringement, Telinit Technologies, LLC v. Twilio Inc., dated Oct. 12, 2012. |
| NPL, “API Monetization Platform”, 2013. |
| Kim et al. “In-service Feedback QoE Framework” 2010 Third International Conference on Communication Theory. Reliability and Quality of Service. pp. 135-138. 2010. |
| Matos et al. “Quality of Experience-based Routing in Multi-Service Wireless Mesh Networks” Realizing Advanced Video Optimized Wireless Networks. IEEE. pp. 7060-7065. 2012. |
| Tran et al. “User to User adaptive routing based on QoE” ICNS 2011: The Seventh International Conference on Networking and Services. pp. 170-177. 2011. |
| Wu et al. “Quality Evaluation in Peer-to-Peer IPTV Services” Data Traffic and Monitoring Analysis, LNCS 7754. pp. 302-319. 2013. |
| Number | Date | Country | |
|---|---|---|---|
| 20130132553 A1 | May 2013 | US |
| Number | Date | Country | |
|---|---|---|---|
| 61357938 | Jun 2010 | US |
| Number | Date | Country | |
|---|---|---|---|
| Parent | 13167562 | Jun 2011 | US |
| Child | 13743660 | US |