博客:cbb777.fun
全平台账号:安妮的心动录
github: https://github.com/anneheartrecord
下文中我说的可能对,也可能不对,鉴于笔者水平有限,请君自辨。有问题欢迎大家找我讨论
什么是视频资源
所谓视频资源,在播放和底层存储的时候其实就是一张一张图,30帧为一秒三十张图,60帧为一秒60张图等。一连串的图片按照一定帧率播放出来,刚开始的时候没有声音,所以音频信息就需要在各个帧进行精确设置,播放才能够音画同步。
流
流媒体:
计算机科技在历经了文件(File)、页面(Web)时代之后,今天来到了以流(Streams)为单位的时代,而这个流的最典型的应用就是“流媒体”技术,它指的是在网络上采用流式传输技术来发布音频、视频以及其他多媒体文件。
所谓的流式传输就是将音频、视频多媒体文件经过一定的算法,编码压缩成一个个很小的压缩包,流媒体服务器通过特定网络协议进行连续、实时的传送,用户端接受到压缩包后由播放软件实时解压缩实现播放的过程。而所谓的流媒体则特指一切采用这种流式传输的媒体文件。
今天我们通过互联网看视频、直播、盒子看电视算如此方便,背后就有着流媒体系统的支撑。
在对于音视频的传输分发上,我们会经常听到HTTP渐进式、HTTP流、文件下载、实时流式传输等等专业术语,下表总结了不同传输方式的特点
需要完成一个支撑高体验大规模的流媒体系统,需要考虑的技术层面有
云计算基础服务相关技术:基于云架构的计算、网络、存储、CDN等底层基础服务已经变成了必须。硬件虚拟化、网络虚拟化能够最大程度保障音视频播放的稳定性;同时CDN内容分发网络能够有效应对高并发和徒增流量的需求,对流媒体传输的所有环节进行针对性优化,大幅度降低延时,对象存储满足了流媒体数据的大规模存储要求
音视频相关技术:音视频的编解码、4K、VR等音视频核心技术能力
场景化需求:秀场娱乐直播的实时录制,实时水印,实时鉴黄;连麦,版权保护等等
Youtube
Youtube是如何存储海量音视频数据的?
Youtube是仅次于谷歌的第二大热门网站,在19年5月,每分钟会有500小时的视频内容上传到该平台
架构
Youtube的后端微服务是由Python Java 和Go 写的,而前端是使用JS写的,主要的数据库是由Vitess支持的MySQL,另外使用Memcache实现了缓存,并使用Zookeeper进行节点的协调
流行的视频通过CDN来提供,而一般的、较少播放的视频则从数据库中获取
视频压缩:能够使用其他编码器一半的带宽来编码视频
视频流:使用基于HTTP协议的动态自适应流,可以按照不同的速率提供给观众,客户端通过观看者的互联网速度自动适应视频渲染,从而尽可能少的减少缓冲时间
Vitess的诞生
随着网站越来越大,请求量越来越多,不得不对数据库进行水平拓展
主-从副本
副本会添加到数据库实例中,读取请求会被路由到主数据库和副本上,其中主节点可写又可读,从节点只可读。
但是这种场景中,有可能会从副本中读取到陈旧的数据,如果在主节点将信息更新到副本之前,一个请求读取了副本的数据,那么观看者就会得到陈旧的数据。但是一般没什么大问题,因为在一段时间的运行后,不同节点的数据会答到最终一致
分片
当QPS继续增大,就该对数据库进行分片了,分片并不是一个简单的过程,它大大的增加了系统的复杂性
数据库分片之后,数据被分散到多台机器上,这增加了系统写入的吞吐量,不再是只有一个主节点能承担写的任务,同时,每台机器都创建了单独的副本,以实现冗余和吞吐
灾难管理
为了防止突然掉电、火灾等情况,需要对数据进行冗余,将用户数据备份到世界不同地理区域的数据中心。丢失用户数据和服务不可用算不允许的。同时拥有多个数据中心也有助于Youtube减少系统延迟,因为用户请求会被路由到最近的数据中心
Vitess
是一个运行在MySQL之上的数据库集群方案,能够使MySQL进行水平拓展。它具有内置的分片特性,能够让开发人员拓展数据库,而不必再应用中添加任何的分片逻辑。类似于nosql的做法
vitess会自动处理故障转移与备份,除了youtube,vitess还被业界的其他知名厂商使用,如github等
当你需要acid事务和强一致性的支持,同时又希望像NoSQL一样快速拓展关系型数据库的时候,Vitess就会大显身手,通过基于go编程提供的连接池,Vitess能够以很低的成本管理大量连接
部署到云中:vitess是云原生的,并且容量是逐步添加到数据库中的。它可以作为一个K8S感知的云原生分布式数据库运行
如何存储
视频会存储在谷歌数据中心的硬盘里,由GFS和BigTbale管理, GFS是谷歌开发的一个分布式文件系统,用于管理分布式环境中的大规模数据,而BigTable是建立在GFS上的低延迟分布式数据存储系统,用于处理分布在千万台机器上的PB级别的数据