Requirements of YouTube's Design
Define the core functional and non-functional requirements for a large-scale video streaming service like YouTube. Learn to perform crucial back-of-the-envelope resource estimation for storage, bandwidth, and server requirements.
Requirements
Designing a system like YouTube requires handling massive scale and reliability.
Functional requirements
We require that our system be able to perform the following functions:
Stream videos
Upload videos
Search videos by title
Like and dislike videos
Add comments
View thumbnails
Non-functional requirements
High availability: The system should be highly available. High availability requires a high uptime percentage. Generally, an uptime of 99% and above is considered good.
Scalability: The system must handle increasing users, storage, and bandwidth without performance degradation.
Performance: Streaming must be smooth with minimal latency.
Reliability: Uploaded content must not be lost or damaged.
For content distribution, YouTube does not require strict strong consistency guarantees. For example, a newly uploaded video does not need to propagate to all subscribers instantly. In this case, eventual consistency provides an acceptable trade-off between latency and consistency. Based on these requirements, we can estimate resource needs and outline the system architecture.