# Michel Raynal - FAULT-TOLERANT DISTRIBUTED SERVICES IN MESSAGE-PASSING SYSTEMS

## Definition
Fault-Tolerence: The service remains uninterrupted even if some component in the network fail.
Distributed System: A collection of computers (or nodes) that communicate amongst themselves [...] to perform a given task.
Distributed Computing: The use of a Distributed System to solve a computational problems.
Static system: The system composition is fixed.
Dynamic system: nodes may enter, leave or move in the system with time.
FLP impossibility result: It is impossible to design a distributed system that is both asynchronous and fault-tolerant.

Data-Strcutures:

- linearizability: a data structure is said to be linearizable if it guarantees that all operations appear to happen at a single pointin time between the invocation and response of the operation.
- Shared Register: [a data strcuture] that stores a value and has two opérations: read [...] and write.
- Fault-Tolerent Register: Linearizable (atomic) Shared register.

Attacks:

- crash: a node halts, but was working correctly until it halts.
- omission: a node fails to receive incoming messages or send outgoing messages.
- timing: a node's message delivery lies outside of the specified delivery time interval.
- Byzantine: Malicious attacks, operator mistake, software errors and conventional crash faults.
- churn: change in system composition due to nodes entering and leaving.

Usefull terms:

- shared memory/message-passing model
- synchronous/asynchronous systems
- static/dynamic systems

## Chapter 1

He's began to define the terms of distributed systemsn and the possibles uses cases.
He define synchronous message-passing systems as giving the best guarantees. Opposite to asynchronous message-passing systems.  

### Failure Detectors

He's defining te concept of Failure Detectors as an oracle able to identify the failed nodes. And how they can be used to circumvent the FLP impossibility result.
Actually the Failure Detectors needs a certain level of synchronicity to work. And two lines of research are proposed to solve this problem: The first one is to implement the Failure Detector on a increasingly weaker system model. And the second one is to find the weakest Failure Detector.

### Fault-Tolerant Register

He defined a "shared register" and explained how it's complicated to implementing them due to the possibility of faulty nodes. And he present the solution who's the Fault-Tolerant Register. He also present the "linearizability" property and how it's used to define the Fault-Tolerant Register.
Finally he introduce two implementation of the Fault-Tolerant Register: one who's crash-tolerent and the other one who's Byzantine-tolerent.