160 likes | 292 Views
Models and Clocks. Characteristics of a Distributed System. Absence of a shared clock Absence of shared memory Absence of failure detection. Model of a Distributed System. Asynchronous Message Passing. A Simple Distributed Program. Each process is defined as a set of states.
E N D
Characteristics of a Distributed System • Absence of a shared clock • Absence of shared memory • Absence of failure detection
Model of a Distributed System • Asynchronous • Message Passing
A Simple Distributed Program • Each process is defined as a set of states
Model of a Distributed Computation • Interleaving model • A global sequence of events • eg. • P1 sends “what is my checking balance” to P2 • P1 sends “what is my savings balance to P2” • P2 receives “what is my checking balance” from P1 • P1 sets total to 0 • P2 receives “what is my savings balance” from P1 • P2 sends “checking balance = 40” to P1 • P1 receives “checking balance = 40” from P2 . . .
Model of a Distributed Computation • Happened before model • Happened before relation • If e occurred before f in the same process, then e --> f • If e is the send event of a message and f is the receive event of the same message, then e --> f • If there exists an event g such that e --> g and g --> f, then e --> f
Logical Clocks • A logical clock C is a map from the set of events E to N (the set of natural numbers) with the following constraint:
Lamport's logical clock algorithm publicclass LamportClock { int c; public LamportClock() { c = 1; } publicint getValue() { return c; } publicvoid tick() { // on internal actions c = c + 1; } publicvoid sendAction() { // include c in message c = c + 1; } publicvoid receiveAction(int src, int sentValue) { c = Util.max(c, sentValue) + 1; } }
Vector Clocks • Map from the set of states to vectors of natural numbers with the constraint: • For all s, t: s--> t iff s.v < t.v ...... where s.v is the vector assigned to the state s. • Given vectors x,y : x < y • All elements of x are less than or equal to the corresponding elements of y • At least one element of x is strictly less than the corresponding element of y
A Vector clock algorithm publicclass VectorClock { publicint[] v; int myId; int N; public VectorClock(int numProc, int id) { myId = id; N = numProc; v = newint[numProc]; for (int i = 0; i < N; i++) v[i] = 0; v[myId] = 1; } publicvoid tick() { v[myId]++; } publicvoid sendAction() { //include the vector in the message v[myId]++; } publicvoid receiveAction(int[] sentValue) { for (int i = 0; i < N; i++) v[i] = Util.max(v[i], sentValue[i]); v[myId]++; } }
Direct-Dependency Clocks • Weaker version of the vector clock • Maintain a vector clock locally • Process sends only its local component of the clock • Directly precedes relation: only one message in the happened-before diagram of the computation • Direct-dependency clocks satisfy
A Direct-dependency clock algorithm publicclass DirectClock { publicint[] clock; int myId; public DirectClock(int numProc, int id) { myId = id; clock = newint[numProc]; for (int i = 0; i < numProc; i++) clock[i] = 0; clock[myId] = 1; } publicint getValue(int i) { return clock[i]; } publicvoid tick() { clock[myId]++; } publicvoid sendAction() { // sentValue = clock[myId]; tick(); } publicvoid receiveAction(int sender, int sentValue) { clock[sender] = Util.max(clock[sender], sentValue); clock[myId] = Util.max(clock[myId], sentValue) + 1; } }
Matrix Clocks • N x N matrix • Gives processes additional knowledge
The matrix clock algorithm publicclass MatrixClock { int[][] M; int myId; int N; public MatrixClock(int numProc, int id) { myId = id; N = numProc; M = newint[N][N]; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) M[i][j] = 0; M[myId][myId] = 1; } publicvoid tick() { M[myId][myId]++; } publicvoid sendAction() { //include the matrix in the message M[myId][myId]++; } publicvoid receiveAction(int[][] W, int srcId) { // component-wise maximum of matrices for (int i = 0; i < N; i++) if (i != myId) { for (int j = 0; j < N; j++) M[i][j] = Util.max(M[i][j], W[i][j]); } } }