for hvem vi kan stole på. Det nytter ikke hvis en general (server) sender samtlige beskeder til alle andre uden videre, for beskederne kan jo forfalskes på vejen. Derfor er hovedreglen: for hver besked fra en loyal general (anerkendt server), der skal alle andre loyale generaler bruge samme besked.
er når hver proces har sin egen værdi, og når alle processer kommunikerer med hinanden for at afgøre hvilken værdi, der er den korrekte. Der er tale om en række private værdier, der udveksles mellem processer (servere) for at finde en offentlig værdi i den givne consensus vector.
Forekomster Valg af den forekomst af en værdi, der optræder flest af. Sandsynlighed Valg af den værdi, der forekommer mest sandsynlig. Tillid Valg af den værdi, der optræder hos flest, der er tillid til. Type Valg af den værdi, som passer med den type, der er valgt.
og I har et typisk database-setup. Hvis der ingen forrædere er, så sender generalen sin besked til alle løjtnanter, som læser beskeden og handler derefter. Hvis en løjtnant ingen besked modtager, så falder hun tilbage og angriber ikke (fallback policy).
Hvis der er forrædere, så sender generalen sin besked til alle løjtnanter, som sender beskeden til hinanden. Hvis v er den oprindelige besked og v1 = v2 = v, men v3 = x, så er majority(v, v, x) = v.
alle de beskeder. Achieving reliability in the face of arbitrary malfunctioning is a difficult problem, and its solutions seems to be inherently expensive.
det skal være tæt på perfekt. The only way to reduce the cost is to make assumptions about the type of failure that may occur. However, when extremely high reliability is required, such assumptions cannot be made, and the full expense of a Byzantine Generals solution is required.
serializable transactions—the gold standard of traditional ACID databases—are not achievable with high availability in the presence of network partitions.
the speed at which two servers can communicate is (according to modern physics) bounded by the speed of light. In the best case, two servers on opposite sides of the Earth— communicating via a hypothetical link through the planet’s core—require a minimum 85.1ms round-trip time (RTT; 133.7ms if sent at surface level).
Tænk på mit eksempel fra sidst, hvor jeg nævnte to personer, der arbejder i det samme dokument. Den ene person sætter sig på et fly og arbejder videre uden at være forbundet til Internettet. Den anden sletter dokumentet i mellemtiden. Den ene person lander igen og prøver at gemme dokumentet i deres fælles database. Hov!
ikke er gemt på harddisken endnu. A dirty read (uncommitted dependency) occurs when a transaction is allowed to read data from a row that has been modified by another running transaction and not yet committed.