3

如何让你的大文件上传变得又稳又快?

 2 years ago
source link: https://segmentfault.com/a/1190000041002019
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

随着网络环境的大幅改善及网络资费的显著降低,人们在网络上的互动不再局限于传统的文本内容,图片、语音、视频等纷纷加入了互动行列。

相较于文本内容而言,多媒体在易用性和情感表达上更有优势,当然相对文本,体积也大了很多。比如一条文本消息只有不到 100 字节,但一条视频消息可能超过 100 MB。这就导致多媒体在网络传输、实时触达等方面相对文本内容会更难一些。

在网站或者程序中,除了用户交流的图片、视频等互动消息,还有其他形式的大文件也越来越多。保证大文件的上传稳定是一个需要长期投入和突破的重点。今天,我们就来看看都有哪些手段可以保证用户拥有一个良好的上传体验。

如何让资源传递又快又稳

或许大家会注意到,使用 QQ 时,朋友发送给你的图片和视频会加载一段时间才会显示,这是因为程序并不是发送文件给你,而是发送了文件路径,当我们访问路径后才会加载文件。这是当前主流的大文件通讯方式,即:

  • 上传文件到文件服务器
  • 推送文件路径
  • 收到文件路径

这么做是因为大文件的传输耗时过长,会影响消息的即时性,所以不会直接传送文件。

那么,我们如果要想让图片、视频、语音等多媒体消息发送得又快又稳,就可以从“上传多媒体文件到文件服务器”这一步上着手。

上传接入点

第一种优化上传文件的手段是优化上传接入点。

上传请求到文件服务器,服务器响应建联,上传端再继续传递数据,直至上传完成。这个过程的耗时越短就会让人感觉网速越快。

然而我们国家目前的固网宽带运营商构成复杂,跨运营商网络访问的高延迟和不稳定性一直是个比较棘手的难题。对于传输数据更多的视频、图片等多媒体文件来说,跨运营商来上传文件,多次 RTT(Round-Trip-Time,往返时延)的体验则会更差。

目前针对这种网络情况的主流做法是,对不同的网络运营商提供不同的上传接入点 IP,然后通过运营商 DNS 解析,让用户能通过本运营商的上传接入点来快速上传文件。同时后端的图片上传存储服务后会部署在多线机房,方便快速地把文件流提交给存储层,从而避免从接入点到存储服务的跨网开销,并解决其他运营商的用户下载图片时需要跨网的问题。

不过,虽然多个运营商接入点 IP 能解决跨运营商网络访问的问题,但是在管理和使用上会比较复杂。因此大部分服务提供商会利用多线 BGP(Border Gateway Protocol,边界网关协议)机房托管,这样就可以只提供 IP ,让访问用户自主选择最佳路由。

分块上传

除去上传接入点的优化,分块上传也可以提升多媒体文件的上传性能和成功率。

分块上传,是指在上传客户端,把需要上传的文件按照一定规则切分为多个数据块,并按照规则标记序号,然后再分别上传这些数据块,服务端接收到后,按照序号重新将多个数据块组装成完整的文件。

对于图片、视频这种较大的文件来说,分块上传可以让客户端在分块完成后,使用并发的方式充分利用网络带宽同时上传多个分块,有效提升了上传效率。此外,在一些网络环境较差、信号不稳定的场景下,采用分块的方式,在上传失败后进行重试时,只需要重传某一个失败的分块,不必重新上传整个文件,显著提升了重新发送的成功率。

在分块上传中,分块大小也是一个重要的问题。如果分块太大,片数少,上传的并发度不够,可能会降低上传效率,而且每个大的分块在失败后重传的成本会比较高。但是如果分块太小,片数多,并发需要的连接数又太多,多条连接会降低网络的整体吞吐,客户上传端和服务接收端拆分与合并分块的开销也相应增加,而且传输时的额外流量也会更多。

所以,不同网络环境下如何选择一个合适的分块大小至关重要。一般来说,在网络状况较好的环境,比如在 WiFi、4G 下,相应的分块大小应该设置得更大一些;而在 2G、3G 弱网情况下,分块可以适当设置小一点。

断点续传

因为大文件的上传耗时较长,如果用户由于网络断开、设备重启等原因,需要在上传未完成时暂停上传任务。当然,用户肯定不会希望下次上传是从头开始。因此如何从暂停位置开始上传的功能就变得必要起来。这就是我们常说的“断点续传”

断点续传是通过给每一次上传行为分配一个唯一的任务标识,每个分块在上传时除了携带自己的序号外,还需要带上这个任务标识,服务端针对接收到的同一个任务标识的分块进行暂存,即使由于某个原因暂停上传了,这些暂存的分块也不会马上清理掉,而是保留一定的时间。

当上传端需要继续上传时,在请求的同时会继续携带之前的任务标识。客户端接收到后会检查服务端已有分块的情况,如果没有过期就继续从上次断开的分块位置进行上传,反之则会重新上传。

断点续传功能在上传大文件时,可解决传输较大文件过程中因网络错误而必须重头再来的痛点,对于提升用户上传体验是很明显的。

如何快速拥有这些上传优势

如果想要完成上述大文件上传优化,需要考虑到架构、设计、运维等方面,不仅优化成本高,改造时间相对也长。想要拥有上面所说的这些优势,选择又拍云存储就可以了。

又拍云存储可以让大型文件通过 CDN 就近完成上传、上传加速传输、分块上传和断点续传,同时还可以使用图片处理、视频处理、文件压缩解压缩对文件进行处理。在文件访问的时候,也会通过 CDN 使用大文件分段缓存、视频拖拉、链路优化等功能进行全网分发。保证企业海量数据的传输、处理、存储、分发与容灾需求。

CSS 盒子的边距塌陷

热门剧本杀与 SaaS 的不解之缘


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK