1.什么是Instagram?
Instagram是一项社交网络服务,它允许用户上传照片和视频,并与其他用户共享。Instagram用户可以选择公开或私下共享信息。任何公开共享的内容都可以被任何其他用户看到,而私人共享的内容只能由指定的一组人访问。Instagram还允许其用户通过许多其他社交网络平台进行共享,如Facebook、Twitter、Flickr和Tumblr。
我们计划设计一个更简单的Instagram版本,用户可以共享照片,也可以关注其他用户。每个用户的“新闻提要”将包含用户关注的所有人的头像。
2.系统的要求和目标
在设计Instagram时,我们将重点关注以下一系列要求:
功能要求
1.用户应该能够上传/下载/查看照片。
2.用户可以根据照片/视频标题执行搜索。
3.用户可以关注其他用户。
4.该系统应该能够生成和显示用户的新闻饲料组成的顶级照片从用户跟踪的所有人中。
非功能性需求
1.我们的服务需要高可用。
2.系统可接受的新闻提要生成延迟为200ms,低延迟。
3.如果用户在一段时间内看不到照片,一致性可能会受到影响(为了可用性)
4.系统应高度可靠;任何上传的照片或视频都不应丢失,数据的可靠性。不在范围内:向照片添加标签、在标签上搜索照片、对照片进行评论、将用户标记到照片、跟踪谁等。
3.一些设计注意事项
该系统的阅读量会很大,因此我们将重点构建一个能够快速检索照片的系统。
1.实际上,用户可以上传任意数量的照片。在设计该系统时,有效的存储管理应该是一个关键因素。
2.查看照片时,预期延迟较低。
3.数据应100%可靠。如果用户上传照片,系统将保证它会永远不要丢失。
4.容量估计和限制
•假设我们有5亿总用户,每天有100万活跃用户。
•每天200万张新照片,每秒23张新照片。
•平均照片文件大小=>200KB
•1天照片所需的总空间 2M * 200KB => 400 GB
10年需要的总共空间为 400GB 365 (days a year) 10 (years) ~= 1425TB
5.高层系统设计
在高层,我们需要支持两种场景,一种是上传照片,另一种是查看/搜索照片。我们的服务需要一些对象存储服务器来存储照片,还需要一些数据库服务器来存储关于照片的元数据信息。