# karanpratapsingh/system-design

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/karanpratapsingh-system-design).**

40,519 stars · 5,084 forks · other

## Links

- GitHub: https://github.com/karanpratapsingh/system-design
- Homepage: https://leanpub.com/systemdesign
- awesome-repositories: https://awesome-repositories.com/repository/karanpratapsingh-system-design.md

## Topics

`architecture` `distributed-systems` `engineering` `interview` `interview-preparation` `microservices` `scalability` `system-design` `system-design-interview` `tech`

## Description

This project is a comprehensive educational resource focused on the principles, patterns, and trade-offs required to design scalable, reliable, and high-performance distributed systems. It provides a structured curriculum that covers the fundamental architectural strategies necessary for building modern software infrastructure, ranging from high-level system decomposition to low-level networking and data management.

The repository distinguishes itself by offering deep dives into complex architectural patterns, such as microservices-based decomposition, event-driven communication, and command-query responsibility segregation. It provides detailed comparisons of API design techniques, including REST, GraphQL, and gRPC, while offering guidance on when to utilize specific patterns like the backend-for-frontend approach or circuit breakers to manage service failures and maintain system stability.

Beyond core architecture, the project explores a broad capability surface including infrastructure planning, database sharding, caching strategies, and security standards like OAuth and OpenID Connect. It also addresses operational reliability through service discovery, rate limiting, and disaster recovery planning, providing a technical reference library designed to assist engineers in navigating complex design discussions and technical interviews.

## Tags

### Software Engineering & Architecture

