JEPSEN

PRAM

PRAM (Pipeline Random Access Memory) comes from Lipton & Sandberg’s 1988 paper PRAM: A Scalable Shared Memory, which attempts to relax existing coherent memory models to obtain better concurrency (and therefore performance). It enforces that any pair of writes executed by a single process are observed (everywhere) in the order the process executed them; however, writes from different processes may be observed in different orders.

PRAM is exactly equivalent to read your writes, monotonic writes, and monotonic reads.

PRAM is sticky available: in the event of a network partition, all processes can make progress so long as clients always stick to the same server.

For a more strict consistency model which also enforces that writes follow reads, try causal consistency: it’s just as available, and provides more intuitive semantics. If you need total availability, consider sacrificing read your writes and choosing just monotonic reads + monotonic writes.

Formally

Lipton & Sandberg’s definition is phrased as an implementation, and its analysis focuses on performance relative to coherent memory. A more abstract definition comes from Viotti and Vukolić, where PRAM is satisfied if the session order (the order of operations on each process) is a subset of the visibility order (what operations are visible to a given operation).