https://www.youtube.com/playlist?list=PL5aMzERQ_OZ9j40DJNlsem2qAGoFbfwb4
Week 1 : Introduction to Assembly language and Basics of Concurrency - Part 1
- Understanding assembly
- writing a data structure in assembly
- Understanding Concurrency with Rust:
- Explore advanced techniques for building highly concurrent applications in Rust.
- Discover synchronization primitives such as mutexes, condition variables, and atomic types.
- Learn how to leverage concurrency patterns like channels and message passing to coordinate tasks.
- Understanding Amdahl’s and Gustafson’s Law
- Introduction to message passing
Week 2 : Diving deep into Concurrency - Part 2
- Non blocking Data structures
- Understanding various Non blocking Data Structures
- ABA problem
- Solutions to ABA problem
- Hands on Implementation of non-blocking trieber stack
Week 3 : Work stealing
- Understanding work stealing and its application in concurrent computing.
- Implementing a work-stealing queue in Rust.
- Exploring work stealing in the context of the JVM.
Week 4 : Introduction to GPU Programming
- Understanding GPU architecture
- Introduction to CUDA
Week 5: Introduction to Distributed Systems - Part 1
Overview of Distributed Systems:
- Introduction to the concept of distributed systems and their importance in modern computing.
- Understanding the key characteristics and benefits of distributed systems.
- Examples of distributed systems in real-world applications, such as cloud computing, content delivery networks, and social media platforms. Distributed System Models and Architectures:
- Exploring different architectural models for distributed systems, including:
- Client-server model: Understanding the roles and interactions between clients and servers.
- Peer-to-peer model: Exploring the decentralized nature of peer-to-peer systems.
- Exploring distributed computing paradigms, including message passing, remote procedure calls (RPC), and publish-subscribe systems.
- CAP Theorem and Data Consistency:
- Introducing the CAP theorem (Consistency, Availability, and Partition tolerance) and its significance in distributed systems.
- Exploring different consistency models, such as strong consistency, eventual consistency, and causal consistency.
- Discussing the trade-offs between consistency and other system properties.
- Understanding Map reduce research paper
Week 6: Diving deep into Distributed Systems - Part 2
- Clocks and Time in Distributed Systems:
- Understanding the challenges of time synchronization in distributed systems.
- Logical Clocks - Lamport and Vector
- Proof of Vector Clocks
- Reading Time, Clocks and Order research paper from Leslie Lamport
- Understanding Google Spanner research paper
Week 7 : Consensus Algorithms and Introduction to TLA+, Distributed Systems - Part 3
- Understanding Consensus
- Introduction to consensus algorithms and their role in achieving fault tolerance in distributed systems.
- Exploring the RAFT algorithm as a popular consensus algorithm.
- Understanding the basic principles and components of the RAFT algorithm.
- Discussing the implementation of the RAFT algorithm.
- comparing Paxos with RAFT
Week 8: Fault Tolerance and Distributed Transactions - Part 4
- Introduction to Fault Tolerance:
- Exploring the concept of fault tolerance in distributed systems and why it’s crucial for ensuring system reliability.
- Understanding common types of faults, including hardware failures, network issues, and software errors.
- Replication and Redundancy:
- Discussing the role of replication and redundancy in achieving fault tolerance.
- Exploring different replication strategies, such as primary-backup, active-passive, and active-active.
- Examining the trade-offs and challenges associated with replication.
- Understanding Distributed transactions
- Distributed Transactions and Consistency:
- Exploring distributed transactions and their role in maintaining data consistency in fault-tolerant systems.
- Discussing two-phase commit (2PC), three-phase commit (3PC), and other approaches to distributed transaction management.