Skip to content

Latest commit

 

History

History
385 lines (372 loc) · 40.8 KB

system-design-checklist.md

File metadata and controls

385 lines (372 loc) · 40.8 KB

System Design Checklist

System design is the process of creating the architecture, modules, components, interfaces, and data for a system. System design is the core concept behind the design of any distributed systems. These concepts are now repeatedly being asked in several interviews. This checklist covers all the important concepts with which you can ace your interviews!

Section 0: Different Components of System Design

  1. Software development lifecycles
    Software Development Lifecycles (SDLC) refer to methodologies or frameworks that guide the process of designing, developing, testing, deploying, and maintaining software systems.
  2. Idea behind load balancer
    Load balancing is the process of distributing a set of tasks over a set of resources. Different types of load balancing algorithms are used to distribute incoming network traffic across multiple servers, ensuring optimal resource utilization and improved performance. Explore more topics: Memento, Command and Iterator Design Pattern. Leaderless Replication.
  3. Different types of databases
    In the world of system design, databases play a crucial role in storing and managing data efficiently. Understanding the different types of databases is essential for designing scalable and robust systems.
  4. Key-value store
    A Key-Value Store is a type of NoSQL database that stores data as a collection of key-value pairs. Each piece of data is associated with a unique key, which serves as an identifier for retrieving or updating the data.
  5. Distributed operating system
    A distributed operating system, is an advanced software architecture that extends the capabilities of traditional operating systems to manage and coordinate multiple interconnected computers or nodes within a network.
  6. Distributed file system
    A Distributed File System is a file storage technology that spans multiple physical or virtual servers, allowing them to work together as a single, unified file system.

Section 1: Load Balancing and Scaling

  1. Types of load balancing algorithms
    Load balancing algorithms are crucial for distributing incoming network traffic across multiple servers, thats why
    rate limiting systems uses different algos.
  2. Idea of vertical and horizontal scaling
    These types of scaling involves increasing the resources of a single server or node, such as CPU, memory, or storage capacity, to handle greater workloads. It is typically limited by the hardware's capacity and can result in higher costs.
  3. Idea of layer 4 and layer 7 load balancing
    Layer 4 and Layer 7: Layer 4 load balancing focuses on distributing traffic based on network-level attributes, while Layer 7 load balancing takes application-specific factors into account for more intelligent routing decisions.
  4. Backpressure and exponential back-off to handle overload systems
    Backpressure and exponential back-off are strategies used to manage and mitigate the effects of system overloads, ensuring efficient resource utilization and preventing system collapse.

