Processes
Processes are the fundamental unit of locality in a system.
On a process level, a system is a collection of processes, each process has a unique identity. A process has a well-defined lifecycle, represented by the lifecycle events init and term, that governs its participation in the system:
init marks the initialization of the process and represents its entry into the system.
term marks the termination of the process and represents its exit from the system.
A process cannot emit events outside its (init, term) interval. As a consequence, a process cannot announce its termination after its termination. Instead, if desired, the process must announce its intent to terminate. In the case of failure, the process fails silently.
A process cannot be restarted. Instead, a new process must be created that may be considered the logical successor or the logical equivalent of the terminated process.
A term event may denote both a normal planned termination, or an abnormal unplanned termination, fail-stop.
The behavior of a process is represented by its trace, a totally ordered sequence of events, such as sending or receiving a message.
Within a process, events are totally ordered. However, across processes, events are only partially ordered.
Processes emit events through executions.
Failure
Distributed Async Await assumes a fail-stop, also called crash-stop, failure model for processes: When a process experiences a failure, the process stops performing any internal or external steps at an arbitrary moment in time and never again performs any further internal or external steps.
This specification assumes a fail-stop, also called crash-stop, failure model for processes: When a process experiences a failure, the process stops performing any internal or external steps at an arbitrary moment in time and never again performs any further internal or external steps.
This specification does not make statements about process creation. Specifically, when processes leave the system (e.g. in the event of failures), an external mechanism is responsible to add new processes if necessary.
Distributed Async Await assumes a fail-stop process failure model: A process may non-deterministically terminate. Specifically, upon termination, the process does not raise additional events and therefore cannot announce its termination.
In case of a failure, that is, an unexpected and unwanted termination event, a process is considered crashed. The process cannot be restarted. Instead, a new process must be created that may be considered the logical successor or the logical equivalent of the terminated process.
The notion of logical successor or logical equivalent introduces two distinct levels of reasoning: The logical layer and the physical layer.
Logical Layer
The logical layer is populated by logical processes. A logical process has a logical id. A logical process is composed of one or more physical processes.
Physical Layer
The physical layer is populated by logical processes. A physical process has a physical id. One or more physical processes are composed into one logical process.
A logical process can experience additional lifetime events, suspension and resumption: When a physical process terminates, the associated logical process suspends (commonly referred to as a crash). When another physical process initiates, the associated logical process resumes (commonly referred to as restart or recovery.