![]() |
VOOZH | about |
System Design involves looking at the system's requirements, determining its assumptions and limitations, and defining its high-level structure and components. The primary elements of system design, including databases, load balancers, and messaging systems, will be discussed.
👁 Components of System DesignIncoming requests or workloads are divided across several distinct resources or servers using a load balancer, a component of system design. When a system has many servers and has to divide requests evenly among them, or when a system receives a large number of requests and wants to split them up across multiple servers to prevent overloading any one of them, this can be useful.
Some common types of load balancers include:
A technique for temporarily storing frequently requested data that speeds up its retrieval when needed again called caching. The main database or data source is less burdened when caching is included in system architecture, which enhances performance and efficiency.
Here’s how caching works and why it’s beneficial:
A Content Delivery Network (CDN) is a network of servers spread across different regions that enables faster delivery of content to users, such as webpages, movies, and photos. A CDN is utilized in most system designs to increase the speed and dependability of content delivery to consumers, particularly when they are dispersed across many geographical locations.
when a user requests content (like a video or an image), instead of retrieving it from the main server, the request is handled by a nearby CDN server, which has a cached copy of the content. This reduces the distance the data has to travel, making it load faster for the user.
An API Gateway is like a central doorway or "traffic controller" for requests coming into a system. In system design, it acts as a single entry point for clients (such as apps or websites) to access multiple backend services in an organized and secure way.
Let's see how it works:
One kind of NoSQL database that is meant for storing data as a collection of key-value pairs is called a key-value store. Every piece of data is kept in a key-value store under a distinct key, and the data itself serves as the value. Since key-value stores allow for quick access to data by key, they are typically used to store data that is accessed frequently.
Blob storage and database systems are two different types of storage systems that can be used to store and manage data.
Large volumes of unstructured data, including documents, photos, videos, and audio files, can be stored in blob storage, sometimes referred to as object storage. In general, blob storage systems are very scalable and capable of managing several requests at once. They are widely used to store frequently accessible material, such user-generated content or media files.
On the other hand, database systems are made to hold structured data that has been arranged in a particular manner. RDBMSs, NoSQL databases, and in-memory databases are among the several kinds of database systems. Database systems are typically used to store data that needs to be queried and accessed in a structured way, such as customer records or financial transactions.
System design components known as rate limiters are used to restrict the rate at which a system or application responds to requests or carries out specific tasks. This can be helpful in a variety of situations, such as when a system has to guard against receiving too many requests or when a company want to stop a particular user or group of users from submitting excessive requests that can affect the system's performance.
Some common types of rate limiters include:
A monitoring system is a system design component that is used to collect, analyze, and report on various metrics and performance data related to a system or application. This can be useful in a number of different scenarios, such as when a system needs to track its own performance and availability, or when an organization needs to monitor the performance of its systems and applications to ensure that they are meeting their desired service levels.
Some common types of monitoring systems include:
A distributed system messaging queue is a system that enables the exchange of messages between different nodes in a distributed system. Messaging queues allow nodes to communicate asynchronously, decoupling the sender and receiver of a message and enabling each node to operate independently.
There are several different types of messaging queues, including:
Distributed system messaging queues can be used to enable communication between different components of a distributed system, such as microservices or distributed applications. They can also be used to decouple different parts of the system, allowing each component to operate independently and improving the system's resilience and scalability.
A distributed unique ID generator is a system that generates unique identifiers (IDs) that can be used to identify objects or entities in a distributed system. These IDs are typically used to uniquely identify items in a database or to provide a stable identifier for a resource that is accessed over the network.
There are several approaches to generating distributed unique IDs:
Distributed search refers to the practice of using multiple nodes or servers to index and search large datasets in a distributed system. Distributed search can be used to improve the performance and scalability of search operations, as it allows for parallel processing of search queries and the distribution of data across multiple nodes.
There are several approaches to implementing distributed search, including:
Distributed logging refers to the practice of collecting, storing, and analyzing log data from multiple sources in a distributed system. This can be useful for tracking the health and performance of a distributed system, as well as for debugging issues that may arise.
There are several approaches to implementing distributed logging, including:
A distributed task scheduler is a system that is responsible for scheduling and executing tasks in a distributed system. A task scheduler can be used to automate the execution of tasks at regular intervals, on a specific schedule, or in response to certain events.
There are several approaches to implementing a distributed task scheduler, including:
It is important to choose a distributed task scheduler that meets the specific requirements of the system, taking into account factors such as scalability, performance, and cost.