持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
1 不要去 开课吧 和子公司 问原因就 自己百度去
2 上节回顾/本节重点/上节思考题
2.1 本节讲解
尝试新的学习方式,一天一发
1. 短视频系统设计:如何支持三千万用户同时在线看视频?
2 volatile 初步学习
3 小学英语 自己实力不行,只能从小学开始了
4 程序员的底层思维
5 思维导图10堂客
6
7 做一个 sql语句 字段解析的程序 把字段名 放到es 保存
2.3 上节 思考题解答
4 今日所学
4.1 短视频系统设计:如何支持三千万用户同时在线看视频?
1 需求
QuickTok 的核心功能需求非常简单:用户上传视频、搜索视频、观看视频
功能需求
1.1 提供文件上传和下载服务
1.2 支持断点续传 分片上传
1.3 不用重复上传
1.4 流速控制
1.5 共享文件支持 密码分享(做防护)
1.6 怎么防止文件写到一半 宕机导致的一致性问题
非功能需求
大数据量存储:10 亿注册用户,1000 亿个文件,约 1 亿 TB 的存储空间。
高并发访问:平均 1 万 QPS,高峰期 2 万 QPS。
大流量负载:平均网络带宽负载 80Gb/S,高峰期带宽负载 160Gb/s。
高可靠存储:文件不丢失,持久存储可靠性达到 99.9999% ,即 100 万个文件最多丢失(或损坏)1 个文件。
高可用服务:用户正常上传、下载服务可用性在 99.99% 以上,即一年最多 53 分钟不可用。
数据安全性:文件需要加密存储,用户本人及共享文件外,其他人不能查看文件内容。不重复上传:相同文件内容不重复上传,也就是说,如果用户上传的文件内容已经被其他用户上传过了,该用户不需要再上传一次文件内容,进而实现“秒传”功能。从用户视角来看,不到一秒就可以完成一个大文件的上传。
4.2 负载指标估算
QuickTok 预计用户总量为 20 亿,日活用户约 10 亿,每个用户平均每天浏览 10 个短视频
短视频日播放量
10 * 10亿 = 100亿
平均播放 QPS
(100亿) / (24 * 60 * 60) = 115740 = 约等于 11w/s
每秒 11 万用户点击视频,假设用户平均观看 5 分钟,那么同时在观看的视频数
11w * 5 * 60 = 3300w
假设每个短视频的平均播放次数 200 次,那么为了支撑这样体量的播放量,平均需要每秒上传视频数:
11w / 200 = 550
每个短视频平均大小 100MB,每秒上传至服务器的文件大小为:
100MB * 550 = 55GB
每年新增视频需要的存储空间:
55GB * 60 * 60 * 24 * 365 = 1734480000GB = 1734480TB = 1734PB
事实上,为了保证视频数据的高可用,不会因为硬盘损坏导致数据丢失,视频文件需要备份存储,QuickTok 采用双副本的备份存储策略,也就是每个视频文件存储三份,需要的总存储空间:1700PB×3=5200PB
播放视频需要的总带宽:
11w * 100MB ×8bit=88Tb
因此,我们需要设计的短视频应用是一个每秒上传 550 个视频文件、11 万次播放、新增 165GB 存储以及 88Tb 总带宽的高并发应用系统。这个系统呢需要是高性能的,能迅速响应用户的上传和播放操作,也需要是高可用的,能面向全球用户提供 7 * 24 小时稳定的服务。
4.3 概要设计
4.4 详细设计
解决的问题
1 如何存储海量视频文件?
2 如何解决高并发视频播放导致的带宽压力?
但 QuickTok 最终采用了另一种存储方案,即使用 Hadoop 分布式文件系统 HDFS 进行存储。HDFS 适合大文件存储的一次写入多次读取的场景,满足视频一次上传多次播放的需求;同时,它还可以自动进行数据备份(缺省配置下,每个文件存储三份),也满足我们关于数据存储高可用的需求。HDFS 适合存储大文件,大文件减少磁盘碎片,更有利于存储空间的利用,同时 HDFS NameNode 的访问压力也更小,所以我们需要把若干个视频文件合并成一个 HDFS 文件进行存储,并将存储相关的细节记录到 HBase 中。
如果用户的大部分请求都可以通过 CDN 返回,那么一方面可以极大加快用户请求的响应速度,另一方面又可以较大缓解数据中心的网络和硬盘负载压力,进一步提升应用整体的性能。
4.5 问题思考
5 volatile
怎么保证的可见性?
assign的时候 同时触发 store write操作,并且 其他线程的flag也会过期
为什么不能保证原子性?
写的过程可能是并发操作,导致数据不一致,不能保证原子性
怎么保证的有序性?
happens-before原则 可以通过内存屏障 来保证 读之前 写完了
volatile 用在多个线程共享的字段上,能保证可见性 有序性 。不能保证原子性
6 小学英语
元音字母 a e i o u
开音节
1 以元音字母结尾的 重读音节
2 一个元音字母 + 除r的辅音字母 + e
闭音节
1 以除r/w 结尾的辅音字母
7 前面思考和应用场景解答 (在此之前 请再次思考前面的问题 )
8 总结:
每日学习
9 下节预知
下周 针对 怎么防止文件写到一半 宕机导致的一致性问题 解析下