- [Distributed Systems Architecture](https://awesome-repositories.com/f/software-engineering-architecture/distributed-systems-architecture.md) — Covers the fundamental principles, patterns, and trade-offs required to design scalable distributed systems.
- [API Design Strategies](https://awesome-repositories.com/f/software-engineering-architecture/api-design-strategies.md) — Now that we know how these API designing techniques work, let's compare them based on the following parameters: - Will it cause tight coupling? - How _chatty_ (distinct API calls to get needed information) are the APIs? ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Architectural Patterns](https://awesome-repositories.com/f/software-engineering-architecture/architectural-patterns.md) — In the Backend For Frontend (BFF) pattern, we create separate backend services to be consumed by specific frontend applications or interfaces. This pattern is useful when we want to avoid customizing a single backend for ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Microservices](https://awesome-repositories.com/f/software-engineering-architecture/microservices.md) — A microservices architecture consists of a collection of small, autonomous services where each service is self-contained and should implement a single business capability within a bounded context. A bounded context is a ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Microservices Architectures](https://awesome-repositories.com/f/software-engineering-architecture/microservices-architectures.md) — Applications are structured as a collection of small autonomous services that implement specific business capabilities within bounded contexts.
- [Microservices Design Patterns](https://awesome-repositories.com/f/software-engineering-architecture/microservices-design-patterns.md) — Explains how to decompose monolithic applications and manage microservice communication and consistency.
- [Scalability Patterns](https://awesome-repositories.com/f/software-engineering-architecture/scalability-patterns.md) — Modern high-traffic websites must serve hundreds of thousands, if not millions, of concurrent requests from users or clients. To cost-effectively scale to meet these high volumes, modern computing best practice generally ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [System Design Curricula](https://awesome-repositories.com/f/software-engineering-architecture/system-design-curricula.md) — Offers a structured educational curriculum focused on the architectural principles and trade-offs required for building scalable distributed systems.
- [Data Consistency Models](https://awesome-repositories.com/f/software-engineering-architecture/data-consistency-models.md) — The CQRS pattern is often used along with the Event Sourcing pattern. CQRS-based systems use separate read and write data models, each tailored to relevant tasks and often located in physically separate stores. When used ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed System Paradigms](https://awesome-repositories.com/f/software-engineering-architecture/distributed-system-paradigms.md) — Systems communicate through asynchronous events to decouple services and improve scalability across distributed environments.
- [Distributed Systems Theory](https://awesome-repositories.com/f/software-engineering-architecture/distributed-systems-theory.md) — Explains core distributed systems trade-offs like the CAP theorem. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Event-Driven Architectures](https://awesome-repositories.com/f/software-engineering-architecture/event-driven-architectures.md) — Event sourcing is seemingly constantly being confused with Event-driven Architecture (EDA). Event-driven architecture is about using events to communicate between service boundaries. Generally, leveraging a message broke ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Resilience Patterns](https://awesome-repositories.com/f/software-engineering-architecture/resilience-patterns.md) — Describes the circuit breaker pattern for preventing cascading failures in distributed systems. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Database Sharding Principles](https://awesome-repositories.com/f/software-engineering-architecture/database-sharding-principles.md) — But why do we need sharding? Here are some advantages: - **Availability**: Provides logical independence to the partitioned database, ensuring the high availability of our application. Here individual partitions can be m ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed Caching Patterns](https://awesome-repositories.com/f/software-engineering-architecture/distributed-caching-patterns.md) — A distributed cache is a system that pools together the random-access memory (RAM) of multiple networked computers into a single in-memory data store used as a data cache to provide fast access to data. While most caches ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed Consistency Models](https://awesome-repositories.com/f/software-engineering-architecture/distributed-consistency-models.md) — Explains the PACELC theorem as an extension of CAP for distributed consistency. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed System Challenges](https://awesome-repositories.com/f/software-engineering-architecture/distributed-system-challenges.md) — The most obvious challenge clustering presents is the increased complexity of installation and maintenance. An operating system, the application, and its dependencies must each be installed and updated on every node. Thi ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed Transaction Patterns](https://awesome-repositories.com/f/software-engineering-architecture/distributed-transaction-patterns.md) — Details the saga pattern for maintaining data consistency across distributed service operations. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Load Balancing Patterns](https://awesome-repositories.com/f/software-engineering-architecture/load-balancing-patterns.md) — Wait, isn't reverse proxy similar to a load balancer? Well, no as a load balancer is useful when we have multiple servers. Often, load balancers route traffic to a set of servers serving the same function, while reverse ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Modular Monoliths](https://awesome-repositories.com/f/software-engineering-architecture/modular-monoliths.md) — A Modular Monolith is an approach where we build and deploy a single application (that's the _Monolith_ part), but we build it in a way that breaks up the code into independent modules for each of the features needed in ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Monolithic Architectures](https://awesome-repositories.com/f/software-engineering-architecture/monolithic-architectures.md) — A monolith is a self-contained and independent application. It is built as a single unit and is responsible for not just a particular task, but can perform every step needed to satisfy a business need. ### Advantages Fol ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Service Discovery Patterns](https://awesome-repositories.com/f/software-engineering-architecture/service-discovery-patterns.md) — Dynamic network locations of service instances are managed in a central database to facilitate communication in containerized environments.
- [Service Meshes](https://awesome-repositories.com/f/software-engineering-architecture/service-meshes.md) — Explains the architectural role of service meshes in managing complex service-to-service communication and traffic routing within distributed environments. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [System Architectures](https://awesome-repositories.com/f/software-engineering-architecture/system-architectures.md) — Let's look at some examples of N-Tier architecture: ### 3-Tier architecture 3-Tier is widely used and consists of the following different layers: - **Presentation layer**: Handles user interactions with the application. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [System Reliability Principles](https://awesome-repositories.com/f/software-engineering-architecture/system-reliability-principles.md) — If queues start to grow significantly, the queue size can become larger than memory, resulting in cache misses, disk reads, and even slower performance. Backpressure can help by limiting the queue size, thereby maintaini ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [API Design Patterns](https://awesome-repositories.com/f/software-engineering-architecture/api-design-patterns.md) — Provides guidance on selecting communication protocols and integration patterns for backend services.
- [Architectural Anti-patterns](https://awesome-repositories.com/f/software-engineering-architecture/architectural-anti-patterns.md) — Distributed Monolith is a system that resembles the microservices architecture but is tightly coupled within itself like a monolithic application. Adopting microservices architecture comes with a lot of advantages. But w ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Architectural Decision Guides](https://awesome-repositories.com/f/software-engineering-architecture/architectural-decision-guides.md) — So, you might be wondering, monoliths seem like a bad idea to begin with, why would anyone use that? Well, it depends. While each approach has its own advantages and disadvantages, it is advised to start with a monolith ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Fault Tolerance Strategies](https://awesome-repositories.com/f/software-engineering-architecture/fault-tolerance-strategies.md) — As you must've already guessed, the load balancer itself can be a single point of failure. To overcome this, a second or `N` number of load balancers can be used in a cluster mode. And, if there's a failure detection and ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [High Availability Patterns](https://awesome-repositories.com/f/software-engineering-architecture/high-availability-patterns.md) — Load balancing shares some common traits with clustering, but they are different processes. Clustering provides redundancy and boosts capacity and availability. Servers in a cluster are aware of each other and work toget ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Load Balancing Architectures](https://awesome-repositories.com/f/software-engineering-architecture/load-balancing-architectures.md) — Here are some commonly desired features of load balancers: - **Autoscaling**: Starting up and shutting down resources in response to demand conditions. - **Sticky sessions**: The ability to assign the same user or device ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Messaging Architectures](https://awesome-repositories.com/f/software-engineering-architecture/messaging-architectures.md) — Message brokers can support two or more messaging patterns, including message queues and pub/sub, while event streaming platforms only offer pub/sub-style distribution patterns. Designed for use with high volumes of mess ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Messaging Patterns](https://awesome-repositories.com/f/software-engineering-architecture/messaging-patterns.md) — Message brokers offer two basic message distribution patterns or messaging styles: - **Point-to-Point messaging**: This is the distribution pattern utilized in message queues with a one-to-one relationship between the me ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Reliability Engineering Concepts](https://awesome-repositories.com/f/software-engineering-architecture/reliability-engineering-concepts.md) — If a system is reliable, it is available. However, if it is available, it is not necessarily reliable. In other words, high reliability contributes to high availability, but it is possible to achieve high availability ev ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Reliability Engineering Principles](https://awesome-repositories.com/f/software-engineering-architecture/reliability-engineering-principles.md) — An SLA, or Service Level Agreement, is an agreement made between a company and its users of a given service. The SLA defines the different promises that the company makes to users regarding specific metrics, such as serv ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Availability Modeling](https://awesome-repositories.com/f/software-engineering-architecture/availability-modeling.md) — If a service consists of multiple components prone to failure, the service's overall availability depends on whether the components are in sequence or in parallel. ### Sequence Overall availability decreases when two com ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Commit Protocols](https://awesome-repositories.com/f/software-engineering-architecture/commit-protocols.md) — Explains the three-phase commit protocol as a solution to distributed blocking issues. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Consistent Hashing](https://awesome-repositories.com/f/software-engineering-architecture/consistent-hashing.md) — Describes how consistent hashing manages node distribution in distributed systems. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Shared Caching Topologies](https://awesome-repositories.com/f/software-engineering-architecture/shared-caching-topologies.md) — As the name suggests, we will have a single shared cache that all the application nodes will use. When the requested data is not found in the global cache, it's the responsibility of the cache to find out the missing pie ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Traffic Management](https://awesome-repositories.com/f/software-engineering-architecture/traffic-management.md) — Explains rate-limiting algorithms like leaky bucket for managing system traffic. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Architectural Comparisons](https://awesome-repositories.com/f/software-engineering-architecture/architectural-comparisons.md) — You might have seen _Service-oriented architecture (SOA)_ mentioned around the internet, sometimes even interchangeably with microservices, but they are different from each other and the main distinction between the two ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Cache Eviction Strategies](https://awesome-repositories.com/f/software-engineering-architecture/cache-eviction-strategies.md) — Following are some of the most common cache eviction policies: - **First In First Out (FIFO)**: The cache evicts the first block accessed first without any regard to how often or how many times it was accessed before. - ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Communication Protocols](https://awesome-repositories.com/f/software-engineering-architecture/communication-protocols.md) — gRPC is a modern open-source high-performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancin ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed System Concepts](https://awesome-repositories.com/f/software-engineering-architecture/distributed-system-concepts.md) — An event is a data point that represents state changes in a system. It doesn't specify what should happen and how the change should modify the system, it only notifies the system of a particular state change. When a user ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Routing Algorithms](https://awesome-repositories.com/f/software-engineering-architecture/routing-algorithms.md) — Provides detailed explanations of load balancing and request distribution strategies used in distributed system design. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))

### Education & Learning Resources

- [Architectural Design Curricula](https://awesome-repositories.com/f/education-learning-resources/architectural-design-curricula.md) — Provides a comprehensive educational curriculum covering fundamental principles, patterns, and trade-offs for designing scalable and reliable distributed systems. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed Systems Curricula](https://awesome-repositories.com/f/education-learning-resources/distributed-systems-curricula.md) — Enterprise Service Bus (ESB) infrastructure is complex and can be challenging to integrate and expensive to maintain. It's difficult to troubleshoot them when problems occur in production environments, they're not easy t ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [System Architecture Curricula](https://awesome-repositories.com/f/education-learning-resources/system-architecture-curricula.md) — Provides a comprehensive educational framework for understanding distributed system design, architectural patterns, and infrastructure trade-offs. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Distributed Architecture Handbooks](https://awesome-repositories.com/f/education-learning-resources/distributed-architecture-handbooks.md) — Serves as a comprehensive technical reference for core infrastructure and distributed system design.
- [API Design Guides](https://awesome-repositories.com/f/education-learning-resources/api-design-guides.md) — A REST API (also known as RESTful API) is an application programming interface that conforms to the constraints of REST architectural style and allows for interaction with RESTful web services. REST stands for Representa ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Architectural Case Studies](https://awesome-repositories.com/f/education-learning-resources/architectural-case-studies.md) — Provides practical examples and real-world scenarios for applying caching, load balancing, and other distributed system patterns. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Architectural Trade-off Analyses](https://awesome-repositories.com/f/education-learning-resources/architectural-trade-off-analyses.md) — Provides structured evaluations of the costs, limitations, and trade-offs associated with implementing complex distributed system components. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Database Transaction Principles](https://awesome-repositories.com/f/education-learning-resources/database-transaction-principles.md) — The term ACID stands for Atomicity, Consistency, Isolation, and Durability. ACID properties are used for maintaining data integrity during transaction processing. In order to maintain consistency before and after a trans ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Engineering Reference Libraries](https://awesome-repositories.com/f/education-learning-resources/engineering-reference-libraries.md) — Provides a comprehensive technical handbook covering fundamental software engineering concepts and infrastructure design patterns.
- [Load Balancing Curricula](https://awesome-repositories.com/f/education-learning-resources/load-balancing-curricula.md) — This is the core functionality provided by a load balancer and has several common variations: - **Host-based**: Distributes requests based on the requested hostname. - **Path-based**: Using the entire URL to distribute r ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [System Reliability Guides](https://awesome-repositories.com/f/education-learning-resources/system-reliability-guides.md) — Provides a structured explanation of availability metrics and the mathematical foundations of system uptime. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [System Design Interview Preparation](https://awesome-repositories.com/f/education-learning-resources/system-design-interview-preparation.md) — Offers structured technical concepts and strategies for navigating complex system design discussions.
- [Architectural Models](https://awesome-repositories.com/f/education-learning-resources/architectural-models.md) — The OSI Model is a logical and conceptual model that defines network communication used by systems open to interconnection and communication with other systems. The Open System Interconnection (OSI Model) also defines a ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Disaster Recovery Strategies](https://awesome-repositories.com/f/education-learning-resources/disaster-recovery-strategies.md) — Outlines various architectural strategies for disaster recovery and business continuity. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [API Fundamentals](https://awesome-repositories.com/f/education-learning-resources/api-fundamentals.md) — Before we even get into API technologies, let's first understand what is an API. API stands for Application Programming Interface. It is a set of definitions and protocols for building and integrating application softwar ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Authorization Standards](https://awesome-repositories.com/f/education-learning-resources/authorization-standards.md) — ## OAuth 2.0 OAuth 2.0, which stands for Open Authorization, is a standard designed to provide consented access to resources on behalf of the user, without ever sharing the user's credentials. OAuth 2.0 is an authorizati ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Caching Concepts](https://awesome-repositories.com/f/education-learning-resources/caching-concepts.md) — ### Cache hit A cache hit describes the situation where content is successfully served from the cache. The tags are searched in the memory rapidly, and when the data is found and read, it's considered a cache hit. **Cold ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Caching Strategies](https://awesome-repositories.com/f/education-learning-resources/caching-strategies.md) — Explains the fundamental principles and hierarchical levels of caching as part of a broader distributed systems curriculum. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Content Delivery Network Guides](https://awesome-repositories.com/f/education-learning-resources/content-delivery-network-guides.md) — In a CDN, the origin server contains the original versions of the content while the edge servers are numerous and distributed across various locations around the world. To minimize the distance between the visitors and t ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Disaster Recovery Principles](https://awesome-repositories.com/f/education-learning-resources/disaster-recovery-principles.md) — Highlights the importance of disaster recovery for minimizing downtime and ensuring business continuity. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Message Queueing Patterns](https://awesome-repositories.com/f/education-learning-resources/message-queueing-patterns.md) — Messages are stored in the queue until they are processed and deleted. Each message is processed only once by a single consumer. Here's how it works: - A producer publishes a job to the queue, then notifies the user of t ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Network Protocol Tutorials](https://awesome-repositories.com/f/education-learning-resources/network-protocol-tutorials.md) — Transmission Control Protocol (TCP) is connection-oriented, meaning once a connection has been established, data can be transmitted in both directions. TCP has built-in systems to check for errors and to guarantee data w ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Networking Fundamentals](https://awesome-repositories.com/f/education-learning-resources/networking-fundamentals.md) — 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 ne ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Rate Limiting Guides](https://awesome-repositories.com/f/education-learning-resources/rate-limiting-guides.md) — Explains the architectural complexities and strategies for implementing rate limiting across distributed nodes. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Reliability Engineering Principles](https://awesome-repositories.com/f/education-learning-resources/reliability-engineering-principles.md) — Explains the importance of reliability frameworks for building user trust. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Service Discovery Principles](https://awesome-repositories.com/f/education-learning-resources/service-discovery-principles.md) — Explains why service discovery is essential for dynamic microservice environments. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Service Level Indicators](https://awesome-repositories.com/f/education-learning-resources/service-level-indicators.md) — Explains the role of service level indicators in measuring system performance and reliability. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Service Level Objectives](https://awesome-repositories.com/f/education-learning-resources/service-level-objectives.md) — Describes the process of defining service level objectives to meet reliability promises. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))

### DevOps & Infrastructure

- [Scalable Infrastructure Planning](https://awesome-repositories.com/f/devops-infrastructure/scalable-infrastructure-planning.md) — Provides guidance on planning core infrastructure components like load balancing and database sharding.
- [Service Discovery](https://awesome-repositories.com/f/devops-infrastructure/service-discovery.md) — Details service discovery patterns for managing dynamic service locations. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))

### Data & Databases

- [Data Partitioning](https://awesome-repositories.com/f/data-databases/data-partitioning.md) — Details the architectural pattern of horizontal partitioning to scale database performance. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Data Partitioning Strategies](https://awesome-repositories.com/f/data-databases/data-partitioning-strategies.md) — Explains techniques for splitting databases across machines to improve performance. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Data Replication Strategies](https://awesome-repositories.com/f/data-databases/data-replication-strategies.md) — Covers replication factors and node synchronization for high availability. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Database Scaling Strategies](https://awesome-repositories.com/f/data-databases/database-scaling-strategies.md) — Large datasets are split horizontally across multiple physical machines to improve performance and manageability of high-traffic systems.
- [Data Partitioning Techniques](https://awesome-repositories.com/f/data-databases/data-partitioning-techniques.md) — Data is partitioned across nodes using a circular hash space to minimize remapping when scaling the cluster size.
- [Multi-Master Replication](https://awesome-repositories.com/f/data-databases/multi-master-replication.md) — Details the operational benefits and coordination of master-master replication. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Partitioning Algorithms](https://awesome-repositories.com/f/data-databases/partitioning-algorithms.md) — Details strategies like hash-based partitioning for distributing data. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Primary-Replica Replication](https://awesome-repositories.com/f/data-databases/primary-replica-replication.md) — Explains the flow of data from primary nodes to read-only replicas. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Replication Strategies](https://awesome-repositories.com/f/data-databases/replication-strategies.md) — Explains the performance and consistency trade-offs inherent in different data replication models. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
- [Transaction Management](https://awesome-repositories.com/f/data-databases/transaction-management.md) — Defines the fundamental unit of work required for reliable database state changes. ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))

### Networking & Communication

- [API Gateways](https://awesome-repositories.com/f/networking-communication/api-gateways.md) — The granularity of APIs provided by microservices is often different than what a client needs. Microservices typically provide fine-grained APIs, which means that clients need to interact with multiple services. Hence, a ([source](https://cdn.jsdelivr.net/gh/karanpratapsingh/system-design@main/README.md))
