...

/

Design YouTube

Design YouTube

Learn to design a system similar to YouTube.

Overview

YouTube is a popular video streaming service where users upload, stream, search, comment, share, and like or dislike videos. Large businesses as well as individuals maintain channels where they host their videos. YouTube allows free hosting of video content to be shared with users globally. YouTube is considered a primary source of entertainment, especially among young people, and as of 2022, it is listed as the second-most viewed website after Google by WikipediaSee https://en.wikipedia.org/wiki/List_of_most_visited_websites.

YouTube’s growth

Let’s look at some interesting statistics about YouTube and its popularity.

Since its inception in February 2005, the number of YouTube users has multiplied. As of now, there are more than 2.5 billion monthly active users of YouTube. Let’s take a look at the chart below to see how YouTube users have increased in the last decade.

Increase in monthly active users of YouTube per year

Requirements

Let’s start with the requirements for designing a system like YouTube.

Functional requirements

We require that our system is able to perform the following functions:

  1. Stream videos
  2. Upload videos
  3. Search videos according to titles
  4. Like and dislike videos
  5. Add comments to videos
  6. View thumbnails
Press + to interact
Representation of the functional and non-functional requirements
Representation of the functional and non-functional requirements

Non-functional requirements

It’s important that our system also meets the following requirements:

  • High availability: The system should be highly available. High availability requires a good percentage of uptime. Generally, an uptime of 99% and above is considered good.
  • Scalability: As the number of users grows, these issues should not become bottlenecks: storage for uploading content, the bandwidth required for simultaneous viewing, and the number of concurrent user requests should not overwhelm our application/web server.
  • Good performance: A smooth streaming experience leads to better performance overall.
  • Reliability: Content uploaded to the system should not be lost or damaged.

We don’t require strong consistency for YouTube’s design. Consider an example where a creator uploads a video. Not all users subscribed to the creator’s channel should immediately get the notification for uploaded content.

To summarize, the functional requirements are the features and functionalities that the user will get, whereas the non-functional requirements are the expectations in terms of performance from the system.

Based on the requirements, we’ll estimate the required resources and design of our system.

Design and building blocks

Now that we have completed the resource estimations, let’s identify the building blocks that will be an integral part of our design for the YouTube system. The key building blocks are given below:

Press + to interact
Building blocks in a high-level design
Building blocks in a high-level design
  • Databases: Databases are
...
Access this course and 1400+ top-rated courses and projects.