Abstract:
The monitoring by a monitoring node of a process performed by a monitored node is often devised as a tightly coupled interaction, but such coupling may reduce the re-use of monitoring resources and processes and increase the administrative complexity of the monitoring scenario. Instead, fault detection and recovery may be designed as a non-proprietary service, wherein a set of monitored nodes, together performing a set of processes, may register for monitoring by a set of monitoring nodes. In the event of a failure of a process, or of an entire monitored node, the monitoring nodes may collaborate to initiate a restart of the processes on the same or a substitute monitored node (possibly in the state last reported by the respective processes). Additionally, failure of a monitoring node may be detected, and all monitored nodes assigned to the failed monitoring node may be reassigned to a substitute monitoring node.

Description:
BACKGROUND 
     Within the field of computing, many scenarios involve a detection of a fault in a computer system, such as an interference with a process; an unavailability of a resource utilized by the process, such as an exhaustion of free memory or a resource that is exclusively locked by another process; an inability of a process to complete a task; a logical fault in a process that leads to a consumption of resources, an unending loop, or an application crash; or a failure of the hardware of a device that interrupts the execution of processes. Such faults may range in severity from curiosities to inconveniences to severe problems (e.g., failures in realtime processes or processes upon which users depend for uptime). In these and other scenarios, an administrator may endeavor to monitor the process, such as utilizing a monitoring process operating on the same device or another device to monitor the instrumentation of a monitored process, verify that the monitored process continues to operate as anticipated, provides acceptable performance, and is accessible to users. If the monitored process shows indications of failure or becomes unreachable, the monitoring process may register the indications in a log, or may notify an administrator. 
     SUMMARY 
     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. 
     The interface of monitoring processes and monitored processes is often highly specialized and proprietary. For example, a process to be monitored may report a specialized set of metrics indicating its status, and/or may report such metrics in specialized ways, such as a particular type of log or event model or a particular location. The monitoring process may also be specially designed to couple with the monitored process (e.g., to evaluate the log, subscribe to the events, and/or query the monitored process). The monitoring process and monitored process may together represent a tightly coupled pair of interoperating processes. However, the specialization of the monitoring process and the monitored process may be inefficient in some respects. As a first example, each monitored process may have a corresponding monitoring process, and the monitoring of many monitored processes may involve the deployment of many monitoring processes that each monitors one process. This coupling may reduce the re-use of monitoring equipment (e.g., it may be difficult to configure a group of machines to monitor a group of processes). As a second example, it may be uncommon to establish monitoring of a first process that is monitoring a second process (on the same machine or another machine). As a third example, each instance of monitoring may differ in insignificant or significant ways (e.g., the manner of notifying an administrator of failure indicators, the types of failure indicators used by different processes, and the location, format, and semantic use of a log file), leading to increased complexity in the administration of the systems. 
     Presented herein are techniques for implementing fault monitoring as a standardized service. In accordance with these techniques, a set of one or more monitoring nodes may be provided that are configured to perform the monitoring of various monitored nodes performing one or more processes to be monitored. One or more monitored nodes may register for monitoring with a monitoring node, and may initiate a periodic reporting of the statuses of the processes, possibly including the states of the processes (e.g., not just whether a process is running, but the internal state of the process). The monitoring nodes may record this information, and may take an action upon receiving an indication that a process or a monitored node is encountering difficulty or has stopped reporting. For example, the monitoring node may request a restart of a process that is no longer reporting, including restarting the process at the state last reported by the monitored node, and also may request a restart of the process on a different monitored node. If a monitored node entirely stops responding, the monitoring node may choose a substitute monitored node, and may request a restart of all such processes (possibly in the last reported states) on the substitute monitored node. 
     Moreover, in scenarios involving a set of two or more monitoring nodes, the monitoring nodes may also monitor each other. For example, monitored nodes may be assigned to report to a particular monitoring node. Moreover, the monitoring nodes may periodically synchronize the monitoring information thereamong (e.g., each monitoring node may inform the other monitoring nodes of the monitored nodes assigned thereto, the monitored processes executed thereupon, and the status and/possibly state of each such monitored process). If a monitoring node fails (e.g., stops reporting to the other monitoring nodes), the other monitoring nodes may choose a substitute monitoring node, to which all of the monitored node of the failed monitoring node may be reassigned. 
     The implementation of fault detection and fault recovery in accordance with these techniques may present some advantages. As a first example, these techniques may enable fault tolerance to be offered as a non-specialized, non-proprietary, subscription-based service, wherein a set of monitoring nodes may collaborate to monitor any participating process on a set of monitored nodes, irrespective of the type of process that is monitored or the role of the monitored node. As a second example, these techniques may promote efficient use of monitoring resources; for example, a single set of monitoring nodes, executing a small number of monitoring processes, may be configured monitor a large and diverse set of monitored nodes and monitored processes. As a third example, these techniques enable a monitoring node to assume the role of a failed monitoring node (e.g., by adopting the monitored nodes formerly assigned to the failed monitoring node), and a monitored node to assume the role of a failed monitored node (e.g., by restarting the processes performed by the monitored node at the moment of failure). This redundancy and fungibility of nodes may promote high availability by recovering from failures while reducing interruption of the monitored processes and/or monitoring service. As a fourth example, these techniques may promote the scalability of the monitoring service; e.g., monitored nodes and processes may easily register for monitoring, and monitoring capacity may be expanded simply by adding more monitoring nodes. These and other advantages may be achieved through the implementation of monitoring scenarios according to the techniques presented herein. 
     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. 
    
    
     
       DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is an illustration of an exemplary scenario featuring a monitoring of a process performed by a monitored node by a monitoring node. 
         FIG. 2  is an illustration of an exemplary scenario featuring a set of monitoring nodes configured to monitor one or more processes performed by a set of monitored nodes in accordance with the techniques presented herein. 
         FIG. 3  is a flow chart illustrating an exemplary method of configuring a monitoring node to monitor one or more processes on one or more monitored nodes. 
         FIG. 4  is a flow chart illustrating an exemplary method of configuring a monitored node to participate in monitoring by one or more monitored nodes. 
         FIG. 5  is an illustration of an exemplary computer-readable medium comprising processor-executable instructions configured to embody one or more of the provisions set forth herein. 
         FIG. 6  is an illustration of an exemplary scenario featuring a monitoring node configured to monitor the states of processes of monitored nodes, and to handle a failure of a process or a monitored node. 
         FIG. 7  is an illustration of an exemplary scenario featuring a monitoring node configured to perform a logic upon detecting that respective processes performed by a monitored node have entered a particular state. 
         FIG. 8  is an illustration of an exemplary scenario featuring a set of monitoring nodes configured to monitor each other and to handle the failure of a monitoring node. 
         FIG. 9  illustrates an exemplary computing environment wherein one or more of the provisions set forth herein may be implemented. 
     
    
    
     DETAILED DESCRIPTION 
     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 monitoring of one or more processes performed by one or more nodes (e.g., various types of devices and computers, and/or simulated operating environments operating thereupon) that are to be monitored in the event of a failure. A process may fail for various reasons (e.g., an interference with a process; an unavailability of a resource utilized by the process, such as an exhaustion of free memory or a resource that is exclusively locked by another process; a failure of a process to complete a task; a logical fault in a process that leads to a consumption of resources, an unending loop, or an application crash). Additionally, an entire node may experience software or hardware failures (e.g., an overheating of the processor, a cessation of power or network access, a hard disk failure, or a crashed operating system). The consequences of such failures may cover a range of severity, such as a curiosity, an inconvenience or frustration, and a severe problem (e.g., a realtime process may execute within a scenario having strict timing parameters, such as a process operating the motions of a robot on an assembly line or a process may be utilized by a large number of other processes, such as a database server that provides data stored in a database to a range of data-driven applications, or a webserver that concurrently receives and generates web pages in response to a large number of requests received from many users). 
     Within such scenarios, it may be desirable to configure a computer or device executing a process for monitoring by another computer or device. For example, a monitored node executing a particular process may be monitored by a monitoring node, which may periodically detect metrics or receive reports that indicate the status of the monitored node and/or process, such as whether the process and node remain operational and are performing in an acceptable manner. Upon detecting an emerging, imminent, or existing problem, such as a failure of the process or the monitored node, the monitoring node may perform various actions, such as logging the detected information or notifying an administrator for further action. 
     The monitoring of a process of a monitored node by a monitoring node may be implemented in various ways.  FIG. 1  presents an illustration of an exemplary scenario  10  featuring two exemplary techniques for configuring a monitored node  14  and a monitoring node  18  to interoperate to achieve the monitoring of a process  16  performed by the monitoring node  14 . In this exemplary scenario  10 , a first monitored node  14  performs a first process  16  that is monitored by a first monitoring node  18 , and a second monitored node  14  performs a second process  16  that is monitored by a second monitoring node  18 . However, the circumstances of the monitoring may significantly differ between these two implementations. For example, the first monitoring process  14  may utilize a first monitoring process  20  comprising a specialized application written to monitor the process  16 , and that implements a specialized interface  22  to communicate with a specialized interface  24  of the process  16  (e.g., the monitoring process  20  may receive metrics sent by the specialized interface  24  of the process  16 , and/or may query the process  16  through the specialized interface  24  to request status information). The first monitoring process  20  may also write significant information to a first log  28  that may be reviewed by an administrator  12  to determine the status of the monitored node  14  and process  16 . The second monitoring process  14  may utilize a second (different) monitoring process  20  comprising a specialized application written to monitor the process  16 . However, the process  16  may not be configured to communicate with the monitoring process  20 , but may provide a service  30  to a client  32 , and the monitoring process  20  may monitor  34  the service  30  of the process  16  with the client  32  (e.g., monitoring the provision of data from the process  16  to the client  32 ). The second monitoring process  20  may also write significant information to a second (different) log  28  that may be reviewed by an administrator  12  to determine the status of the monitored node  14  and process  16 . In this manner, the first monitoring node  18  and the first monitored node  14  may interoperate to achieve the monitoring of the first process  16 , and the second monitoring node  18  and the second monitored node  14  may interoperate to achieve the monitoring of the second process  16 . 
     The exemplary scenario  10  of  FIG. 1  therefore illustrates a specialized technique for monitoring each process  16 , involving a tight coupling of respective monitoring nodes  18  and monitored nodes  16  to achieve the monitoring and reporting of statuses and failures. However, this exemplary scenario  10  also illustrates some disadvantages that may arise with specialized techniques based on such tight coupling. As a first example, each monitoring node  18  performs a monitoring of the corresponding monitored node  14  and process  16 , but does not participate in the monitoring of the other monitored node  14  and/or process  16 . Therefore, the monitoring nodes  18  may not utilize the resources of one monitored node  14  in the event of a failure of the other monitored node  14 . As a second example, the monitoring nodes  18  do not intercommunicate, and a failure of either monitoring node  18  may not be detected or responded to by the other monitoring node  18 ; indeed, a failure of a monitoring node  18  may not be reported to or noticed by an administrator  12 . As a third example, the monitoring nodes  18  report information about the monitoring to the administrator  12  in different ways (e.g., utilizing different logs  28 ), and the administrator  12  may have to examine each log  28  and attend to the details of the monitoring of each process  16  in turn. As a fourth example, it may be difficult for the administrator  12  to introduce a new process  16  to be monitored, a new monitored node  14  performing a process  16 , or a new monitoring node  20  into the exemplary scenario  10 , due to the specialization and tight coupling of the resources already included therein. Moreover, the differences in the manner of recording information and reporting failures may reduce the consistency of the reporting process. Rather, the monitoring of a new process  16  and/or monitored node  14  may be achieved only by the introduction of a new monitoring node  18 , possibly including a specialized monitoring process  20 , thereby further increasing the complexity of the administration of the monitoring in the exemplary scenario  10  of  FIG. 1 . 
     Presented herein are techniques for implementing one or more monitoring nodes  18  to monitor one or more processes  16  performed by one or more monitoring nodes  14  in a standardized manner that promotes the interoperation, fault detection and fault recovery capabilities, flexibility, extensibility, and consistency of such monitoring. In accordance with these techniques, a monitoring node  18  may be configured to accept the registration of one more monitored nodes  14 , and may performing the monitoring of processes performed thereupon. A monitored node  14  may register with a monitoring node  18  for monitoring, and may indicate one or more processes  16  executing on the monitored nodes  14 . The monitored node  14  may then notify the monitoring node  18  of the statuses of the respective processes  16 . In the event of a failure of a process  16  (e.g., metrics indicating the development of a problem, a reporting of a failure status, or a cessation of reported statuses), a monitoring node  18  may request that the monitored node  14  restart the process  16 . Alternatively, upon detecting the failure of an entire monitored node  14  (e.g., a cessation of reporting from the monitored node  14  or a lack of responsiveness), the monitoring node  18  may select a substitute monitored node  14  from the monitored node set, and may request the substitute monitored node  14  to restart each of the processes  16  that were executing on the monitored node  14  that has failed. Moreover, the monitoring nodes  18  may be configured to monitor each other; e.g., if a monitoring node  18  ceases reporting its status to the other monitoring nodes  18 , the other monitoring nodes  18  may collectively choose a substitute monitoring node  18  for the failed monitoring node  18 , and may reassign the monitored nodes  14  that had been assigned to the failed monitoring node  18  to the substitute monitoring mode  18 . 
       FIG. 2  presents an exemplary scenario  40  featuring a monitoring of a set of processes  16  performed by a set of monitored nodes  14  and monitored by a set of monitoring nodes  18 . In this exemplary scenario  40 , a set of monitoring nodes  18  interoperates to perform the monitoring of the monitored nodes  14  and processes  16 . The monitored nodes  14  may be configured to, upon joining the monitoring scenario, register for monitoring, and the monitoring nodes  18  may confer to choose a monitoring node  18  to which the monitored node  14  is to be assigned. The monitored node  14  may receive a notification of the assignment, and may begin reporting a set of statuses  42  of respective processes  16  to a monitoring process  20  on the monitoring node  18 . The monitoring node  18  may therefore determine the status of the monitored node  14  and the processes  16  performed thereby. If a process  16  fails (as indicated by the statuses  42  reported thereto), the monitoring node  18  may request the monitored node  14  to restart the process  16 ; but if an entire monitored node  14  fails, the monitoring node  18  may confer with the other monitoring nodes  18  choose a substitute monitored node  14 , and the processes  16  that had been executing on the failed monitored node  14  may be restarted upon the substitute monitored node  14 . Moreover, if a monitoring node  18  fails, the other monitoring nodes  18  may confer to choose a substitute monitoring node, and may reassign all of the monitored nodes  14  that had been assigned to the failed monitoring node  18  to the substitute monitoring node  18 . All of these actions may be reviewed by an administrator  12 , who may view a log shared by the monitoring nodes  18  and administrate the monitoring network (e.g., expanding the monitoring network by adding more monitored nodes  14 , processes  16 , and/or monitoring nodes  18 ). 
     The techniques presented herein (including in the exemplary scenario  40  of  FIG. 2 ) may present some advantages over other monitoring techniques, such as those illustrated in the exemplary scenario  10  of  FIG. 1 . As a first example, the techniques presented herein may represent a standardized monitoring framework, whereby any process  16  may participate in the monitoring through the reporting of information to a monitoring node  18 . As a second example, the techniques presented herein promote the extensibility of the monitoring scenarios; e.g., additional monitoring nodes  18  may be easily added to the monitoring node set  18  to share the computational load of the monitoring and improve the resiliency thereof, and a monitored node  14  comprising various processes  16  to be monitored may easily join the monitored node set to subscribe for monitoring. Additionally, this monitoring framework may enable monitoring to be offered, provided, and subscribed to as a standardized service; e.g., a monitoring host may offer a set of monitoring nodes  18  to which any set of monitored nodes  14  and processes  16  may be subscribed. As a third example, the fault detection and fault recovery among the processes  16 , monitored nodes  14 , and monitoring nodes  18  is significantly improved; e.g., a failure of any component may be detected and absorbed by the remaining resources of the monitoring scenario. Moreover, the ease and rapidity of fault recovery through these techniques may enable high availability of both the monitored processes and the monitoring service; e.g., device and process failures may be rapidly detected, and another monitoring node and/or monitored node may assume the role of a failed device. As a fourth example, the consistency of the monitoring scenario may be significantly improved, and the complexity thereof significantly reduced, by configuring the monitoring nodes  18  to record information and report to administrators  12  in a standardized manner. For example, an administrator  12  may view the status of all monitored resources by viewing one log that is shared by all of the monitoring nodes  18 . These and other advantages may be achieved through the implementation of monitoring according to the techniques presented herein. 
       FIG. 3  presents a first embodiment of these techniques, illustrated as an exemplary method  50  of configuring a monitoring node  18  having a processor to monitor one or more monitored nodes  14  executing at least one process  16 . The exemplary method  50  may be implemented, e.g., as a set of processor-executable instructions stored in a memory component of the monitoring node  18  (e.g., a memory circuit, a platter of a hard disk drive, a solid-state storage device, or a magnetic or optical disc) and configured in a such a manner as to, when executed by the processor of the monitoring node  18 , cause the monitoring node  18  to perform the tasks of the exemplary method  50 . The exemplary method  50  begins at  52  and involves executing  54  the instructions on the processor. In particular, the instructions are configured to, upon receiving a request to monitor a monitored node  14 , register  56  at least one process  16  of the monitored node  14  for monitoring. The instructions are also configured to, upon receiving at least one status  42  from a process  16  of a monitored node  14 , record  58  the status  42  of the process  16 . The instructions are also configured to, upon detecting a failure of at least one process  16  of a monitored node  14 , restart  60  the process  16  on a monitored node  14 . In this manner, the exemplary method  50  causes the monitoring node  18  to perform fault detection and fault recovery of the processes  16  of one or more monitored nodes  14 , and so ends at  62 . 
       FIG. 4  presents a first embodiment of these techniques, illustrated as an exemplary method  70  of configuring a monitored node  14  having a processor and executing at least one process  16  to be monitored by a monitoring node  18 . The exemplary method  70  may be implemented, e.g., as a set of processor-executable instructions stored in a memory component of the monitoring node  18  (e.g., a memory circuit, a platter of a hard disk drive, a solid-state storage device, or a magnetic or optical disc) and configured in a such a manner as to, when executed by the processor of the monitored node  14 , cause the monitored node  14  to perform the tasks of the exemplary method  50 . The exemplary method  70  begins at  72  and involves executing  74  the instructions on the processor. In particular, the instructions are configured to register  76  at least one process  16  with the monitoring node  18 . The instructions are also configured to report  78  (e.g., periodically) at least one status  42  of at least one process  16  to a monitoring node  18 . Additionally, the instructions are also configured to, upon receiving from a monitoring node  18  a request to restart a process  16 , restart  80  the process  16 . In this manner, the exemplary method  70  causes the monitored node  14  to enroll its processes  16  for monitoring by a monitoring node  18  and participate in the monitoring scenario according to the techniques presented herein, and so ends at  82 . 
     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  FIG. 5 , wherein the implementation  90  comprises a computer-readable medium  92  (e.g., a CD-R, DVD-R, or a platter of a hard disk drive), on which is encoded computer-readable data  94 . This computer-readable data  94  in turn comprises a set of computer instructions  96  configured to operate according to the principles set forth herein. In one such embodiment, the processor-executable instructions  96  may be configured to perform a method of configuring a monitoring node to monitor one or more processes on one or more monitored nodes, such as the exemplary method  50  of  FIG. 3 . In another such embodiment, the processor-executable instructions  96  may be configured to implement a method of configuring a monitored node to participate in monitoring by one or more monitoring nodes, such as the exemplary method  70  of  FIG. 4 . Some embodiments of this computer-readable medium may comprise a non-transitory computer-readable storage medium (e.g., a hard disk drive, an optical disc, or a flash memory device) that is configured to store processor-executable instructions configured in this manner. Many such computer-readable media may be devised by those of ordinary skill in the art that are configured to operate in accordance with the techniques presented herein. 
     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  50  of  FIG. 3  and the exemplary method  70  of  FIG. 4 ) to confer individual and/or synergistic advantages upon such embodiments. 
     A first aspect that may vary among embodiments relates to the scenarios wherein such embodiments may be utilized. As a first example, the monitoring techniques presented herein may be utilized to achieve the monitoring of many types of nodes, such as computers of various form factors (e.g., servers, workstations, consoles, notebooks, tablets, palmtop devices, and smartphones). As a second example, many types of processes  16  may be monitored according to the techniques presented herein, such as services (e.g., email servers, file servers, database servers, sensors, automation servers such as supervisory control and data acquisition (SCADA) components, and artificially intelligent processes. As a third example, many types of statuses  42  may be reported by such processes  16 , including an “OK” status, a “not OK” status, an “encountering difficulties” status, and a “locked up” status. Those of ordinary skill in the art may envision many scenarios wherein the techniques presented herein may be utilized. 
     A second aspect that may vary among embodiments of these techniques relates to the configuration of the monitoring of a monitored node  14  performing at least one process  16 . As a first example of this second aspect, a monitored node  14  and/or process  16  may be configured to send to the monitoring node  18  a series of persistence indicators that indicate the continued functionality of the monitored node  14  and/or process  16 . The monitored node  14  and/or process  16  may be configured to send a persistence indicator to the monitoring node  18  within a notification period (e.g., once per minute), and a monitoring node may be configured to detect a failure of the monitored node  14  and/or process  16  as an elapsing of a notification period without having received the persistence indicator. 
     As a second example of this second aspect, in addition to reporting a status  42  (e.g., as a persistence indicator), a process  16  may be configured to report its state to the monitoring node  18 , which may be configured to record the state of the process  16 . For example, the process  16  may comprise a state machine that may exist in various states and/or one or more data items upon which the process  16  is operating, and the process  16  may periodically report the state and the data items to the monitoring node  18 . This information may add detail to the reported status  42  of the process  16 , and may be useful in the event of a subsequent failure of the process  16 . 
     As a third example of this second aspect, a monitoring node  18  may be configured to take many types of actions upon detecting a failure of a monitored node  14  and/or process  16 . As a first example, the monitoring node  18  may simply record the failure in a log  28 , or may contact an administrator  12  with a notification of the failure. As a second example, the monitoring node  18  may request the monitored node  14  to restart a process  16  that has failed. Moreover, if the monitoring node  18  is monitoring a set of two or more monitored nodes  14 , the monitoring node  18  may select a substitute monitored node  14 , and may request the substitute monitored node  14  to restart the process  16 . This substitution may be advantageous, e.g., if the monitored node  14  is also performing other processes  16  that may be disrupted by an additional failure of the process  16  upon restarting on the same monitored node  14 , and/or for retrying the process  16  on a different monitored node  14  that may have different conditions that avoid a second failure of the process  16 . Moreover, this substitution may be advantageous, e.g., when an entire monitored node  14  fails, and when all of the processes  16  that had been performed by the monitored node  14  are to be restarted on one or more substitute monitored nodes  14 . 
     As a fourth example of this second aspect, if a process  16  is configured to report its state to a monitoring node  16 , then upon detecting a failure of the process  16 , the monitoring node  18  may request a restart of the process  16  on a monitored node  14  (including a substitute monitored node  14 ) in the state last reported by the process  16  before failure. For example, a process  16  may comprise an algorithm performing a lengthy computation (e.g., the processing of a large array), and may periodically report to the monitoring process  18  its state within the algorithm (e.g., the index into the array that is currently being processed). If the process  16  fails, the monitoring process  18  may request a monitored node  14  to restart the process  16  at the last reported state, such as the last reported position within the algorithm (e.g., beginning with the last reported array index within the array). In this manner, the process  16  may be restarted without having to perform the previously performed states, thereby reducing a redundant performance of the completed portion of the algorithm and conserving the computing resources in the performance of the process  16 . 
       FIG. 6  presents an illustration of an exemplary scenario  100  featuring a reporting to a monitoring node a set of states  102  of respective processes  16  performed by respective monitored nodes  14 . In this exemplary scenario  100 , two monitored nodes  14  are respectively performing two monitored processes  16  that are respectively configured to report the state  102  of the process  16  to the monitoring node  18 . For example, the processes  16  may report the states  102  to the monitoring node  18  periodically, or upon transitioning from a first state  102  to a second state  102 . The monitoring node  18  may record the states  102  of the processes  16  in a state log  104 . Accordingly, if a second process  16  executing on the first monitored node  14  experiences a failure  106  (e.g., if the second process  16  crashes, reports a problem, or fails to continue reporting states  102  and/or statuses  42 , such as performance indicators), the monitored node  18  may detect the failure  106  of the second process  16 , and may send to the monitored node  14  a request  108  to restart the second process  16 . Moreover, the monitoring node  18  may refer to the state log  104 , identify the last state  102  reported by the second process  16  (e.g., the second process  16  may have reported a second state  102  and then crashed), the monitoring node  18  may indicate in the request  108  that the monitored node  14  is to restart the second process  16  in the second state  102 . Similarly, a second monitored node  14  may be performing two processes  16 , but may experience a failure  110  (e.g., may overheat, lose power or network connectivity, or exhibit an operating system crash). The monitoring node  18  may detect the failure  110  of the second monitored node  14 , and may send to a third monitored node  14  a series of requests  108  to restart each of the processes  16  that the second monitored node  14  was performing at the time of the failure  110 . Moreover, the monitoring node  18  may indicate in the request  108  the state  102  in which the third monitored node  14  is to restart each process  16 , based on the states  102  of the processes  16  last reported before the failure  110 . In this manner, the monitoring node  18  may instruct the monitored nodes  14  to restart the processes  16  according to the states  102  last reported prior to a failure, thereby conserving the computing resources of the processes  16  within the monitoring scenario. 
     As a fifth example of this second aspect, a monitoring node  18  may be configured to, upon detecting a failure of a process  16 , take other actions in order to address the failure. For example, the monitoring node  18  may be configured to perform a particular logic (e.g., an invocation of a function or a set of instructions) when a process  16  enters a particular state  102  (e.g., when the process  16  raises a particular event). Moreover, the monitoring node  18  may receive the logic in advance from a monitored node  14  (e.g., during the registration of the monitored node  14  for monitoring) and/or process (e.g., when the monitored node  14  initiates a process  16  to be monitored by the monitoring node  18 ). For example, a monitored node  14  or process  16  may comprise a dynamic link library (DLL) including one or more functions, and may provide the library to the monitoring node  18  with a request to perform one or more of the functions if the process  16  enters a particular state  102 . In this manner, a monitored node  14  may, while subscribing to a monitoring service, provide instructions to the monitoring node  18  to be performed in the event of a failure. 
       FIG. 7  presents an illustration of an exemplary scenario  120  featuring monitoring node  18  configured to perform a logic  124  upon detecting a process  16  entering a particular state  102  (e.g., upon raising a particular event). In this exemplary scenario  120 , the monitoring node  18  receives from the monitored node  14  (e.g., while the monitored node  14  registers with the monitoring node  18 ) a function library  122 , such as a dynamic link library (DLL) or a script, comprising a set of executable functions, as well as a specification of which functions are to be invoked upon a particular process  16  entering a particular state  102 . The monitoring process  18  may store this information, e.g., in a logic table  124  specifying a logic  126  to be performed upon a particular process  16  entering a particular state  102 , and may refer to the logic table  124  whenever a state  102  reports entering a new state  102 . Accordingly, in the exemplary scenario  120  of  FIG. 7 , when the second process  14  reports to the monitoring node  18  that it has entered a second state, the monitoring process  18  may refer to the logic table  102 , determine that it is to perform a particular logic  126  in this event (e.g., invoking a third function of the function library  122 ), and may perform the logic, resulting in a request  128  to the monitored node  14  to start a third process  16  in a particular state  102  (e.g., a repair process that addresses the particular type of failure indicated by the state  102  reported by the second process  16 ). Those of ordinary skill in the art may devise many variations in the type of monitoring applied by a monitoring node  18  to a monitored node  14  and the processes  16  performed thereby in accordance with the techniques presented herein. 
     A third aspect that may vary among embodiments of these techniques relates to monitoring scenarios involving a set of monitoring nodes  18  that may provide additional features, such as improved fault tolerance and fault recovery, by interoperating to monitor the monitored nodes  14  and processes  16 . As a first example, each monitoring node  18  of the monitoring node set may store the statuses  42  received from the processes  16  of respective monitored nodes  14 , and may synchronize the statuses  42  with at least one other monitoring node  18 . This synchronization may enable the monitoring nodes  18  to share information about the statuses  42  of the processes  16  and to remain up to date about the status of the components in the monitoring scenario. 
     As a second example of this third aspect, when a failure of a monitored node  14  is detected, the monitoring nodes  18  may confer to choose a substitute monitored node  14  for the failed monitored node  14 . For example, a first monitoring node  18  may detect a failure of a monitored node  14 , but a second monitoring node  18  may be in communication with a second monitored node  14  that is performing few or no processes  16 , and the monitoring nodes  14  may confer to select the second monitored node  14  as the substitute node  14  for the failed monitored node  14 . This conferring may therefore enable a load-balancing effect in the choosing of substitute monitored nodes  14  in the event of a failure. 
     As a third example of this third aspect, respective monitored nodes  14  may be assigned for monitoring by a particular monitoring node  18  of the monitoring node set. For example, when a monitored node  14  registers for monitoring, the monitoring node set may confer to choose a monitoring node  18  to which the monitored node  14  is to be assigned (e.g., by choosing a monitoring node  18  that is currently monitoring few or no other monitored nodes  14  and/or processes  16 ). When a process  16  of a monitored node  14  reports a status  42  or a state  102 , the monitored node  14  may send the status  42  or state  102  to the monitoring node  18  to which the monitored node  14  has been assigned (rather than sending the status  42  or state  102  to many monitoring nodes  18 , e.g., as a broadcast message). In this manner, the monitoring nodes  18  may perform a load-balancing among the monitoring nodes  18 , and may conserve the network resources of the monitoring scenario by reducing the broadcasting of reports of statuses  42  and/or states  102 . 
     As a fourth example of this third aspect, respective monitoring nodes  18  may be configured to monitor each other for failure, and to recover from such failure in a manner that does not disrupt the monitoring of the monitored nodes  14  and/or processes  16 . For example, respective monitoring nodes  18  may be configured to send persistence indicators to each other within a notification period (e.g., one persistence indicator from each monitoring node  18  per minute), and if a first monitoring node  18  detects that a notification period has elapsed without a second monitoring node  18  sending a persistence indicator, the first monitoring mode  18  may detect a failure of the second monitoring node  18 . Alternatively, the first monitoring node  18  may receive a failure indicator from a monitored node  14  regarding a second monitoring node to which the monitored node  14  is assigned, but that the monitored node  14  is unable to contact. A detected failure of a monitoring node  18  may also prompt the other monitoring nodes  18  to take various actions; e.g., the remaining monitoring nodes  18  may confer to choose a substitute monitoring node  18 , and may reassign to the substitute monitoring node  18  the monitored nodes  14  formerly assigned to the failed monitoring node  18 . This conferring may be performed via an election or consensus-building mechanism (e.g., a Paxos algorithm), where monitoring nodes  18  may nominate other monitoring nodes  18  as substitute monitoring nodes  18  for the failed monitoring node  18 , and a tallying of votes among the monitoring nodes  18  may lead to a consensus and an election of a substitute monitoring node  18 . The substitute monitoring node  18  may then contact the reassigned monitored nodes  14  to establish the reassignment. Moreover, if the failed monitoring node  18  has synchronized the statuses  42  and/or states  102  of the processes  16  of the reassigned monitored nodes  14 , then the substitute monitoring node  18  may quickly and easily assume the role of the failed monitoring node  18 . In this manner, the monitoring scenario may detect and recover from a failure of a monitoring node  18  without an interruption of monitoring service. 
       FIG. 8  presents an illustration of an exemplary scenario  130  featuring the detection of and recovery from failures of monitoring nodes  18  of a monitoring node set. In this exemplary scenario  130 , respective monitoring nodes  14  of a monitored node set have assignments  134  for monitoring to a monitoring node set comprising four monitoring nodes  18 . The monitoring nodes  18  may communicate in various ways to identify a failure, and may respond to detected failures in various ways. As a first example, a first monitoring node  18  and a second monitoring node  18  may periodically exchange persistence indicators  136  to indicate continued performance. However, when the first monitoring node  18  fails to send a persistence indicator  136  to the second monitoring node  18 , the second monitoring node  14  may detect a failure  138  of the first monitoring node  18 , and may initiate a reassignment  140  of the monitored nodes  14  to the second monitoring node  18 . As a second example, a third monitoring node  18  may have assignments  134  to a set of monitored nodes  14 , but one such monitored node  14  may detect a failure  142  of the third monitoring node  18  (e.g., an inability to contact the monitoring node  18  while sending a status  42  or state  102 ). The third monitoring node  18  may contact a fourth monitoring node  18  with a failure indicator  144 . The fourth monitoring node  18  may confer with the remaining monitoring nodes  18  of the monitoring node set (e.g., the second monitoring node  18 ), and may negotiate a consensus  146  for a substitute monitoring node  18  to assume the role of the failed third monitoring node  18 ; and upon being elected the substitute monitoring node  18 , the fourth monitoring node  18  may initiate a reassignment  140  of the monitored nodes  14  to the fourth monitoring node  18 . In this manner, the monitoring nodes  18  of the monitoring node set may collaborate to detect and recover from failures among the monitoring nodes  18  of the monitoring node set. Those of ordinary skill in the art may devise many ways of configuring the monitoring nodes  18  of a monitoring node set in accordance with the techniques presented herein. 
     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. 
       FIG. 9  and the following discussion provide a brief, general description of a suitable computing environment to implement embodiments of one or more of the provisions set forth herein. The operating environment of  FIG. 9  is only one example of a suitable operating environment and is not intended to suggest any limitation as to the scope of use or functionality of the operating environment. Example computing devices include, but are not limited to, personal computers, server computers, hand-held or laptop devices, mobile devices (such as mobile phones, Personal Digital Assistants (PDAs), media players, and the like), multiprocessor systems, consumer electronics, mini computers, mainframe computers, distributed computing environments that include any of the above systems or devices, and the like. 
     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. 
       FIG. 9  illustrates an example of a system  150  comprising a computing device  152  configured to implement one or more embodiments provided herein. In one configuration, computing device  152  includes at least one processing unit  156  and memory  158 . Depending on the exact configuration and type of computing device, memory  158  may be volatile (such as RAM, for example), non-volatile (such as ROM, flash memory, etc., for example) or some combination of the two. This configuration is illustrated in  FIG. 9  by dashed line  154 . 
     In other embodiments, device  152  may include additional features and/or functionality. For example, device  152  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  FIG. 9  by storage  160 . In one embodiment, computer readable instructions to implement one or more embodiments provided herein may be in storage  160 . Storage  160  may also store other computer readable instructions to implement an operating system, an application program, and the like. Computer readable instructions may be loaded in memory  158  for execution by processing unit  156 , for example. 
     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  158  and storage  160  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  152 . Any such computer storage media may be part of device  152 . 
     Device  152  may also include communication connection(s)  166  that allows device  152  to communicate with other devices. Communication connection(s)  166  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  152  to other computing devices. Communication connection(s)  166  may include a wired connection or a wireless connection. Communication connection(s)  166  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  152  may include input device(s)  164  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)  162  such as one or more displays, speakers, printers, and/or any other output device may also be included in device  152 . Input device(s)  164  and output device(s)  162  may be connected to device  152  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)  164  or output device(s)  162  for computing device  152 . 
     Components of computing device  152  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  152  may be interconnected by a network. For example, memory  158  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  170  accessible via network  168  may store computer readable instructions to implement one or more embodiments provided herein. Computing device  152  may access computing device  170  and download a part or all of the computer readable instructions for execution. Alternatively, computing device  152  may download pieces of the computer readable instructions, as needed, or some instructions may be executed at computing device  152  and some at computing device  170 . 
     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.”