System Desing List

Ankit Kumar Rajpoot
5 min readSep 11, 2023

Data Management

  • Cache — Caches play a crucial role in system design for various reasons, primarily to improve the performance and efficiency of a system. Here are some key reasons why caches are used in system design
  • Blob/Object Storage — Blob/Object storage is an integral part of system design for a wide range of applications and use cases. Blob/Object storage is a type of data storage system that is designed to efficiently store and retrieve unstructured data, such as images, videos, documents, backups, and other large binary objects. Here are several reasons why blob/object storage is used in system design:
  • Checksum — Checksums are widely used in system design to ensure data integrity and to detect errors in data transmission or storage.
  • Data Replication — Data replication is a technique used in system design for several important reasons, primarily to enhance data availability, reliability, and performance.

Database Selection

  • RDBMS/SQL — Relational Database Management Systems (RDBMS) and Structured Query Language (SQL) are fundamental components of system design for a wide range of applications and use cases.
  • No-Sql — NoSQL (Not Only SQL) databases have gained popularity in system design for various reasons, offering advantages that make them suitable for certain use cases and scenarios.
  • Graph DB — Graph databases are used in system design for a variety of reasons, primarily because they are highly specialized and optimized for managing and querying graph data structures. Graph databases excel in scenarios where relationships and connections between data points are as important as the data itself.
  • Elasticsearch — Elasticsearch is a powerful and versatile search and analytics engine that is used in system design for a wide range of applications. Elasticsearch excels in scenarios where efficient text search, full-text search, and complex querying of structured and unstructured data are required.

Scailibility Techniques

  • Database sharding — Database sharding is a technique used in system design to horizontally partition and distribute data across multiple database instances or shards.
  • Horizontal Scaling — Horizontal scaling, also known as scaling out, is a crucial technique in system design used for various reasons to enhance the performance, capacity, and availability of applications and servicessistent Hashing — Consistent hashing is a technique used in system design for distributed systems, load balancing, caching, and data partitioning.
  • Batch Processing — Batch processing is a valuable technique in system design that involves the execution of a series of tasks or data processing jobs in bulk, rather than individually or in real-time.

Communication

  • Web Sockets — WebSocket is a communication protocol that provides full-duplex, bidirectional communication channels over a single TCP connection.

Geo-Location & Data hashing

  • Quadtree/Geohash — Quadtree and Geohash are spatial indexing techniques used in system design to efficiently organize and query geospatial data.
  • Consistent Hashing — Consistent Hashing — Consistent hashing is a technique used in system design for distributed systems, load balancing, caching, and data partitioning.

API & Microservices

  • REST APIs — Representational State Transfer (REST) APIs are widely used in system design for a variety of reasons. REST is an architectural style for designing networked applications, particularly web services, and it offers several advantages.
  • Microservices — Microservices architecture is a system design approach that involves breaking down a large and complex application into smaller, independently deployable services that communicate with each other via APIs (Application Programming Interfaces). This architectural style has gained popularity.

Modern Architecture

  • Containerization — Containerization is a system design approach that involves packaging applications and their dependencies, including libraries and configuration files, into self-contained units called containers. These containers can be easily deployed and run consistently across various environments, making containerization a valuable technology in system design
  • Serverless Architecture — Serverless architecture, often referred to as Function as a Service (FaaS), is a system design approach that offers several advantages for building and deploying applications.

Protocols & Queues

  • Message Queue — Message queues play a crucial role in system design by facilitating asynchronous communication, load balancing, fault tolerance, and scalability in distributed systems. They promote decoupling, flexibility, and reliability, making them a valuable tool for building robust and efficient applications and services.
  • Gossip Protocol — Gossip protocols are used in system design for various reasons, particularly in distributed systems, to achieve certain goals and provide specific benefits.
  • API Gateway — An API Gateway is a critical component in system design, especially in microservices and distributed architectures. It serves as a central entry point for managing and routing requests to various microservices and backend services.
  • Heartbeat — A“heartbeat” is a concept used to monitor the health and availability of components, services, or nodes within a distributed system. It involves sending regular, periodic signals or messages (often called heartbeats) between different parts of the system to confirm that they are functioning correctly

Networking

  • CDN — A Content Delivery Network (CDN) is a critical component in system design, especially for web-based applications and services that need to deliver content efficiently and reliably to users across the globe.
  • Load Balancer — Load balancers are a fundamental component in system design, particularly in distributed systems and network architectures. They play a critical role in optimizing the distribution of incoming network traffic across multiple servers, ensuring that the system operates efficiently, provides high availability, and maintains scalability.
  • Rate Limiter — Rate limiters are an important component in system design, particularly for web-based applications and APIs, to manage and control incoming requests or traffic from clients. Rate limiters help prevent abuse, ensure fair usage of resources, protect servers from overloads, and maintain the quality of service.
  • Redundancy — Redundancy is a critical concept in system design, and it involves the duplication of critical components or systems to ensure system availability, fault tolerance, and reliability. Redundancy is employed to mitigate the impact of hardware failures, software glitches, and other unforeseen issues that can disrupt a system’s normal operation.

That’s it for this time! I hope you enjoyed this post. As always, I welcome questions, notes, comments and requests for posts on topics you’d like to read. See you next time! Happy Coding !!!!!

--

--

Ankit Kumar Rajpoot

I’m a MERN Developer. ( Redux | AWS | Python ) I enjoy taking on new things, building skills, and sharing what I’ve learned.