Section 2: Databases and Data Storage

  1. Choose the right type of NoSQL database
    When selecting a NoSQL database, several factors come into play, including scalability, data model, consistency requirements, and query patterns.
  2. In-memory database
    An in-memory database stores data in the main memory (RAM) for faster access and lower latency compared to traditional disk-based databases.
  3. Different caching strategies in system design
    Different caching strategies in system design are techniques used to improve the performance and responsiveness of a pplications by storing frequently accessed data in a faster retrieval layer, like memory, for quicker access. These strategies help reduce the load on backend databases and minimize latency.
  4. Types of caching in web application
    This is an important topic as caching plays a vital role in improving the performance and reducing the load on backend systems. In web applications, different types of caching techniques are employed.
  5. Database replication
    Database replication is the process of creating and maintaining duplicate copies of a database on multiple servers. It ensures data availability, fault tolerance, and load distribution.
  6. Data partitioning in system design
    Data partitioning in system design is the practice of dividing a large dataset into smaller, more manageable segments to improve performance, scalability, and availability. Each partition is typically stored on separate servers or nodes, allowing for parallel processing and reducing the risk of data bottlenecks.
  7. Concept of reverse proxies
    A reverse proxy is a server that acts as an intermediary between clients and backend servers, forwarding client requests to appropriate backend servers and returning the response to the clients. Unlike a traditional proxy, which protects clients from exposure to the internet, a reverse proxy shields backend servers from direct client requests.
  8. Types of client-server communication
    Client-server communication refers to the exchange of data and requests between client devices (such as web browsers or applications) and remote server systems.
  9. ER diagram/entity relationship model
    An Entity-Relationship (ER) Diagram , also known as an Entity-Relationship Model, is a graphical representation used to design and illustrate the logical structure of a database. It depicts the relationships among various entities (objects, concepts, or things) within a database system.
  10. Federation: functional partitioning of database + fdbs
    Federation, in the context of system design refers to the practice of breaking down a large, monolithic database into smaller, more manageable functional units. This approach is known as Functional Database Sharding (FDBS). Each functional unit, or shard, holds a subset of the data and is responsible for its own operations. This enhances scalability and performance by distributing the workload across multiple database instances.
  11. Different types of file system
    Different types of file systems refer to various methods and structures used to manage and organize data on storage devices like hard drives or solid-state drives.
  12. Redundant Arrays of Independent Disks
    RAID is a technology that combines multiple physical hard drives into a single logical unit to improve data performance, protection, and availability.
  13. Wide column store
    Wide Column Store is a type of NoSQL database that stores data in tables with rows and columns, similar to relational databases.
  14. Apache HBase in system design
    Apache HBase is a distributed, scalable, and consistent NoSQL database that is designed to handle massive amounts of data.
  15. Google Cloud BigQuery in system design
    Google Cloud BigQuery is a fully managed, serverless data warehouse that offers high-performance querying and analytics capabilities.
  16. Memcached in system design
    Memcached is an open-source, high-performance, distributed memory caching system designed to accelerate dynamic web applications by alleviating database load.
  17. Graph database in system in system design
    A graph database is a specialized type of database designed to store and manage data as nodes, edges, and properties, resembling a graph structure. In system design, using a graph database can be advantageous for scenarios where relationships between data points are crucial.
  18. PostgreSQL in system design
    PostgreSQL, often referred to as "Postgres", is a powerful open-source relational database management system (RDBMS) that plays a significant role in system design.
  19. Object-oriented database
    An Object-Oriented Database is a type of database that combines the principles of object-oriented programming with database management systems.
  20. Sharding
    Sharding is a database design technique used to horizontally partition large datasets across multiple physical or logical databases.
  21. ACID and base model
    The ACID and BASE models are two different approaches to ensuring consistency and reliability in database systems.
  22. Master-slave and master-master replication in databases
    Both replication methods offer benefits in terms of scalability, fault tolerance, and performance enhancement, but they also bring challenges like data consistency, conflict resolution, and configuration management.
  23. Time Series Database
    A time series database is a specialized type of database designed to efficiently store and manage time-stamped data points, often generated at regular intervals. It is optimized for querying and analyzing temporal data, such as sensor readings, stock prices, website analytics, and more.
  24. 7Rs of database migration
    The7 R's of Database Migration, are a set of principles to guide the process of migrating a database from one environment to another. These principles ensure a smooth and successful transition while minimizing risks and ensuring data integrity.
  25. Database mirroring and log shipping
    Database mirroring is a high-availability solution in SQL Server that involves maintaining two copies of a database, the principal and the mirror, on separate server instances. The primary database (principal) is constantly mirrored to the secondary database (mirror) in real-time.
  26. Database clustering
    Database Clustering is a technique used to enhance the availability, performance, and fault tolerance of databases by distributing the data across multiple servers. It involves setting up a group of interconnected database servers that work together as a single system.
  27. Different database migration strategies
    Database migration strategies are essential for smoothly transitioning from one database version, schema, or platform to another without disrupting the application's functionality.
  28. File systems in database
    A file system in a database refers to the method of managing and storing data within a database system. It's an essential component that handles how data is organized, stored, retrieved, and managed on physical storage devices.
  29. Always on availability
    Always On availability typically refers to a high-availability feature in database management systems. It ensures that the database remains accessible and operational without interruption, even during maintenance or hardware failures.

Section 3: Distributed Systems

  1. Idea of zero copy
    The "Idea of Zero Copy" is a technique used in computer systems to optimize data transfer between different parts of a system, especially in cases involving I/O operations.
  2. Sidecar design pattern in system design
    The
    Sidecar Design Pattern is an architectural approach in system design where functionality that's not core to the main application is outsourced into a separate service, often referred to as a "sidecar."
  3. Cloud design patterns
    Cloud design patterns are architectural solutions that address common challenges when designing and deploying applications in cloud environments.
  4. Idea of consistency patterns in system design
    Consistency Patterns refer to strategies that manage data consistency across distributed systems.
  5. Consistent hashing
    Consistent Hashing is a technique used in distributed systems to evenly distribute data across multiple nodes while maintaining a level of stability when nodes are added or removed from the system. In this approach, each data item is associated with a hash value, and each node in the system is also mapped to a hash value range.
  6. Stateless and stateful architecture
    Stateless and stateful architectures: Stateless architectures are generally easier to scale and are more suitable for distributed systems, while stateful architectures are used when maintaining context and personalized experiences are crucial.
  7. Message queues in system design
    Message queues are essential components in system design that facilitate asynchronous communication and decoupling between different parts of a distributed application. They are used to manage the flow of messages between various services, allowing these services to communicate without needing to be directly connected.
  8. Noisy neighbor+throttling pattern
    The Noisy Neighbor and Throttling Pattern, is a design approach used in distributed systems to manage resource allocation and prevent a single component from consuming excessive resources, thereby affecting the overall system performance.
  9. Partition tolerance after 2000s
    Partition tolerance, in the context of distributed systems, refers to the system's ability to continue functioning even when communication between nodes (servers) is unreliable or disrupted. It's one of the three aspects of the CAP theorem, along with Consistency and Availability.

