karanpratapsingh /system-design
Learn how to design systems at scale and prepare for system design interviews
★ 46,855⑂ 6,099👁 368⑃ 43● 26▤ 0◈ 0
46,855
stars
+19+93+398
6,099
forks
368
watchers
43
prs
26
issues
0
releases
0
discussions
README
System Design Hey, welcome to the course. I hope this course provides a great learning experience. _This course is also available on my website and as an ebook on leanpub. Please leave a ⭐ as motivation if this was helpful!_ Table of contents - Getting Started - What is system design? - Chapter I - IP - OSI Model - TCP and UDP - Domain Name System (DNS) - Load Balancing - Clustering - Caching - Content Delivery Network (CDN) - Proxy - Availability - Scalability - Storage - Chapter II - Databases and DBMS - SQL databases - NoSQL databases - SQL vs NoSQL databases - Database Replication - Indexes - Normalization and Denormalization - ACID and BASE consistency models - CAP theorem - PACELC Theorem - Transactions - Distributed Transactions - Sharding - Consistent Hashing - Database Federation - Chapter III - N-tier architecture - Message Brokers - Message Queues - Publish-Subscribe - Enterprise Service Bus (ESB) - Monoliths and Microservices - Event-Driven Architecture (EDA) - Event Sourcing - Command and Query Responsibility Segregation (CQRS) - API Gateway - REST, GraphQL, gRPC - Long polling, WebSockets, Server-Sent Events (SSE) - Chapter IV - Geohashing and Quadtrees - Circuit breaker - Rate Limiting - Idempotency - Service Discovery - SLA, SLO, SLI - Disaster recovery - Virtual Machines (VMs) and Containers - OAuth 2.0 and OpenID Connect (OIDC) - Single Sign-On (SSO) - SSL, TLS, mTLS - Chapter V - System Design Interviews - URL Shortener - WhatsApp - Twitter - Netflix - Uber - Appendix - Next Steps - References What is system design? Before we start this course, let's talk about what even is system design. System design is the process of defining the architecture, interfaces, and data for a system that satisfies specific requirements. System design meets the needs of your business or organization through coherent and efficient systems. It requires a systematic approach to building and engineering systems. A good system design requires us to think about everything, from infrastructure all the way down to the data and how it's stored. Why is System Design so important? System design helps us define a solution that meets the business requirements. It is one of the earliest decisions we can make when building a system. Often it is essential to think from a high level as these decisions are very difficult to correct later. It also makes it easier to reason about and manage architectural changes as the system evolves. IP An IP address is a unique address that identifies a device on the internet or a local network. IP stands for _"Internet Protocol"_, which is the set of rules governing the format of data sent via the internet or local network. In essence, IP addresses are the identifier that allows information to be sent between devices on a network. They contain location information and make devices access