[go: up one dir, main page]

Open In App

What is High Level Design – Learn System Design

Last Updated : 15 Oct, 2024
Summarize
Comments
Improve
Suggest changes
Like Article
Like
Save
Share
Report
News Follow

In Developing scalable applications, proper planning, and organization play a significant role. High-level design plays an important role in this process by serving as the blueprint of the system’s architecture. It provides a comprehensive view of how components interact and function together which will further help for detailed implementation.

Understanding high-level design is very crucial for developers, architects, and project managers because it allows them to make sure that all stakeholders are aligned with the project objectives. High-level design is also known as macro-level design.

What is High Level Design

What is High-Level Design

What is High-Level Design?

High-Level Design is a initial step in development of applications where overall structure of a system is planned. High-Level design focuses mainly on how different components of the system work together without getting to know about internal coding and implementation. This helps everyone involving in the project to understand the goals and ensures good communication during development.

Components of High-Level Design

Components of High-Level Design

Components of High-Level Design

Understanding the components of high-level design is very important for creating effective systems that meets user needs and technical requirements. Below are the main components of high-level design:

  1. System Architecture: System architecture is an overview of the entire system which represents the structure and the relationships between various components. It helps to visually represent how different parts interact and function.
  2. Modules and Components: High-Level design breaks down the systems into modules or components each with specific roles and responsibilities, and has a distinct function that contributes to entire system helping in developing an efficient system.
  3. Data Flow Diagrams (DFDs): Data Flow Diagrams demonstrates the data movement within the system. They help to understand how information is processed and handled.
  4. Interface Design: This component focuses on how different modules communicate with one another. It details the application programming interfaces (APIs) and user interfaces necessary for seamless interaction between components.
  5. Technology Stack: The technology stack are various technologies and tools that will be used in the development of the system. This includes programming languages, frameworks, databases.
  6. Deployment Architecture: It includes how the system will be hosted and accessed. It includes server configurations, cloud infrastructure, and network considerations.

What is High-Level Design Document?

HLD document consists of data flows, flowcharts, and data structures to help developers in understanding and implement how the current system is being designed intentionally to function. This document is responsible for explaining the connections between system components and operations which depict the logic. The architecture design needed (for the system’s functionality and flow) for each and every module of the system as per the functional requirements.

Purpose and Characteristics of High-Level Design

The purpose of this High-Level Design (HLD) is to add the necessary detailed description to represent a suitable model. This is designed to help with operational requirements and will help to understand how the modules interact. Basically, HLD is a technical representation of functional requirements and the flow of information across components. Characteristics of High-Level Design include:

  • A diagram representing each design aspect is included in the HLD (which is based on business requirements and anticipated results).
  • Description of hardware, software interfaces, and also user interfaces.
  • The workflow of the user’s typical process is detailed, along with performance specifications.

How HLD is different from LLD

High Level Design or HLD is a general system design where we do tradeoffs between different frameworks, components, and different databases and we choose the best considering what the business needs and how the system should work, both in terms of functional and non functional aspects.

Whereas LLD(Low Level Design), translates the HLD into smaller and more specific details, It includes class diagrams, methods, data structures, and algorithms, focusing on how each part will be implemented. It is Primarily used by developers and technical teams.

Further Read: Differences between High Level Design(HLD) and Low Level Design(LLD)ely detailed peculiar and specific code chunks snippets as per patterns are there while designing LLD.  

Let us now discuss the HLD roadmap after having an adequate understanding of HLD and how it is different from LLD which is shown below as an infographic: 

How To Design Scalable High-level Design (HLD) Systems

Now in order to design any high-level system, certain terms are listed in a sequential manner so as to connect the dots in order to understand, Roadmap is very important for working professionals because these help us to get a complete binding understanding of how services in real-time are getting scaled at a high level.

How To Design Scalable High-level Design (HLD) Systems

How To Design Scalable High-level Design (HLD) Systems

1. Capacity Estimation

Capacity estimation in system design involves predicting the resources (such as processing power, memory, and bandwidth) required to meet the expected workload. It ensures that a system can handle current and future demands efficiently, helping in the proper allocation of resources and preventing performance bottlenecks.

For example:

Twitter which is recently in newsfeeds these days, here at high-level designing we need to make sure tweets of popular influencers are reaching out to millions of people so how we need to scale our system so service should not be hampered. 