Section 4: Data Formats

  1. Basics of YAML
    YAML is a human-readable data serialization format. It's often used for configuration files and data exchange between languages with different data structures.
  2. Basics of Rich Text Format (RTF)
    Rich Text Format (RTF) is a document file format that allows for the formatting and styling of text within a document. Unlike plain text files, RTF files can include various text attributes such as font styles, sizes, colors, alignments, and more.
  3. Basics of XML
    XML (eXtensible Markup Language) is a widely used markup language designed to store and transport data in a human-readable and machine-readable format.
  4. Portable Network Graphics (PNG) file format
    Portable Network Graphics (PNG) is a popular image file format designed to store and display raster graphics, such as images and icons.

Section 5: Testing, Tools and Strategies

  1. OpenGenus Visual Documentation
    OpenGenus Visual Documentation is a tool designed to enhance understanding and learning of complex algorithms and data structures through visual representation.
  2. Airbnb's massive deployment technique: 125000+ times a year
    Airbnb, a prominent online marketplace for lodging and travel experiences, employs a remarkable deployment strategy that involves an exceptionally high frequency of software deployments. With a staggering rate of over 125,000 deployments annually, Airbnb's approach emphasizes rapid iteration and continuous delivery.
  3. Live streaming to 25.3M concurrent viewers: deal with traffic spike
    Live streaming to a massive audience demands a robust infrastructure capable of handling a sudden influx of viewers during significant events. To manage the surge in traffic, content delivery networks (CDNs) are employed.
  4. How server outrage do not impact Netflix
    Netflix's resilience against server outages is achieved through a combination of strategies. One key approach is the concept of microservices architecture, where the platform's functionalities are divided into smaller, independent services. These services are distributed across various servers and data centers.
  5. Why companies have high deployment rate
    Companies aim for high deployment rates primarily to achieve faster development cycles, continuous improvement, and enhanced user experiences.
  6. Apache Kafka in system design
    Apache Kafka
    is an open-source distributed event streaming platform used for building real-time data pipelines and streaming applications.
  7. MapReduce in system design
    MapReduce , is a programming model and processing framework used to process and generate large-scale data sets in parallel across a distributed cluster of computers. It was popularized by Google and has become a cornerstone technology for processing big data.
  8. Dapper in system design
    Dapper is an Object-Relational Mapping (ORM) library developed by Stack Overflow. It's designed to simplify data access in applications by mapping database query results to strongly-typed objects.
  9. what is Pub/Sub messaging
    Pub/Sub (Publish/Subscribe) messaging is a communication pattern in which senders (publishers) and receivers (subscribers) are decoupled. Publishers distribute messages to topics, and subscribers receive messages from those topics based on their interests.
  10. Apache ZooKeeper in system design
    Apache ZooKeeper is a distributed coordination service that plays a crucial role in system design, especially in distributed and highly available applications. It provides a centralized platform for managing configuration, synchronization, and group services.
  11. System Design of CRM Software
    CRM software is designed to manage an organization's interactions and relationships with its customers.
  12. Probnik: Netflix's innovation testing framework
    Probnik, is an innovative testing framework developed by Netflix to simulate real-world failure scenarios and assess system resiliency. It's designed to push systems to their limits and identify potential weaknesses before they impact user experiences.
  13. How Spotify went down after an outage
    Spotify experienced an outage due to an unexpected combination of events. The incident occurred due to a synchronization issue within the infrastructure that led to a cascading failure. The system was designed to maintain high availability through redundancy, but a software bug caused a disruption in the communication between nodes.
  14. How Uber got hacked
    Uber experienced a data breach that exposed the personal information of around 57 million users and 600,000 drivers. The breach was not immediately disclosed to the affected individuals or regulatory authorities, which led to significant controversy.
  15. Choking algorithm in BitTorrent
    BitTorrent is a peer-to-peer (P2P) file-sharing protocol that facilitates the distribution of large files across the internet. Unlike traditional client-server models, where a central server serves files to multiple clients, BitTorrent employs a decentralized approach where users collectively share and distribute files.
  16. Long polling fault tolerance in system design
    Long Polling is a communication technique used in web development to achieve near real-time updates without the need for constant requests from the client to the server.

