All content related to system-design-concepts

Configurations In System Engineering

The ability to adjust and customize hardware or software is referred to as “Configurability.” More precisely, it refers to selecting programmable parameters that allow the program to function according to the user’s preferences, putting together desired components for a custom system, and selecting settings in the system’s user-programmable sections.

EnjoyAlgorithms

Publisher-Subscriber Pattern

The Publish/Subscribe pattern, sometimes known as pub/sub, is an architectural design pattern that enables publishers and subscribers to communicate with one another. In this arrangement, the publisher and subscriber rely on a message broker to send messages from the publisher to the subscribers. Messages (events) are sent out by the host (publisher) to a channel, which subscribers can join.

EnjoyAlgorithms

MapReduce In System Design

MapReduce is a batch processing programming paradigm that enables massive scalability across a large number of servers in a Hadoop cluster. It was published in 2004, was called “the algorithm that makes Google so massively scalable.” MapReduce is a relatively low-level programming model compared to the parallel processing systems developed for data warehouses many years previously.

EnjoyAlgorithms

Leader Election in Distributed Systems

The objective of leader election is to provide one item (a process, host, thread, object, or human) specific powers in a distributed system. These specific abilities could include the capacity to delegate tasks, the ability to edit data, or even the responsibility for managing all system requests.

EnjoyAlgorithms

How to Choose the Right Database?

Databases are a critical component of the world’s most complex technology systems, and how they are used has a significant impact on their performance, scalability, and consistency. Because this is an essential topic with many moving components, hence in this article, we’ve outlined the most crucial database topics that you’ll need to know during a system design interview.

EnjoyAlgorithms

Throttling and Rate Limiting

At its most basic level, a rate limiter restricts the number of events a certain object (person, device, IP, etc.) can do in a given time range. In general, a rate limiter caps how many requests a sender can issue in a specific time window. Rate Limiter then blocks requests once the cap is reached.

EnjoyAlgorithms

Peer to Peer Networks in System Design

In the common client-server architecture, multiple clients will communicate with a central server. A peer-to-peer (P2P) architecture consists of a decentralized network of peers, which are nodes that can act as both clients and servers. Without a central server's need, P2P networks distribute workload among peers, and all peers contribute and consume resources within the network.

EnjoyAlgorithms

Storage and Redundancy

A storage device is a piece of hardware used mostly for data storage. Storage is a mechanism that allows, either temporarily or permanently, a computer to preserve data. A fundamental component of most digital devices is storage devices such as flash drives and hard drives. They allow users to store all kinds of information, such as videos, documents, photographs, and raw data.

EnjoyAlgorithms

Long Polling in System Design

Polling is a technique that allows the servers to push information to a client. Long polling is a version of traditional polling that allows the server to send data to a client whenever available. It involves the Client requesting information from the server in the same way that standard polling does, but with the caveat that the server may not respond right away. A complete answer is delivered to the Client once the data is accessible.

EnjoyAlgorithms

Workflow in a Distributed System

Ever wondered how does 1-click-buy works on Amazon? How does an e-commerce platform show the status of your order after the order is placed? What happens when you cancel your order right after you place an order, or after your item is shipped, or even delivered? How is all the activity related to an order tied to just one order Id? This blog will try to tackle such system design challenges and lay out key insights on designing a workflow system.

EnjoyAlgorithms

Database Indexing In System Design

Database indexing is an excellent way to improve database performance and acts as a handy guide in increasing the performance of the database. An index is nothing more than a reference to data in a table. We should think of a database index in the same way we think of a book index. The aim of creating an index is to make reading and searching queries easier.

EnjoyAlgorithms

Load Balancers in System Design

A load balancer is a software or a hardware device that sits between clients and a set of servers and basically has a balancing workload across resources. Not only do load balancers save our server or multiple servers from overloading, but it also increases the throughput of your system.

EnjoyAlgorithms

Throughput - System Design Concept

Throughput is defined as the total number of items processed per unit of time, or we can say Throughput is the rate at which something is produced. It is generally represented as the number of bits transmitted per second or the number of HTTP operations per day.

