每日学习思考笔记(第二期)

174 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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 分钟不可用。
   数据安全性:文件需要加密存储,用户本人及共享文件外,其他人不能查看文件内容。不重复上传:相同文件内容不重复上传,也就是说,如果用户上传的文件内容已经被其他用户上传过了,该用户不需要再上传一次文件内容,进而实现“秒传”功能。从用户视角来看,不到一秒就可以完成一个大文件的上传。

上传文件时序图.png

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 结尾的辅音字母

image.png


7 前面思考和应用场景解答 (在此之前 请再次思考前面的问题 )

8 总结:

每日学习

9 下节预知

下周 针对 怎么防止文件写到一半 宕机导致的一致性问题 解析下

10 复习昨天学的 最好讲给一个人听,互相学习