Section 6: Design Principles and Patterns

  1. Liskov substitution principle
    The Liskov Substitution Principle (LSP) is a fundamental principle in object-oriented programming that emphasizes the relationship between a base class and its derived classes.
  2. Open-closed principle
    The Open-Closed Principle (OCP), is one of the SOLID principles of object-oriented programming design. It states that software entities (such as classes, modules, functions) should be open for extension but closed for modification.
  3. Dependency inversion principle
    The Dependency Inversion Principle (DIP) is one of the SOLID principles of object-oriented programming and design. It suggests that high-level modules should not depend on low-level modules, but both should depend on abstractions.
  4. Cache stampede
    Cache stampede, also known as "dog-piling" or "thundering herd," is a phenomenon that occurs in caching systems when a cache entry expires, and multiple requests for the same resource simultaneously trigger cache misses.
  5. How to design a System?
    Designing a system , whether it's a software application, a network infrastructure, or any other complex solution, requires a systematic approach.

Section 7: System Design of Standard Platforms

  1. System design of meeting scheduler
    The System Design of a Meeting Scheduler involves creating a digital platform that efficiently manages scheduling and coordinating meetings among multiple participants. This system simplifies the process of selecting suitable meeting times while considering participants' availability and preferences.
  2. System design of file uploading service
    System design of file uploading service involves designing a scalable and reliable system to handle file uploads. Load balancing, caching and data partitioning are important factors of this topic.
  3. How are email systems designed?
    Designing email systems involves creating a complex infrastructure that enables the sending, receiving, and storage of electronic messages. It typically comprises multiple components, such as mail servers, protocols like SMTP and IMAP, spam filters, and user interfaces.
  4. System design of a URL shortner
    System design of a URL shortener is a process that involves designing a service to shorten long URLs while maintaining their accessibility and redirect functionality.
  5. System design of elevator system
    Designing an elevator system involves creating an efficient and safe mechanism for vertical transportation within a building. Key considerations include optimizing passenger wait times, elevator movement, and building energy efficiency.
  6. System design of movie ticket booking system
    TheSystem Design of a Movie Ticket Booking System involves creating a robust and user-friendly platform that enables users to search for movies, view showtimes, select seats, and purchase tickets online.
  7. System design of car rental system
    Thesystem design of a car rental system involves creating an architecture that efficiently handles the process of renting vehicles to customers.
  8. System design of bank management system
    The system design of a Bank Management System encompasses creating a digital framework for effectively managing various banking operations and customer interactions.
  9. System design of a firewall
    A firewall acts as a security barrier between a trusted internal network and an untrusted external network, such as the internet.
  10. System Design of Hotel Management System
    A hotel management system is a software application designed to streamline various operations in a hotel, from reservation and check-in to check-out and payment processing.
  11. Train Reservation system design
    The system design of a train reservation system involves creating a robust and user-friendly platform to facilitate booking train tickets.
  12. System Design for Parking lot
    The System Design of a Meeting Scheduler involves creating a digital platform that efficiently manages scheduling and coordinating meetings among multiple participants. This system simplifies the process of selecting suitable meeting times while considering participants' availability and preferences.

