1. Distributed systems fundamentals
a. Shared-nothing vs shared-memory architectures
b. The mutual exclusion problem in distributed architectures
i. Peterson algorithm
ii. Lamport´s bakery algorithm
c. Concurrency
i. Optimistic concurrency control
ii. Pessimistic concurrency control
d. Vector clocks
e. Distributed synchronization
i. 2-Phase-Locking
ii. Consensus protocols
f. Fault tolerance and recovery
i. Fault models
1. Byzantine
2. Crash/stop
ii. Recovery policies
1. Leader election
2. K-safety
g. Communication primitives and strategies
i. Message passing & RPCs
ii. Messsage queues
iii. Total order Broadcast
iv. Reliable broadcast
h. Correctness arguments
i. Liveness
ii. Safety
i. Data replication
i. Eager replication
ii. Lazy replication
iii. Primary copy
iv. Update Everywhere
v. Advanced replication protocols
2. Reference models
a. Client-server
b. N-tier architectures
c. Clustered architectures
d. P2P architectures
3. Existing approaches
a. Google File System
b. Amazon DynamoDB
c. Yahoo PNUTS
d. Hadoop
i. HDFS
ii. Map/Reduce