
Explore foundational concepts of system design and sharpen skills for beginners, developers, and system design interviews, guiding better design choices.
A load balancer distributes incoming requests across multiple servers using strategies like round robin, weighted round robin, hash, and least connections, with health checks and a fronting ip.
Learn how in-memory databases store data in RAM for ultra low latency, use disk-backed transaction logs to protect data, and scale with distributed clusters and in-sync replicas to improve robustness.
Show how relational databases prioritize consistency and availability over partition tolerance under ACID, using master–slave replication, and contrast with non-relational databases that tolerate partitioning at the expense of consistency.
Compare soap, rest, and the query language that reduces overfetching, noting xml verbosity, endpoint driven requests, and client defined attributes.
Differentiate synchronous and asynchronous calls: synchronous blocks the main thread until a response, while asynchronous spawns a new thread so the main thread continues, as in checkout and printing invoices.
Http, as an application protocol, relies on transport layer protocols. Tcp provides connection-oriented reliability with in-order delivery, while udp trades reliability for speed.
Introduction to Course
As a computer engineer, be it student, developer or an architect, you are actively involved in designing systems. These systems can vary from small micro-services to large distributed systems. While designing such systems, it is very necessary that you are clear on the basics of system design. System design involves a large variety of concepts. It consists of various terminologies and jargons that you might encounter while reading articles, blogs, going through courses or videos. In order to design a good system, or in order to understand someone else's design, you should be well aware about what does a particular design choice actually entail. In this course, I will cover a wide variety of System Design concepts, and try to explain them with the help of examples, so that you can easily understand these concepts.
Please feel free to drop in comments if you want me to cover any System Design concept not yet covered in the course.