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.高层系统设计
在高层,我们需要支持两种场景,一种是上传照片,另一种是查看/搜索照片。我们的服务需要一些对象存储服务器来存储照片,还需要一些数据库服务器来存储关于照片的元数据信息。