570 likes | 687 Views
This presentation by Amir Anter, based on the paper by Rachid Guerraoui and Eric Ruppert, explores the intricacies of implementing algorithms anonymously in distributed systems. It addresses the fundamental concept of anonymity, the challenges associated with leader election in anonymous rings, and the need for robust implementations in environments such as sensor networks and peer-to-peer systems. Key topics include anonymous implementations, weak counters, and snapshot algorithms, along with their relevance to achieving consensus and ensuring wait-freedom in asynchronous environments. ###
E N D
What Can Be Implemented Anonymously ? Paper by RachidGuerraui and Eric Ruppert Presentation by Amir Anter
Talk outline • What is anonymously ? • Motivation • Anonymously implementation • Counter • Snapshot • Consensus • Summary
Talk outline • What is anonymously ? • Anonymously implementation • Counter • Snapshot • Consensus • Summary
What is anonymously ? • There is no unique identifiers for the processes.
Leader election in rings p0 1 2 1 2 p2 p1 2 1 • Each process has to decide whether it is a leader or not • Termination states are partitioned to elected and not-elected. • In every execution, exactly one process enters an elected state, all others enter a non-elected state. • We assume rings are oriented.
Leader election in anonymous rings p0 1 2 1 2 p2 p1 2 1 • A ring algorithm is anonymous if processes don’t have an ID they can use in the algorithm (all perform the same code) An anonymous leader election algorithm is… Impossible!!
Motivation • Sensor networks – Might not have id’s • Privacy: • Web servers • Peer-to-peer sharing systems
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Anonymously Implementation • Number of processes is know – n. • Shared memory – multi-reader, multi-writer. • Using registers • Crash failures may occur • Deterministic • Asynchronous
Wait freedom Definition: An algorithm is wait-free if a process invoking it will finish after a finite number of steps
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Fetch-and-add(w, d) do atomically prev:=w w:= prev+d return prev Atomic Counter Read-Modify-Write operation:
Atomic Counter Example: the sequential spec of a counter H0: H1: c.f&i() c:0H2: c.f&i() c:0 c.f&i() c:1 H3: c.f&i() c:0 c.f&i() c:1 c.f&i() c:2H4: c.f&i() c:0 c.f&i() c:1 c.f&i() c:2 c.f&i() c:3 ...
Atomic Counter It has been shown by Herlihy that fetch& increment object has no wait-free implementation from registers, even for the non anonymous case.
Anonymous Counter So how can we implement a counter only from registers and also anonymously ?!
Weak Counters • Single operation: GetTimestamp • Returns an integer • Properties: • Let GetTimestamp(t) = x, GetTimestamp(t’)=x’, If t≥t’ then x ≥x’. • If GetTimestamp was invoked n times then each of those invocation returned a value x ≤n. • Weaker version of fetch&increment. • Strong enough for our purposes.
Weak Counters Example: the sequential spec of a weak counter H0: H1: c.f&i() c:0H2: c.f&i() c:0 c.f&i() c:1 H3: c.f&i() c:0 c.f&i() c:1 c.f&i() c:1H4: c.f&i() c:0 c.f&i() c:1 c.f&i() c:1 c.f&i() c:2 ...
Weak Counters • Array A[1,2,…] of binary registers. • Initially each register A[i]=0. • Invariant: • If A[k]=1, then all entries A[1..k]=1. 1 2 3 4 A 1 1 1 0 0 0
Weak Counters 1 2 3 4 A 0 0 0 0 0 0
Weak Counters • a • Last location returned by the process’s previous GetTimestamp operation.
Weak Counters • L • Shared register initialized to 0. • When process change some A[b] to 1, it also writes b to L.
Weak Counters • j • Local variable • The number of times the process has seen L changes.
Weak Counters • t • Local variable • The largest value the process has seen in L.
Weak Counters 1 2 3 4 • Line 3, iteration # 1: a=1 , b=2 , l=2 • A[2]=1 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 3, iteration # 2: a=1 , b=4 , l=2 • A[4]=0 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 11, iteration # 1: a=1 , b=4 • mid=2 • A[2]=1 a=3 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 11, iteration # 2: a=3 , b=4 • mid=3 • A[3]=0 b=3 A 1 1 0 0 0 0
Weak Counters 1 2 3 4 • Line 11, iteration # 3 • a=3=b A[3]=1 , L=3 A 1 1 1 0 0 0
Weak Counters • Wait freedom • The second loop stops – binary search. • The first loop stops • If j≥n then return t • In any finite execution in which k GetTimestamp operations are invoked: • O(k) registers are accessed. • Any operation takes O(log k).
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Snapshot object • R[1…n] registers • Operations • Scan • Returns a vector V, where V is an n-element vector called a view (with a value for each segment). • Update(d) • Process i writes d to R[i] V[i] must return the value of the latest Updatei operation (or the initial value if there were none) Scan returns a snapshot of the segments array that existed at some point during the execution!
A wait-free simulation of atomic snapshot Initially segment[i].ts=0, segment[i].data=vi, segment[i].view=<v0, …, vn-1> • Updatei(S, d) • view:=scan() • Segment[i]=<segment[i].ts+1, d, view> • Scani(S) • for all j <> i c[j]=Segment[j] • while true do • for all j a[j] = Segment[j] • for all j b[j] = Segment[j] • if, for all j a[j]=b[j] ; Comparison includes timestamp! • return <b[0].data, …, b[n-1].data> ; Direct scan • else if, for some j ≠ i, b[j].ts - c[j].ts≥ 2 • return b[j].view ; Indirect scan
Anonymous snapshot object • R[1…m] registers • Operations • Scan • Returns a vector V, where V is an m-element vector called a view (with a value for each segment). • Update(i,x) • Writes x to R[i]
Anonymous snapshot object • The algorithm is anonymous and wait-free. • The average number of steps per operation in any finite execution is
Talk outline • What is anonymously? • Anonymously implementation • Weak Counter • Snapshot • Consensus • Summary
Formally: Consensus Object • Supports a single operation: decide • Each process pi calls decide with some input vi from some domain. decide returns a value from the same domain. • The following requirements must be met: • Agreement: In any execution E, all decide operations must return the same value. • Validity: The values returned by the operations must equal one of the inputs.
FIFO queue + registers can implement 2-process consensus Initially Q=<0> and Prefer[i]=null, i=0,1 • Decide(v) ; code for pi, i=0,1 • Prefer[i]:=v • qval=Q.deq() • if (qval = 0) then return v • else return Prefer[1-i] There is a proof that wait-free consensus for 2 or more processes cannot be solved by registers.
Anonymous Consensus So how can we implement it only from registers and also anonymously ?!
Obstruction freedom • Obstruction-freedom guarantees that a process will complete its algorithm whenever it has an opportunity to take enough steps without interruption by other processes.
Consensus • The algorithm is using 8n+2 registers. • Anonymous • Uses anonymous snapshot object. • Obstruction free • Correct
Consensus - Obstruction freedom • Let’s see that if process is running by itself it eventually halts.
Consensus - Obstruction freedom • Let C be any configuration. • m is the maximum value of R in C. • P run by itself forever from C.
Consensus - Obstruction freedom • lap increases at least once every iterations • Eventually and • Now P will write values larger than m to in the next iterations.
Consensus - correctness • Let P’ be a process that decides 0 (without loss of generality). • Let T be the time P’ last scans R and S’ that scan. • We shall show that every other process that terminates also decides 0.
Consensus - correctness • Let m be the minimum value in • All values in are less than m.
Consensus - correctness • Claim 1: After T, at most n UPDATES write smaller value than m to R.