Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

// request.cf · coarse context

A page that knows where it met you.

Only coarse request metadata is shown. This demo does not display or persist visitor IP addresses.

Country
US
Cloudflare location
CMH
Connection
HTTP/2
Language
Not provided

Ray ID: a401b79cf94d725b

Jump to content

Fail-stop

From Wikipedia, the free encyclopedia

In distributed computing, a fail-stop failure is a failure model in which a processor or process stops executing instead of performing an incorrect state change that other components could observe.[1][2] The halt is detectable by other processors, and a designated portion of storage remains readable after the failure.[2] Richard D. Schlichting and Fred B. Schneider introduced the fail-stop processor as a programming abstraction for building fault-tolerant computer systems in 1983.[1]

The model sits at the mild end of a spectrum of failure assumptions that also includes silent crash (halting) failures and Byzantine faults.[3][2] It is an idealization. A perfect fail-stop processor cannot be built with a finite amount of hardware, because enough faults could disable every error detector. Practical designs therefore approximate it with a k-fail-stop processor that behaves as specified unless more than k component failures occur.[1][2]

Definition

[edit]

Schlichting and Schneider defined a fail-stop processor by two visible effects of a failure: the processor stops executing, and its internal state and volatile memory are lost.[1] Remaining storage is stable storage: it is unaffected by the failure and can be read by other processors.[1][2] A failure is any behavior that is inconsistent with the processor's specified instruction semantics.[1]

Schneider later stated the same idea as three properties:[2]

  • Halt on Failure. The processor halts instead of performing an erroneous state transformation that would be visible to other processors.
  • Failure Status. Any processor can detect that another has failed and therefore halted.
  • Stable Storage. Storage is partitioned into stable storage, which survives a failure and is readable by any processor, and volatile storage, which is lost and is not accessible to others.

A program interrupted by a failure can be restarted on a working fail-stop processor. Because volatile state is gone, a recovery protocol kept in stable storage must finish or repair the interrupted action from a well-defined stable state.[1] Schneider wrote that an application that needs N processors when none fail can tolerate up to f fail-stop failures with N + f such processors: survivors detect a halt and continue the work from stable storage, provided enough capacity remains to meet timing constraints.[2]

Relation to other models

[edit]

Kenneth P. Birman distinguished fail-stop failures from ordinary halting or crash failures. In both models a process either runs correctly or stops without taking incorrect actions. In the crash model, others typically infer the halt only by timeouts or missing keep-alive messages. In the fail-stop model they have an accurate way to detect the failure, for example a timeout that occurs only if the monitored process has actually crashed. Birman called that detection assumption optimistic and noted that solutions under it still have to be related to real systems in which detection can be wrong.[3]

Schneider observed that some protocols replace the Failure Status Property with timeouts, which requires synchronized clocks. Without that assumption two processors might disagree about whether a third has halted.[2] Some protocols also omit stable storage and replicate state at other processors, which he treated as an approximation of the Stable Storage Property.[2]

Byzantine faults, by contrast, place no restriction on a faulty component's behavior. A failed node may send arbitrary or conflicting messages, including messages that make it look correct to some observers.[2] Fail-stop is the simpler case: there are no erroneous outputs to vote away, only a detected halt.

In Schneider's tutorial on state machine replication, an ensemble that must tolerate t Byzantine faults needs at least 2t + 1 replicas, with majority output. If processors suffer only fail-stop failures, t + 1 replicas suffice, and the ensemble may use the output of any remaining replica, because a fail-stop processor does not emit a wrong result and one correct replica remains after t failures.[4]

Implementation

[edit]

Schlichting and Schneider argued that complete fault tolerance with finite hardware is impossible, so the engineering goal is to tolerate a bounded number of failures of a stated kind.[1] Their method is to write software as if fail-stop processors exist, then implement an approximation of those processors.[1]

A k-fail-stop processor behaves like a fail-stop processor unless k + 1 or more of its components fail.[1][2] One construction interconnects real processors and memories and uses a solution to the Byzantine Generals Problem so that nonfaulty units agree on values read from replicated stable storage. Disagreement signals a failure and the nonfaulty processors halt. Schlichting and Schneider used 2k + 1 processors so that up to k faults can be tolerated in that comparison.[1] Schneider's 1984 design splits the approximation into k + 1 program processes that run the workload and 2k + 1 storage processes that hold copies of stable storage, with writes agreed so that a disagreement among program processes is visible to storage processes.[2]

They noted that highly reliable multiprocessors such as FTMP and SIFT could be configured to approximate a collection of fail-stop processors, because both already replicate processors and memory.[1] Schneider wrote that most protocols for fault-tolerant systems already assume fail-stop processors or an equivalent, which is a reason to study how expensive it is to implement the abstraction rather than to assume it.[2]

Other uses

[edit]

In cryptography, a fail-stop signature is a digital signature scheme in which a signer can prove that a forged signature was not produced under the scheme's secret key, typically against a computationally unbounded forger, after which the signer can stop using the key.[5][6] That primitive is unrelated to the processor failure model.

See also

[edit]

References

[edit]
  1. 1 2 3 4 5 6 7 8 9 10 11 12 Schlichting, Richard D.; Schneider, Fred B. (August 1983). "Fail-Stop Processors: An Approach to Designing Fault-Tolerant Computing Systems". ACM Transactions on Computer Systems. 1 (3): 222–238. doi:10.1145/357369.357371.
  2. 1 2 3 4 5 6 7 8 9 10 11 12 13 Schneider, Fred B. (May 1984). "Byzantine Generals in Action: Implementing Fail-Stop Processors". ACM Transactions on Computer Systems. 2 (2): 145–154. doi:10.1145/190.357399.
  3. 1 2 Birman, Kenneth P. (1997). Building Secure and Reliable Network Applications. Manning Publications / Prentice Hall. ISBN 1-884777-29-5.
  4. Schneider, Fred B. (December 1990). "Implementing Fault-Tolerant Services Using the State Machine Approach: A Tutorial". ACM Computing Surveys. 22 (4): 299–319. doi:10.1145/98163.98167.
  5. Pfitzmann, Birgit (1996). Digital Signature Schemes: General Framework and Fail-Stop Signatures. Lecture Notes in Computer Science. Vol. 1100. Springer. doi:10.1007/3-540-68647-7. ISBN 3-540-61517-2.
  6. Barić, Niko; Pfitzmann, Birgit (1997). "Collision-Free Accumulators and Fail-Stop Signature Schemes Without Trees". Advances in Cryptology – EUROCRYPT '97. Lecture Notes in Computer Science. Vol. 1233. Springer. pp. 480–494. doi:10.1007/3-540-69053-0_33.