Preface |
|
xiv | |
1. Distributed Computing Environments |
|
1 | (28) |
|
|
1 | (3) |
|
|
4 | (1) |
|
1.3 Axioms and Restrictions |
|
|
4 | (5) |
|
|
5 | (1) |
|
|
6 | (3) |
|
|
9 | (1) |
|
1.4.1 Amount of Communication Activities |
|
|
9 | (1) |
|
|
10 | (1) |
|
1.5 An Example: Broadcasting |
|
|
10 | (4) |
|
|
14 | (3) |
|
|
14 | (2) |
|
1.6.2 States and Configurations |
|
|
16 | (1) |
|
1.7 Problems and Solutions (*) |
|
|
17 | (2) |
|
|
19 | (3) |
|
1.8.1 Levels of Knowledge |
|
|
19 | (2) |
|
|
21 | (1) |
|
1.9 Technical Considerations |
|
|
22 | (3) |
|
|
22 | (1) |
|
|
23 | (1) |
|
1.9.3 Communication Mechanism |
|
|
24 | (1) |
|
1.10 Summary of Definitions |
|
|
25 | (1) |
|
1.11 Bibliographical Notes |
|
|
25 | (1) |
|
1.12 Exercises, Problems, and Answers |
|
|
26 | (3) |
|
1.12.1 Exercises and Problems |
|
|
26 | (1) |
|
1.12.2 Answers to Exercises |
|
|
27 | (2) |
2. Basic Problems And Protocols |
|
29 | (70) |
|
|
29 | (7) |
|
|
29 | (1) |
|
2.1.2 Cost of Broadcasting |
|
|
30 | (2) |
|
2.1.3 Broadcasting in Special Networks |
|
|
32 | (4) |
|
|
36 | (5) |
|
|
36 | (1) |
|
2.2.2 Wake-Up in Special Networks |
|
|
37 | (4) |
|
|
41 | (10) |
|
2.3.1 Depth-First Traversal |
|
|
42 | (2) |
|
|
44 | (5) |
|
2.3.3 Traversal in Special Networks |
|
|
49 | (1) |
|
2.3.4 Considerations on Traversal |
|
|
50 | (1) |
|
2.4 Practical Implications: Use a Subnet |
|
|
51 | (1) |
|
2.5 Constructing a Spanning Tree |
|
|
52 | (18) |
|
2.5.1 SPT Construction with a Single Initiator: Shout |
|
|
53 | (5) |
|
2.5.2 Other SPT Constructions with Single Initiator |
|
|
58 | (2) |
|
2.5.3 Considerations on the Constructed Tree |
|
|
60 | (2) |
|
2.5.4 Application: Better Traversal |
|
|
62 | (1) |
|
2.5.5 Spanning-Tree Construction with Multiple Initiators |
|
|
62 | (1) |
|
2.5.6 Impossibility Result |
|
|
63 | (2) |
|
2.5.7 SPT with Initial Distinct Values |
|
|
65 | (5) |
|
2.6 Computations in Trees |
|
|
70 | (19) |
|
2.6.1 Saturation: A Basic Technique |
|
|
71 | (3) |
|
|
74 | (2) |
|
2.6.3 Distributed Function Evaluation |
|
|
76 | (2) |
|
2.6.4 Finding Eccentricities |
|
|
78 | (3) |
|
|
81 | (3) |
|
|
84 | (1) |
|
2.6.7 Computing in Rooted Trees |
|
|
85 | (4) |
|
|
89 | (1) |
|
2.7.1 Summary of Problems |
|
|
89 | (1) |
|
2.7.2 Summary of Techniques |
|
|
90 | (1) |
|
2.8 Bibliographical Notes |
|
|
90 | (1) |
|
2.9 Exercises, Problems, and Answers |
|
|
91 | (8) |
|
|
91 | (4) |
|
|
95 | (1) |
|
2.9.3 Answers to Exercises |
|
|
95 | (4) |
3. Election |
|
99 | (126) |
|
|
99 | (3) |
|
3.1.1 Impossibility Result |
|
|
99 | (1) |
|
3.1.2 Additional Restrictions |
|
|
100 | (1) |
|
3.1.3 Solution Strategies |
|
|
101 | (1) |
|
|
102 | (2) |
|
|
104 | (54) |
|
|
105 | (4) |
|
|
109 | (6) |
|
3.3.3 Controlled Distance |
|
|
115 | (7) |
|
|
122 | (5) |
|
3.3.5 Stages with Feedback |
|
|
127 | (3) |
|
|
130 | (4) |
|
3.3.7 Unidirectional Protocols |
|
|
134 | (16) |
|
3.3.8 Limits to Improvements (*) |
|
|
150 | (7) |
|
3.3.9 Summary and Lessons |
|
|
157 | (1) |
|
3.4 Election in Mesh Networks |
|
|
158 | (8) |
|
|
158 | (3) |
|
|
161 | (5) |
|
3.5 Election in Cube Networks |
|
|
166 | (8) |
|
3.5.1 Oriented Hypercubes |
|
|
166 | (8) |
|
3.5.2 Unoriented Hypercubes |
|
|
174 | (1) |
|
3.6 Election in Complete Networks |
|
|
174 | (9) |
|
3.6.1 Stages and Territory |
|
|
174 | (3) |
|
3.6.2 Surprising Limitation |
|
|
177 | (3) |
|
3.6.3 Harvesting the Communication Power |
|
|
180 | (3) |
|
3.7 Election in Chordal Rings (*) |
|
|
183 | (2) |
|
|
183 | (1) |
|
|
184 | (1) |
|
3.8 Universal Election Protocols |
|
|
185 | (27) |
|
|
185 | (8) |
|
3.8.2 Analysis of Mega-Merger |
|
|
193 | (6) |
|
|
199 | (10) |
|
3.8.4 Lower Bounds and Equivalences |
|
|
209 | (3) |
|
3.9 Bibliographical Notes |
|
|
212 | (2) |
|
3.10 Exercises, Problems, and Answers |
|
|
214 | (11) |
|
|
214 | (6) |
|
|
220 | (2) |
|
3.10.3 Answers to Exercises |
|
|
222 | (3) |
4. Message Routing and Shortest Paths |
|
225 | (52) |
|
|
225 | (1) |
|
4.2 Shortest Path Routing |
|
|
226 | (27) |
|
4.2.1 Gossiping the Network Maps |
|
|
226 | (2) |
|
4.2.2 Iterative Construction of Routing Tables |
|
|
228 | (2) |
|
4.2.3 Constructing Shortest-Path Spanning Tree |
|
|
230 | (7) |
|
4.2.4 Constructing All-Pairs Shortest Paths |
|
|
237 | (3) |
|
|
240 | (10) |
|
4.2.6 Suboptimal Solutions: Routing Trees |
|
|
250 | (3) |
|
|
253 | (8) |
|
|
253 | (2) |
|
4.3.2 Fault-Tolerant Tables |
|
|
255 | (4) |
|
4.3.3 On Correctness and Guarantees |
|
|
259 | (2) |
|
4.4 Routing in Static Systems: Compact Tables |
|
|
261 | (6) |
|
4.4.1 The Size of Routing Tables |
|
|
261 | (1) |
|
|
262 | (5) |
|
4.5 Bibliographical Notes |
|
|
267 | (2) |
|
4.6 Exercises, Problems, and Answers |
|
|
269 | (8) |
|
|
269 | (5) |
|
|
274 | (1) |
|
4.6.3 Answers to Exercises |
|
|
274 | (3) |
5. Distributed Set Operations |
|
277 | (56) |
|
|
277 | (2) |
|
5.2 Distributed Selection |
|
|
279 | (18) |
|
|
279 | (1) |
|
5.2.2 Selection in a Small Data Set |
|
|
280 | (2) |
|
5.2.3 Simple Case: Selection Among Two Sites |
|
|
282 | (5) |
|
5.2.4 General Selection Strategy: RankSelect |
|
|
287 | (5) |
|
5.2.5 Reducing the Worst Case: ReduceSelect |
|
|
292 | (5) |
|
5.3 Sorting a Distributed Set |
|
|
297 | (18) |
|
5.3.1 Distributed Sorting |
|
|
297 | (2) |
|
5.3.2 Special Case: Sorting on a Ordered Line |
|
|
299 | (4) |
|
5.3.3 Removing the Topological Constraints: Complete Graph |
|
|
303 | (3) |
|
|
306 | (3) |
|
5.3.5 Efficient Sorting: SelectSort |
|
|
309 | (3) |
|
5.3.6 Unrestricted Sorting |
|
|
312 | (3) |
|
5.4 Distributed Sets Operations |
|
|
315 | (8) |
|
5.4.1 Operations on Distributed Sets |
|
|
315 | (2) |
|
|
317 | (2) |
|
5.4.3 Local Evaluation (*) |
|
|
319 | (3) |
|
|
322 | (1) |
|
|
323 | (1) |
|
5.5 Bibliographical Notes |
|
|
323 | (1) |
|
5.6 Exercises, Problems, and Answers |
|
|
324 | (9) |
|
|
324 | (5) |
|
|
329 | (1) |
|
5.6.3 Answers to Exercises |
|
|
329 | (4) |
6. Synchronous Computations |
|
333 | (75) |
|
6.1 Synchronous Distributed Computing |
|
|
333 | (10) |
|
6.1.1 Fully Synchronous Systems |
|
|
333 | (1) |
|
6.1.2 Clocks and Unit of Time |
|
|
334 | (2) |
|
6.1.3 Communication Delays and Size of Messages |
|
|
336 | (1) |
|
6.1.4 On the Unique Nature of Synchronous Computations |
|
|
336 | (6) |
|
6.1.5 The Cost of Synchronous Protocols |
|
|
342 | (1) |
|
6.2 Communicators, Pipeline, and Transformers |
|
|
343 | (17) |
|
6.2.1 Two-Party Communication |
|
|
344 | (9) |
|
|
353 | (4) |
|
|
357 | (3) |
|
6.3 Min-Finding and Election: Waiting and Guessing |
|
|
360 | (25) |
|
|
360 | (10) |
|
|
370 | (8) |
|
6.3.3 Double Wait: Integrating Waiting and Guessing |
|
|
378 | (7) |
|
6.4 Synchronization Problems: Reset, Unison, and Firing Squad |
|
|
385 | (6) |
|
|
386 | (1) |
|
|
387 | (2) |
|
|
389 | (2) |
|
6.5 Bibliographical Notes |
|
|
391 | (1) |
|
6.6 Exercises, Problems, and Answers |
|
|
392 | (16) |
|
|
392 | (6) |
|
|
398 | (2) |
|
6.6.3 Answers to Exercises |
|
|
400 | (8) |
7. Computing in Presence of Faults |
|
408 | (92) |
|
|
408 | (9) |
|
7.1.1 Faults and Failures |
|
|
408 | (2) |
|
|
410 | (3) |
|
7.1.3 Topological Factors |
|
|
413 | (2) |
|
7.1.4 Fault Tolerance, Agreement, and Common Knowledge |
|
|
415 | (2) |
|
7.2 The Crushing Impact of Failures |
|
|
417 | (8) |
|
7.2.1 Node Failures: Single-Fault Disaster |
|
|
417 | (7) |
|
7.2.2 Consequences of the Single-Fault Disaster |
|
|
424 | (1) |
|
7.3 Localized Entity Failures: Using Synchrony |
|
|
425 | (18) |
|
7.3.1 Synchronous Consensus with Crash Failures |
|
|
426 | (4) |
|
7.3.2 Synchronous Consensus with Byzantine Failures |
|
|
430 | (5) |
|
7.3.3 Limit to Number of Byzantine Entities for Agreement |
|
|
435 | (3) |
|
7.3.4 From Boolean to General Byzantine Agreement |
|
|
438 | (2) |
|
7.3.5 Byzantine Agreement in Arbitrary Graphs |
|
|
440 | (3) |
|
7.4 Localized Entity Failures: Using Randomization |
|
|
443 | (6) |
|
7.4.1 Random Actions and Coin Flips |
|
|
443 | (1) |
|
7.4.2 Randomized Asynchronous Consensus: Crash Failures |
|
|
444 | (5) |
|
|
449 | (1) |
|
7.5 Localized Entity Failures: Using Fault Detection |
|
|
449 | (5) |
|
7.5.1 Failure Detectors and Their Properties |
|
|
450 | (2) |
|
7.5.2 The Weakest Failure Detector |
|
|
452 | (2) |
|
7.6 Localized Entity Failures: Preexecution Failures |
|
|
454 | (3) |
|
7.6.1 Partial Reliability |
|
|
454 | (1) |
|
7.6.2 Example: Election in Complete Network |
|
|
455 | (2) |
|
7.7 Localized Link Failures |
|
|
457 | (10) |
|
7.7.1 A Tale of Two Synchronous Generals |
|
|
458 | (3) |
|
7.7.2 Computing With Faulty Links |
|
|
461 | (5) |
|
|
466 | (1) |
|
7.7.4 Considerations on Localized Entity Failures |
|
|
466 | (1) |
|
|
467 | (19) |
|
7.8.1 Communication Faults and Agreement |
|
|
467 | (1) |
|
7.8.2 Limits to Number of Ubiquitous Faults for Majority |
|
|
468 | (7) |
|
7.8.3 Unanimity in Spite of Ubiquitous Faults |
|
|
475 | (10) |
|
|
485 | (1) |
|
7.9 Bibliographical Notes |
|
|
486 | (2) |
|
7.10 Exercises, Problems, and Answers |
|
|
488 | (12) |
|
|
488 | (4) |
|
|
492 | (1) |
|
7.10.3 Answers to Exercises |
|
|
493 | (7) |
8. Detecting Stable Properties |
|
500 | (41) |
|
|
500 | (1) |
|
|
500 | (18) |
|
|
500 | (1) |
|
8.2.2 Detecting Deadlock: Wait-for Graph |
|
|
501 | (2) |
|
8.2.3 Single-Request Systems |
|
|
503 | (2) |
|
8.2.4 Multiple-Requests Systems |
|
|
505 | (7) |
|
8.2.5 Dynamic Wait-for Graphs |
|
|
512 | (4) |
|
8.2.6 Other Requests Systems |
|
|
516 | (2) |
|
8.3 Global Termination Detection |
|
|
518 | (8) |
|
8.3.1 A Simple Solution: Repeated Termination Queries |
|
|
519 | (4) |
|
8.3.2 Improved Protocols: Shrink |
|
|
523 | (2) |
|
|
525 | (1) |
|
8.4 Global Stable Property Detection |
|
|
526 | (6) |
|
|
526 | (1) |
|
8.4.2 Time Cuts and Consistent Snapshots |
|
|
527 | (3) |
|
8.4.3 Computing A Consistent Snapshot |
|
|
530 | (1) |
|
8.4.4 Summary: Putting All Together |
|
|
531 | (1) |
|
8.5 Bibliographical Notes |
|
|
532 | (2) |
|
8.6 Exercises, Problems, and Answers |
|
|
534 | (7) |
|
|
534 | (2) |
|
|
536 | (2) |
|
8.6.3 Answers to Exercises |
|
|
538 | (3) |
9. Continuous Computations |
|
541 | (36) |
|
|
541 | (1) |
|
|
542 | (7) |
|
9.2.1 Virtual Time and Causal Order |
|
|
542 | (2) |
|
9.2.2 Causal Order: Counter Clocks |
|
|
544 | (1) |
|
9.2.3 Complete Causal Order: Vector Clocks |
|
|
545 | (3) |
|
|
548 | (1) |
|
9.3 Distributed Mutual Exclusion |
|
|
549 | (17) |
|
|
549 | (1) |
|
9.3.2 A Simple and Efficient Solution |
|
|
550 | (1) |
|
9.3.3 Traversing the Network |
|
|
551 | (3) |
|
9.3.4 Managing a Distributed Queue |
|
|
554 | (5) |
|
9.3.5 Decentralized Permissions |
|
|
559 | (2) |
|
9.3.6 Mutual Exclusion in Complete Graphs: Quorum |
|
|
561 | (3) |
|
|
564 | (2) |
|
9.4 Deadlock: System Detection and Resolution |
|
|
566 | (3) |
|
9.4.1 System Detection and Resolution |
|
|
566 | (1) |
|
9.4.2 Detection and Resolution in Single-Request Systems |
|
|
567 | (1) |
|
9.4.3 Detection and Resolution in Multiple-Requests Systems |
|
|
568 | (1) |
|
9.5 Bibliographical Notes |
|
|
569 | (1) |
|
9.6 Exercises, Problems, and Answers |
|
|
570 | (7) |
|
|
570 | (2) |
|
|
572 | (1) |
|
9.6.3 Answers to Exercises |
|
|
573 | (4) |
Index |
|
577 | |