You mean in the asynchronous systems model, in the presence of failures, it is impossible to write a reliable failure detector: 
<a href="http:&#x2F;&#x2F;the-paper-trail.org&#x2F;blog&#x2F;a-brief-tour-of-flp-impossibility&#x2F;" rel="nofollow">http:&#x2F;&#x2F;the-paper-trail.org&#x2F;blog&#x2F;a-brief-tour-of-flp-impossib...</a>
However, you can write a failure detector for a practical system with the help of omega (weakest failure detector):
<a href="http:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;~lorenzo&#x2F;corsi&#x2F;cs380d&#x2F;papers&#x2F;p685-chandra.pdf" rel="nofollow">http:&#x2F;&#x2F;www.cs.utexas.edu&#x2F;~lorenzo&#x2F;corsi&#x2F;cs380d&#x2F;papers&#x2F;p685-c...</a><p>In practice, failure detectors mean timeouts. What I am arguing is that you can have systems that adapt their timeouts for failure (such as our one), based on the current level of network congestion or load or whatever. The setting&#x2F;changing of the timeout is averaged over a period of time, to ensure it is high enough to not give false positives. You could do the same approach at the per message level, but for all possible messages, it may be prohibitive. If you have a small number of messages, it may work. The problem with messages, compared to failure detection, however, is the following: how do you figure out you have had a false positive? For failure detection it&#x27;s easy: the timeout expired, butre i&#x27;m still alive and my heartbeat arrives late, so we increase the timeout for that node. Vector clocks (fencing tokens) make it easier to reliably find out if messages arrive very late (identify false positives).