A method comprising: on each host of a plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250), executing one or more engine instances of a plurality of engine instances (1204, 1206, 1214, 1216, 1224, 1234, 1236, 1246, 1254, 1256); wherein each host of the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250) is a computing device; managing, by each engine instance of the plurality of engine instances (1204, 1206, 1214, 1216, 1224, 1234, 1236, 1246, 1254, 1256), access to data stored on persistent storage that is local to the host upon which the engine instance is executing; establishing neighbor relationships among the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250), wherein the neighbor relationships form a directed graph that initially includes all hosts of the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250); wherein, within the directed graph, each host has one or more specified neighbor hosts; executing, by each host, a neighbor monitor that monitors health of the one or more specified neighbor hosts of the host; wherein each neighbor monitor monitors the health of the one or more specified neighbor hosts by monitoring health counters maintained by the one or more specified neighbor hosts, wherein health counters are values that are expected to be periodically changed such that, if a particular health counter ceases to be changed for more than a threshold period of time, it is likely that a component responsible for changing the particular health counter has failed; wherein said monitoring, by said each neighbor monitor, the health of the one or more specified neighbor hosts by monitoring the health counters includes determining whether the health counters are changing; wherein a particular neighbor monitor is executing on a particular host of the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250); wherein the one or more engine instances on each host are responsible for changing the health counters on the host. on each host of a plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250), executing one or more engine instances of a plurality of engine instances (1204, 1206, 1214, 1216, 1224, 1234, 1236, 1246, 1254, 1256); wherein each host of the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250) is a computing device; managing, by each engine instance of the plurality of engine instances (1204, 1206, 1214, 1216, 1224, 1234, 1236, 1246, 1254, 1256), access to data stored on persistent storage that is local to the host upon which the engine instance is executing; establishing neighbor relationships among the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250), wherein the neighbor relationships form a directed graph that initially includes all hosts of the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250); wherein, within the directed graph, each host has one or more specified neighbor hosts; executing, by each host, a neighbor monitor that monitors health of the one or more specified neighbor hosts of the host; wherein each neighbor monitor monitors the health of the one or more specified neighbor hosts by monitoring health counters maintained by the one or more specified neighbor hosts, wherein health counters are values that are expected to be periodically changed such that, if a particular health counter ceases to be changed for more than a threshold period of time, it is likely that a component responsible for changing the particular health counter has failed; wherein said monitoring, by said each neighbor monitor, the health of the one or more specified neighbor hosts by monitoring the health counters includes determining whether the health counters are changing; wherein a particular neighbor monitor is executing on a particular host of the plurality of hosts (1200, 1210, 1220, 1230, 1240, 1250); wherein the one or more engine instances on each host are responsible for changing the health counters on the host.