This course is ideal for Java developers, software engineers, and architects who want to design and build scalable, fault-tolerant distributed systems. It’s best suited for those with a solid understanding of Java and basic system design who are looking to deepen their expertise in microservices, distributed databases, and modern architectural patterns. Whether you’re aiming to modernize legacy applications, enhance backend performance, or advance your career in enterprise software development, this course will equip you with the practical skills to build robust distributed systems with Java.
What you will learn
- Look at the concepts of distributed systems
- Understand synchronous and asynchronous communication patterns
- Study service meshes and Idempotent service design
- Differentiate between traditional RDBMS systems and NoSQL
- Learn deployment requirements for strongly consistent distributed systems
- Build distributed URL-shortening services like Tiny-URL
Course Outline
Concepts of Distributed Systems
- Evolution of Computer Systems’ Architecture
- Challenges of Distributed Compounding
- Use-Case of Course Application
- Practice 1
Remote Procedure Call
- The Need of Communication
- Message Transport and Format
- Synchronous and Asynchronous Communication Patterns
- Traditional Load Balancers
- Service Registry and Discovery
- Service Meshes
- Idempotent Service Design
- Practice 2
Distributed Databases
- Traditional RDBMS Systems Versus NoSQL
- Data Sharding and Consistent Hashing
- CAP theorem
- Short Introduction to Apache Cassandra
- Practice 3
Cluster Coordination
- The Need of Cluster-Wide Coordination
- RAFT Consensus Algorithm
- Short Introduction to ETCD
- Implementation of Distributed Mutex
- Leader Election Design Pattern
- Deployment Requirements for Strongly Consistent Distributed Systems
- ACID Properties in Distributed System
- Practice 4
Distributed Messaging Systems
- Asynchronous Communication Pattern and Message-Oriented Middleware
- Short Introduction to Apache Kafka
- Apache Kafka as a Distributed System
- Event-Driven Architecture
- Practice 5