System Design defines the architecture of a system’s interfaces, components, and data. System Design aims to create scalable and high-performing systems using the power of distributed computing, parallel computing, and computer networks.
The main goal of a system designer is to create a reliable, maintainable, scalable, and accurate system.
Modern system design is focused on separating different components of a system into basic building blocks. The idea is to use these building blocks to build complex systems quickly. These basic building blocks are used in almost every design in one way or another.
The first step is to understand these building blocks and how they work. Next, we can assemble any of these blocks to build our system. This way, we are not redoing or recreating anything. Instead, we’re putting together different pieces to complete the puzzle. There are sixteen basic building blocks that can be used to build complex systems.
In the traditional approach, every component of the system was built from scratch and was tailor-made for the system. However, this approach required extensive time and development efforts. This gave way to the concept of assembling already available building blocks to develop a system.
We have identified the following building blocks:
Domain name system: This is used to design hierarchical and distributed naming systems for computers.
Load balancers: This is used to fairly distribute incoming requests among the available servers.
Databases: This is used to store, retrieve, modify, and delete data.
Key-value store: This is a nonrelational database that stores data in the form of a key-value pair.
Content delivery network: This is used to deliver content to end users with minimal latency.
Sequencer: This is used to generate unique IDs.
Service monitoring: This is used to analyze the system and alert relevant stakeholders if any problem occurs.
Distributed caching: This is a caching system where multiple cache servers coordinate to store frequently accessed data.
Distributed messaging queue: This is an intermediate component between the interacting entities known as producers and consumers. It is used for communication in a distributed system.
Publish-subscribe system: This is an asynchronous service-to-service communication method used in microservices architectures.
Rate limiter: This is used to put a limit on the number of requests a service fulfills.
Blob store: This building block focuses on the storage solutions for unstructured data.
Distributed search: This is a system that returns the relevant content for a search query in a few seconds or less.
Distributed logging: This is used to allow services in a distributed system to log their events.
Distributed task scheduling: This intelligently allocates resources to tasks to meet task-level and system-level goals.
Sharded counters: This is used to deal with millions of concurrent read/write requests.
Many of these building blocks are available on multiple cloud platforms, such as Amazon Web Services (AWS) and Microsoft Azure, which can be used to build complex systems.
Free Resources