We have also shown below the characteristics behavior of a server which is measured across throughput and latency within the system.

Comparison of Throughput and Latency with Concurrency : Behavior Of A Server

Comparison of Throughput and Latency with Concurrency : Behavior Of A Server

2. HTTP and HTTPS and their methods

HTTP(HyperText Transfer Protocol), is used to transfer the data over the web, which enables the communication between clients and server, that helps user to requests resources like HTML pages, messages, videos or images while HTTPS(HyperText Transfer Protocol Secure) is an extension of HTTP which adds a extra layer of security through SSL/TLS encryption. Methods of HTTP include GET, PUT and POST.

Tip: These are also important as per interview perceptive as constraint bounds in interviews in API over when to use what is very important. 

Tip: There are 2 ways to send data from server to client:

  • Using Websockets
  • Using Polling

3. Web Sockets

There are two way to send data from server to clients which are websockets and polling. In a client-server architecture, we are sending a request to server and server sends it back and so in this way communication takes place. But in designing the system biggest problem we face is whether we can implement the client-server model because we can not wait until the server responds.

  • Here Web Sockets play a crucial role that solving problems and enabling us to have real-time communication.
  • WebSocket is a full-duplex protocol as it allows the application to send and receive data at the same time.
  • They are more or less used in every system to be designed because we can not let our system wait for a response.
  • They are very useful in Real-time web applications, gaming applications, chat applications.
WebSocket-Connection

WebSocket Connection

4. Polling

Another way of sending and receiving data from a server just likely as we do we doing above in the case of web sockets Polling. There are mainly 2 types of polling:

  • In short polling, we sent the request. In short polling, the client sends a request to the server and the server immediately sends data at fixed intervals whether the data is updated or not.
  • In long polling, the server waits for the client’s request to respond and responds only and only if some new data is available or if some data is being updated.
Short polling vs long polling

Short polling vs long polling 

Tip: Long polling is preferred over short polling because lesser number of requests are sent in a system.

5. Server-Sent Events(SSE)

It is purposely built as one-way communication from servers to clients in specific design systems. SSE is a technology that helps to push real-time updates from the server to the clients over HTTP connection. SSE enables server to send data automatically as it becomes available. Example of SSE include real-time streaming.

Server-Sent Events(SSE)

Server-Sent Events(SSE)

6. Rate limiting

A rate limiter restricts the number of events that can be done in a timeframe by restricting the number of requests a sender can send in a given period of time. Here once the threshold limit is reached now further it blocks the incoming requests as can be seen below media as follows:

Rate limiting

Rate limiting

7. Resiliency

No matter how great a system we design there is always a chance of faults and failure which could be because of hardware issues or software issues(such as running low on memory) or there can be some human error. In such cases we need to provide resiliency through replication, redundancy and availability.

Note: System design interviews starts with open ended designing a specific system which later is bounded with constraints at multiple levels. In order to clear dealing with these bounds in layman language is known as resiliency via implementing common tradeoff in the system. Hence providing resiliency is very crucial in designing complex system designs and also in clearing interviews. 

8. Paging

Paging in High-Level Design (HLD) refers to the method of dividing large datasets or content into smaller, manageable pages. This approach improves user experience by allowing users to load data incrementally, reducing initial load times and enhancing performance.

Paging

Paging

9. Logging

A log file records details of events occurring in a software application. The details may consist of microservices, transactions, service actions, or anything helpful to debug the flow of an event in the system. Logging is crucial to monitor the application’s flow. This can also 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:



Similar Reads