Section 8: System Design of Popular Platforms

  1. System design of Google Search
    Google Search is a complex and highly efficient system designed to quickly retrieve relevant information from an immense index of web pages. The architecture involves multiple components working together, learn about them through the article.
  2. System design of pastebin
    Pastebin is a web application that allows users to store and share snippets of text, code, or other content with a unique URL.
  3. System design of YouTube
    YouTube's architecture handles massive user-generated content and high traffic load.
  4. System design of Google Maps
    Google Maps is a widely used online mapping service that provides users with detailed geographical information, navigation assistance, and location-based services.
  5. System design of Amazon
    Amazon is the largest e-commerce platform in the world, it provides variety of services to its vast users. Some topics to explore: System Design of Amazon Hub Locker Service, Eager Loading and Over-Eager Loading.
  6. System design of GitHub
    GitHub is a widely used platform for hosting and collaborating on software development projects. Some topics to explore are: Memory Pool with C++ Implementation.
  7. System design of Spotify
    Spotify's system design is a remarkable example of how to handle the complexities of streaming music to millions of users globally.
  8. System design of Microsoft Teams
    Microsoft Teams is a collaboration platform that offers chat, video meetings, file storage, and application integration. Here are a few topics to explore: Always On availability, System Design of Movie Ticket Booking System, Thundering Herd Problem.
  9. System design of WhatsApp
    WhatsApp is a popular messaging application that allows users to send text messages, make voice and video calls, and share multimedia content. The system design of WhatsApp involves a combination of client-server architecture, real-time communication, and data synchronization to ensure a seamless and reliable messaging experience. Some topics to explore: Who uses Apache Kafka and why?,
    Long Polling.
  10. System design of Uber
    Uber's system design revolves around connecting riders with drivers in real-time through a mobile app. Some topics to explore: System Design of StackOverflow, Top K Heavy Hitters System Design, Payment Gateway System Design.
  11. BitTorrent architecture
    BitTorrent is a peer-to-peer (P2P) file sharing protocol that revolutionized the distribution of large files over the internet. Its
    architecture enables efficient, decentralized sharing.
  12. System design of Instagram
    Instagram , a popular photo and video sharing social platform, has a complex system design to handle its massive user base and dynamic content.
  13. System design of Snapchat
    Snapchat, a multimedia messaging app, requires a complex system design to support its unique features such as disappearing messages and multimedia sharing.
  14. System design of Facebook Messenger
    Facebook Messenger is a real-time messaging platform with millions of users worldwide. Its system design encompasses various components to ensure seamless communication.
  15. System design of Airbnb
    The system design of Airbnb involves creating a robust and scalable platform that connects hosts with travelers seeking accommodations.
  16. System design of Amazon Hub Locker Service
    Amazon Hub Locker Service is a delivery solution that offers customers an alternative way to receive their orders. It involves a network of self-service kiosks strategically placed in public locations, such as grocery stores or convenience stores.

Section 9: Containerization and Orchestration

  1. Infrastructure as a service
    Infrastructure as a Service (IaaS) is a cloud computing model that provides virtualized computing resources over the internet.
  2. Idea of virtualization
    Virtualization is a fundamental concept in system design that involves creating virtual instances of computing resources, such as servers, storage, and networks, to effectively utilize physical hardware. By abstracting physical resources, virtualization allows multiple virtual machines (VMs) or virtual environments to run on a single physical machine, enhancing resource utilization, flexibility, and cost-efficiency.
  3. Application layer with Microservices and Service Discovery
    The application layer in microservices architecture refers to the topmost layer where individual microservices communicate with each other.
  4. Containerization
    Containerization is a technology that enables the packaging and isolation of applications and their dependencies into a standardized unit called a "container." Containers provide a consistent and reproducible environment for applications to run across different computing environments, such as development, testing, and production.
  5. How to run container images safely?
    Running container images safely involves several best practices to ensure the security and stability of your applications within containerized environments
  6. AWS Redshift in system design
    Amazon Redshift is a fully managed data warehousing service provided by Amazon Web Services (AWS). It's designed to handle large-scale data analytics and complex querying. Redshift is optimized for online analytical processing (OLAP) workloads, making it a suitable choice for data warehousing and business intelligence applications.

Section 10: Temp (Confusion)

  1. RPC vs. REST
    The choice between RPC and REST depends on the project's requirements. If you need efficient communication between services with strict performance needs, RPC might be a good fit. On the other hand, if you want a more standardized, scalable, and flexible approach to building APIs, REST is often a preferred choice due to its compatibility with HTTP and its ability to handle various client types.
  2. Context switching in OS
    Context switching, is a fundamental concept in operating systems that enables multitasking, where multiple processes or threads share a single CPU core. It refers to the process of saving and restoring the state of a process or thread so that the CPU can seamlessly switch from one task to another.
  3. Fault Tolerance in System Design
    Fault tolerance in system design refers to the system's ability to continue functioning, albeit with reduced performance, even when certain components or parts of the system fail.
  4. The lock convoy problem in OS
    The"lock convoy problem" in operating systems refers to a performance issue that arises in multi-threaded applications when multiple threads compete for a single resource, such as a shared lock, in a synchronized manner. This competition can lead to inefficient resource utilization and reduced overall system performance.

Generated by OpenGenus. Updated on 2023-11-27