EnjoyAlgorithms

CAP Theorem in System Design

CAP Theorem is one of the essential concepts necessary for designing networked shared data systems. CAP Theorem is a concept that allows a distributed database system to have any of only two of the three functionalities: Consistency, Availability, and Partition Tolerance. CAP Theorem is an essential concept that helps make trade-offs between the three available functionalities, based on our unique use case that we need for our system.

EnjoyAlgorithms

SQL vs NoSQL

Have you ever been in a dilemma while choosing the most appropriate storage type for your application? What could be the most viable storage type that could meet the business expectations and offers efficient services? The primary factor behind selecting the database is the data structure and the kind of operations associated with it. But before diving deep into selecting a suitable database, it is necessary to have a clear understanding of the structure and the functionalities of each kind of database. Databases are broadly categorized into Relational (SQL) and Non-Relational (NoSQL) databases.

EnjoyAlgorithms

Availability: System Design Concept

Availability is an important concept that is involved in most sought-after questions in a system design interview. Many of us may have experienced moments where we could not access certain applications due to an outage or unavailability. Let’s explore this blog to get an answer.

EnjoyAlgorithms

Server Sent Events - System Design Concept

Whenever we build any Web Application dealing with real-time data, we need to consider delivering data to the Client. While building such a Web Application type, one needs to consider the best delivery mechanism, right! We are presenting a series of three concept blogs focusing on data transfer between clients and servers. In this blog, we are focusing on Server-Sent Events, and here, we will give you a complete insight into its internal working and the underlying features.

EnjoyAlgorithms

Proxy Server

In computer networking, a proxy is a server that acts as an intermediary between a client and another server. In this blog, we discussed: What is a proxy server? How do proxy serves work? What are proxies used for? What are forward and reverse proxies?

EnjoyAlgorithms

Consistent Hashing in System Design

Consistent Hashing is the most widely used concept in a distributed system as it offers considerable flexibility in the scaling of the application. This blog discusses the key concepts and approaches which comes in handy while scaling out the distributed storage system. Consistent Hashing is beneficial and frequently applied to solving various system related challenges and is quite helpful in System Design Interviews.

EnjoyAlgorithms

Latency in System Design

Latency is an essential concept in System Design that determines how fast the data transfers from the client to the server and back to the client. Latency is a direct measure of performance, i.e., the lower the Latency, the better the performance. In this blog, we'll focus on the conceptual understanding of Latency, how it impacts the system's performance, and what measures should be adopted to improve the Latency of the system.

EnjoyAlgorithms

Distributed System in System Design

Nowadays, almost every large scale application is based on Distributed Computing. Technological expansion and the increasing use of highly scalable systems have paved the way for Distributed Computing, and hence Distributed Systems have became the necessity. It is the need of the hour to have the full grasp of the Distributed System to achieve fault-tolerant, scalable, and latency-free service. This blog will introduce you to the fundamentals of Distributed Systems, their functioning, and how they are applicable in real-world systems using some of the exciting examples. So, let us dive in and learn how to deal with trade-offs while designing our System.

EnjoyAlgorithms

Data Partitioning - System Design Concept

Data Partitioning is a partitioning technique of dividing the data into independent components. It is a way of partitioning data into smaller pieces so that data can be easily accessed and becomes manageable at a much finer level. Database partitioning is the backbone of modern distributed database management systems. Data Partitioning is very useful in improving the scalability and performance of the system. It enhances the manageability and availability of the service and effectively reduces the cost of storing a large amount of data.

EnjoyAlgorithms

Network Protocols - System Design Concept

A network can be defined as a group of computers and other devices connected in some ways to exchange data. It is one of the critical system design concepts to learn.

EnjoyAlgorithms

Caching - System Design Concept

In this blog, we will learn about Caching, an important fundamental concept in a system's design. Have you ever experienced that when you open a website the first time, it takes more time than usual, but when you open the same website again, it takes no time to load? Do you know why this happens? Let's find out!

EnjoyAlgorithms

Our Weekly Newsletter

Subscribe to get free weekly content on data structure and algorithms, machine learning, system design, oops and math.