Difference between High Level Design(HLD) and Low Level Design(LLD)
System design involves creating both a High-Level Design (HLD), which is like a roadmap showing the overall plan, and a Low-Level Design (LLD), which is a detailed guide for programmers on how to build each part. It ensures a well-organized and smoothly functioning project. High-Level Design and Low-Level Design are the two main aspects of System D
4 min read
HLD or High Level System Design of Apache Kafka Startup
Apache Kafka is a distributed data store optimized for ingesting and lower latency processing streaming data in real time. It can handle the constant inflow of data sequentially and incrementally generated by thousands of data sources. Why use Kafka in the first place? Let’s look at the problem that inspired Kafka in the first place on Linkedin. Th
7 min read
Vending Machine: High Level System Design
Vending machines which are a common thing to be seen in shopping malls or metro stations, kind of operate by themselves. It's different from other systems since it is not a distributed system used by millions of people. It is concurrently used by one person at a time and may be used by a few thousand people a day. So we won't need features like loa
5 min read
What is Low Level Design or LLD - Learn System Design
Low-Level Design (LLD) is the detailed design process in the software development process that focuses on the implementation of individual components described in the High-Level Design. It provides a blueprint for how each component in the system will function and process and it also includes UML Diagrams, data structures, and algorithms. The input
5 min read
What is the goal of High-Level Design(HLD)?
The goal of HLD is to provide a detailed overview of the system's structure, components, and interactions, setting the direction for the detailed design and implementation phases of the project. High-Level Design (HLD) is a crucial phase in the software development lifecycle, where the overall architecture and design of a system are outlined broadl
2 min read
What is High-Level Design Document?
A High-Level Design document is a technical document that outlines the overall architecture and design of a software system at a high level. It serves as a blueprint for developers, architects, and stakeholders to understand the structure, components, and interactions of the system without delving into implementation details. The High-Level Design
2 min read
Google's Search Autocomplete High-Level Design(HLD)
Google Search Autocomplete is a feature that predicts and suggests search queries as users type into the search bar. As users begin typing a query, Google's autocomplete algorithm generates a dropdown menu with suggested completions based on popular searches, user history, and other relevant factors. In this article, we'll discuss the high-level de
7 min read
Top High-Level Design(HLD) Interview Questions 2024
High-Leve­l Design (HLD) gives a big-picture vie­w. It shows the main parts of a system and how they fit toge­ther. HLD acts as a map, focusing on modularity, scalability, and smooth integration. The aim is cle­ar development dire­ction while meeting busine­ss goals and technical limits. Short sentence­s, longer explanations – HLD create­s a balanc
9 min read
How to Draw High Level Design Diagram?
System design is the process of designing the blueprint of the software system that guides the developer to how you have to build the software that meets user requirements/client requirements. System design encompasses a wide range of activities that contribute to the development of the complex system. Some of the system design's key aspects includ
13 min read
High Latency vs Low Latency | System Design
In system design, latency refers to the time it takes for data to travel from one point in the system to another and back, essentially measuring the delay or lag within a system. It's a crucial metric for evaluating the performance and responsiveness of a system, particularly in real-time applications. In this article What is high latency, low late
4 min read
What is High Availability in System Design?
High availability in system design refers to the ability of a system to remain operational and accessible for a high percentage of the time, typically 99.9% or higher. This level of availability ensures that the system is reliable and can withstand failures or interruptions without significantly impacting its operation. Why high availability is imp
3 min read
Different types of Low Level Design in System Design
Low-level design refers to the process of defining the detailed, functional design of a software system or component. It involves specifying the individual modules, data structures, algorithms, interfaces, and inputs/outputs of a system. The purpose of low-level design is to provide a clear and precise description of how the system should behave an
9 min read
Low Level Design of Tic Tac Toe | System Design
In classic games, few are as universally recognized and enjoyed as Tic Tac Toe. Despite its apparent simplicity, this game engages players of all ages in a battle of wits and strategy. In this article, we delve into the intricacies of designing a low-level structure for Tic Tac Toe that captures the essence of the game and highlights the underlying
11 min read
How to Design a Rate Limiter API | Learn System Design
A Rate Limiter API is a tool that developers can use to define rules that specify how many requests can be made in a given time period and what actions should be taken when these limits are exceeded. Rate limiting is an essential technique used in software systems to control the rate of incoming requests. It helps to prevent the overloading of serv
11 min read
Active Passive & Active Active Architecture for High Availability System
Active-Passive and Active-Active architectures stand out as two important strategies for achieving high availability. These architectures offer distinct approaches to distributing workloads, managing resources, and mitigating downtime, each tailored to address specific operational requirements and scalability demands. Important Topics for Active Pa
8 min read
Elevator System Low-Level Design (LLD)
Elevator System is one of the famous Low-Level Design(LLD) problems being asked in interviews. We are here going to discuss this problem along with its requirements, use-cases diagram, class diagram and implementation. Important Topics for Elevator System Low-Level Design (LLD) Requirements of Elevator System Low-Level Design (LLD)Use-Case Diagram
8 min read
Cab Booking System - Low-Level Design
A Cab Booking System is a service provider that allows users to book a ride from their computer or phone. Users can select the kind of cab they want, enter their pickup and destination, and request a ride. The system will then find a nearby available driver and send the driver to pick up the user. Users can also see the estimated fare and track the
9 min read
5 Tips to Crack Low-Level System Design Interviews
Cracking low-level system design interviews can be challenging, but with the right approach, you can master them. This article provides five essential tips to help you succeed. These tips will guide you through the preparation process. Learn how to break down complex problems, communicate effectively, and showcase your design skills to impress inte
6 min read
Why is it important to learn System Design?
In today’s digital world, system design has become an essential skill for software engineers and other professionals working in the tech industry. System design involves the process of designing, developing, and deploying a system that is capable of fulfilling a specific set of requirements. It is a complex process that requires a deep understandin
6 min read
Complete Reference to Databases in Designing Systems - Learn System Design
Previous Parts of this System Design Tutorial What is System DesignAnalysis of Monolithic and Distributed SystemsImportant Key Concepts and TerminologiesWhat is Scalability and How to achieve itWhat is a Database? When we store data, information, or interrelated data, in an organized manner in one place, it is known as Database. Databases are respo
14 min read
Eventual Consistency in Distributed Systems | Learn System Design
Consistency in a distributed system refers to the property that the data stored on different nodes of the system is always in agreement with each other. In other words, all nodes in the system have the same view of the data at all times. Important Topics for the Eventual Consistency in Distributed Systems What is the Importance of Data Consistency?
11 min read
Analysis of Monolithic and Distributed Systems - Learn System Design
System analysis is the process of gathering the requirements of the system prior to the designing system in order to study the design of our system better so as to decompose the components to work efficiently so that they interact better which is very crucial for our systems. System design is a systematic process involving phases such as planning,
10 min read
Important Key Concepts and Terminologies – Learn System Design
System Design is the core concept behind the design of any distributed systems. System Design is defined as a process of creating an architecture for different components, interfaces, and modules of the system and providing corresponding data helpful in implementing such elements in systems. In this article, we'll cover the standard terms and key c
9 min read
Complete Roadmap to Learn System Design for Beginners
This article is an important resource if you're new to system design and aiming for interviews at top tech companies. It breaks down system design concepts into easy-to-understand steps, starting from the basics and gradually advancing to more complex topics. By the end, you'll be equipped with the knowledge and confidence to tackle any system desi
6 min read
Design a system that counts the number of clicks on YouTube videos | System Design
Designing a Click Tracking System for YouTube Videos involves architecting a comprehensive and efficient solution to monitor and analyze user interactions with videos on the YouTube platform. Important Topics for Counting the number of Clicks on Youtube Videos System DesignRequirementsCapacity EstimationLow-Level Design (LLD)Database Design-High-Le
15+ min read
Design Restaurant Management System | System Design
In the modern restaurant industry, delivering exceptional dining experiences requires more than just good cuisine. Restaurant Management Systems have emerged as the secret ingredient for efficient operations and customer satisfaction. In this article, we are going to design a restaurant management system where users can effortlessly discover nearby
15 min read
Design a Picture-Sharing System - System Design
In the present day, the need for good tools to exchange and organize images has never been this much higher. As for social networking, e-shopping, personal branding, and many other related purposes, users anticipate that the sites they visit provide them with fast and dependable environments with or without loads of images that enable them to inter
11 min read
Design Patterns for High Availability
Ensuring uninterrupted service is of great importance in today's digital landscape. This article explores essential design patterns for achieving high availability in software systems. From redundancy strategies to load-balancing techniques, we delve into the architectural principles that help make resilient and fault-tolerant applications. Importa
8 min read
How Do We Design for High Availability?
High system availability is crucial for companies in a variety of industries in the current digital era, as system outages can cause large losses. High availability is the capacity of a system to continue functioning and being available to users despite errors in software, hardware, or other disruptions. In this article, we will deep dive into the
6 min read
Difference between System Design and System Architecture
When it comes to software development and engineering there can be some confusion, between the two terms "System Design" and "System Architecture." Although they are related they actually refer to stages and responsibilities in creating scalable and efficient systems. It is important to grasp the differences, between System Design and System Archit
3 min read
Article Tags :
three90RightbarBannerImg