【调研】弱网环境下分片上传方案调研

news2024/11/15 13:40:20

目标

在高延迟、高丢包的弱网环境下,合理调整上传任务中分片大小这一参数,以达到尽可能好的传输性能(传输时间、成功率)。

调研

  • 腾讯云弱网分块续传功能

腾讯云的弱网分块续传功能,基于腾讯云对象存储(Cloud Object Storage,COS)服务,使移动端在弱网情况下,能根据实际情况动态调节上传分块大小,来提高上传成功率。

有以下几点:

  1. COS目前支持最小分块大小为100KB;
  2. 分块越小,意味着请求数越多,目前根据测试统计,100KB分块大小的请求耗时是1MB分块大小的2倍左右;
  3. 在正常网络下发起请求,建议设置分块大小为1MB及以上
  4. 在网络信号弱等网络环境下上传对象容易导致上传失败,若是因为网络导致失败,则尝试将分块大小设置为100KB,再重新上传;
  5. 分块大小设置越小,将来下载该文件时可能比较缓慢(可能是因为更小的分片将来会产生更多的请求开销)。

  • bilibili海外创作端上传链路专项治理

东南亚相对于国内较弱的网络环境和机型环境,导致了上传链路上存在很多不稳定因素。分析可能导致失败率高的原因有如下几点:

1. 分片大小太大:视频云配置了10MB作为一个分片的大小,每个分片需要较长时间才能完成上传,在弱网情况下容易出现超时或者失败,失败后该分片就需要从零开始重新上传。所以,在分片没有重新上传到原来的进度情况下,进度会一直卡住。

解决方案:针对海外的网络状态,调整分片大小为5MB

2. iOS是单分片上传:旧iOS的分片上传方式是单线程串行上传,没有充分利用多线程的能力。理论上在带宽足够的情况下,多分片并发上传能很大程度上提升上传效率。

解决方案:针对iOS上传时, 单线程串行上传的策略,修改为多线程并发上传,通过preupload接口可配置下发并行线程数。

3. 没有断点续传的能力:由于没有实现断点续传功能,当上传任务失败后无法恢复上次的进度,而是需要从零开始重新上传,既耗费带宽,也影响上传效率。

解决方案:重新发起曾失败过的上传任务时,可从原失败位置再次发起。

4. 没有后台上传的能力:iOS没有后台继续上传的功能,进入后台很快就会停止上传。

  • 极客时间博客

1. 应用场景

对于图片、视频、语音等这种较大的消息来说,采用分片上传可以让客户端在分片完成后,利用并行的方式来同时上传多个分片,从而提升上传效率。

在一些网络环境较差的场景下,采用分片的方式,可以在上传失败后进行重试时,不必重新上传整个文件,而只需要重传某一个失败的分片,这样也能提升重新发送的成功率和性能。

此外,类似语音这种流式消息,在上传时并不知道文件最终大小,采用分片上传可以让消息文件先部分上传到服务器,而没必要等到录制完才开始上传,这样也能节约上传的整体时长。

2. 分片大小

分片太大,片数少,上传的并发度不够,可能会降低上传效率,每个大的分片在失败后重传的成本会比较高

分片太小,片数多,并发需要的 TCP 连接太多,多条TCP连接的“窗口慢启动”会降低整体吞吐,两端拆分与合并分片的开销也相应增加,而且传输时的额外流量(HTTP报头)也会更多。

一般来说,在网络状况较好的环境,比如在 WiFi、4G 下,相应的分片大小应该设置得更大一些;而在 2G、3G 弱网情况下,分片可以设置小一点。

对于分片大小的设置,简单一点的处理可以按照网络状态来粗略划分。比如,WiFi下2M,4G下1M,3G/2G下256K

  • 腾讯“鱼翅”项目

1. 背景介绍

当时的Android版手机QQ在带宽大而稳定的优质网络下的图片上传速度偏低,在带宽小而质量差的弱网络下传输成功率很低。团队尝试着对手机QQ的图片传输方案进行优化。通过半年多的研究、评测、实验和开发,推出了代号为“鱼翅”的适合移动网络的文件自适应传输方案。该方案将手机QQ的优质网络下的传输速度提升近 60%,弱网络下的传输成功率提升更是高达8倍。

2. 技术要点

<1>必须分小片传输一个文件:

若整个文件放在一个网络包里进行传输,一旦失败,就必须重传整个文件。因而采用把一个文件分片的方式传输,则只需要在某一个分片失败后重传这一个分片。同时,单个消息越大传输时越容易失败(快速数学证明:若文件大小接近0,则传输成功概率接近 100% ;而文件大小无穷大,则传输过程必然会失败),而移动互联网的整体质量比有线网络要差,相同大小的消息会更容易失败;因此就应该把一个较大的文件分成一个个的小片进行传输,每个小片更容易成功一些。

<2>不同类型的移动互联网下的分片初始大小应该有所不同:

不同移动互联网的带宽和稳定性的差异都很大,如WiFi和2G,使用不同大小的初始分片能更好地适应对应类型的网络,但是至于每种网络下的初始分片到底多大,这需要进行实验。

<3>在上传一个文件的过程中,应当尽可能动态增大分片大小(例如,后一片是前一片的 N 倍),以减少分片数量:

分片动作会带来不少额外开销,如C/S两端拆分与合并分片的时间、传输时的额外流量(HTTP头等)、每个分片的RTT等诸多开销,所以理论上传输同一个文件用的分片数量越少,额外开销越小。

<4>确定每个分片是否要继续增大之前,要检查网络类型是否发生了变化,一旦跟前一片传输的网络变得不同,则新的一片不能继续增大而是转而用新网络类型下的初始分片大小进行传输:

移动互联网下,由于用户的“移动”而时常发生网络类型的切换(如3G变2.5G),一旦网络类型变了,其带宽、时延、稳定性等因素都发生了很大的变化,所以需要分片大小“归零”,以迅速适应新网络,减少失败的概率。

<5>分片一旦传输失败,应当使用该网络下的初始分片大小进行重试:

若网络类型并没有产生切换,但某分片传输失败了,则说明该网络的质量可能已经下降到不再适合传输这个大小的分片,会有较高再次失败的可能性,因此转而重新用该网络下的初始大小的分片进行重试,以提升重传成功概率、同时减少再次失败所带来的流量浪费。

<6>每个分片都有一定次数的失败重传机会,当一个分片的所有重传都失败了,才定义为文件传输失败。

<7>配合后台服务器能力,待用户手动重试传输失败的文件时,能断点续传。

3. 基本实现

<1>分片大小的计算逻辑类似于TCP中的慢启动机制,把一个文件传输的全过程按照分片大小的增长快慢分成三种状态:QUICKSTART(快启动,分片以一定倍率快速增长)、SLOWSTART(慢启动,分片以一个远小于快启动增长倍率的小系数缓慢增长)、STABLE(稳定态,分片大小不再变化)。状态迁移的触发条件是“分片传输速度随分片大小的增大而变化的幅度”。

<2>在单片发送流程中,引入了MSNVT(最大累计真空时间)来代替RTO(超时重传时间)。即一个分片传输过程中,通过监控网卡状态,发现的传输层连续没有任何数据发送的时间长度为NVT(网络真空时间),所有发生过的NVT的累加值为SNVT(累计真空时间),若SNVT达到了规定的上限MSNVT,分片传输宣告失败。这是因为移动网络的质量/带宽经常会发生“跳变”、而不像有线网络那样的“渐变”,这就导致无论怎么设置网络请求的 RTO值都不合适,如下图。

  • 小结

为了提高移动端在弱网环境下的上传任务成功率,各案例都建议降低分片的大小,具体方式有一开始根据网络类型来设定分片大小,也有根据实际情况来动态调整分片大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2080354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis单线程和多线程

1.Redis的单线程 Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程完成的&#xff0c;Redis在处理客户端的请求时包括获取&#xff08;Socket读&#xff09;、解析、执行、内容返回&#xff08;Socket写&#xff09;等都由一个顺序串行的主线程处理&#xff0c;这…

OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 裁剪线段与图像矩形相交的部分。 cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外&#xff0c;则返回 false。…

实现流程化办公,可专注于开源可视化报表设计器!

近日&#xff0c;有很多粉丝和朋友们会问我们关于低代码技术平台、开源可视化报表设计器的相关内容和问题。其实&#xff0c;在流程化办公新时代&#xff0c;愿意启用新软件平台的客户朋友会收获市场红利&#xff0c;也会站在前沿之地上斩获更多市场份额。今天我们就一起来了解…

【LLM之Data】SKYSCRIPT-100M论文阅读笔记

研究背景 随着短视频和短剧的兴起&#xff0c;自动化的剧本生成和短剧制作在影视行业中的需求逐渐增加。传统的剧本生成过程需要大量的人工干预&#xff0c;限制了其在规模和效率上的扩展性。当前的大型语言模型&#xff08;LLM&#xff09;在剧本生成方面展现出一定潜力&…

Leetcode面试经典150题-5.最长回文子串

解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {public static String longestPalindrome(String s) {if(s null || s.length() 0) {return null;}//加工字符串&#xff0c;例如abcdcba加工成#a#b#c#d#a#b#c#d#String str getManacherString(s);char[] str…

UWB实操:用litepoint确认UWB SP0和SP3帧长度

用litepoint确认UWB SP0和SP3帧长度 预备知识 SP0 frame length Sync+SFD = 65.1+ 8.1 = 73 us

uniapp定义scss颜色变量deep()修改子组件样式

uni.scss中 import "/common/style/base-style.scss"; 在base-style.scss中 $brand-theme-color:#28B389;//品牌主体红色$border-color:#e0e0e0 ; $border-color-light:#efefef; $text-font-color-1: #000 ;//文字主色 $text-font-color-2:#676767;//副标题颜色 $…

​​聆思CSK6大模型语音视觉开发板接入AIUI技能实操(控制风扇开关)

前言 本文以大模型语音控制灯的开关为例,讲解如何通过LSPlatform的云端编排功能在大模型语音交互流程中加入AIUI技能&#xff0c;实现更丰富的产品功能。 大模型语音模板加入AIUI技能节点后的数据流程如下图所示&#xff1a; 大模型语音控制AIUI之风扇 硬件准备工作 聆思CSK6大…

使用 FinalShell 链接 Centos

1. 安装 FinalShell 下载地址&#xff1a;https://www.hostbuf.com/t/988.html 2. 查看 IP地址。 2.1 通过命令查询IP 输入 ip addr show 查询&#xff0c;输出效果如下截图&#xff0c;其中的 192.168.1.5 就是 IP 地址。 2.2 通过可视化界面查询IP 点击右上角的网络图标…

LLM自对齐技术最新研究分享(二):对齐 Pipeline 数据合成(下)

LLM 自对齐技术最新研究进展分享 系列文章继续更新啦&#xff01;本系列文章将基于下图的架构&#xff0c;对当前 Self-alignment 相关工作进行全面梳理&#xff0c;厘清技术路线并分析潜在问题。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 在上一篇…

MySQL数据库——概念与安装

目录 一、数据库的概述 1、数据库的基本概念 2、数据库管理系统&#xff08;DBMS&#xff09; 2.1、数据库管理系统概述 2.2、DBMS的工作模式 3、数据库系统&#xff08;DBS&#xff09; 3.1、数据库系统概述 3.2、数据库系统发展史 3.3、当今主流数据库介绍 4、关系…

VS2022离线安装包 - 下载安装教程

总目录 前言 一般情况下我们都是通过网络下载并安装VS2022&#xff0c;但是有些情况下&#xff0c;由于公司内部网络管理比较严格&#xff0c;可能会需要安装离线安装包这样的操作。 一、下载Visual Studio bootstrapper 进入Visual Studio bootstrapper下载界面按照如下图示…

angular xlsx-style,复杂表头样式导出

导出效果如下图所示&#xff1a; 下载xlsx npm install xlsx angular.json中引入&#xff1a; "node_modules/xlsx/dist/xlsx.full.min.js","src/assets/js/jszip.js","src/assets/js/xlsx.js" 两个插件地址&#xff1a; 上传中&#xff0c;等…

Android U WMShell动画调用堆栈

本文主要简单介绍WMShell动画调用堆栈 代码环境&#xff1a;repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r7 Systemserver侧 TAG: at com.android.server.wm.Transition.onTransactionReady(Transition.java:1575) TA…

Centos 设置成中国时区

原因是初始安装的 Centos 系统&#xff0c;时区是UTC&#xff0c;跟中国时间不一样&#xff0c;这样会导致一些问题&#xff0c;例如后面安装一些软件&#xff0c;证书认证失败等问题。 修改时间命令如下 1.首先&#xff0c;使用以下命令安装 tzdata 软件包&#xff08;如果尚…

喜羊羊做Python二级(模拟考试--易错点)

今天距离Python二级考试&#xff0c;还有28天左右。坚持每天做几套试卷&#xff0c;保持记忆和手感。 个人在做题的过程中是先不断练习选择题。当你选择题不达标的时候&#xff0c;系统不会看大题&#xff08;大概是觉得选择题都做的那么差&#xff0c;大题也不会那么好&#…

数据执行保护讲解

数据执行保护&#xff08;Data Execution Prevention&#xff0c;简称DEP&#xff09;操作系统中的一项安全功能&#xff0c;旨在防止恶意代码利用缓冲区溢出漏洞执行。它通过将内存的某些区域标记为不可执行&#xff0c;从而防止从这些区域执行代码。这适用于所有程序&#xf…

05:【江科大stm32】:定时器输出比较功能(PWM)

定时器输出比较功能&#xff08;PWM&#xff09; 1、LED呼吸灯2、PWM驱动舵机3、PWM驱动电机 1、LED呼吸灯 ①PWM.c文件的代码如下&#xff1a; #include "stm32f10x.h" // Device header/*使用定时器TIM2&#xff0c;通过通道CH1(PA0)输出PWM波 …

模型 PMI思考法

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。全面评估&#xff0c;三思而后行。 1 PMI思考法的应用 1.1 个人职业发展中的PMI思考法应用 张华是一位有志于提升自己职业竞争力的职场人士。他正在考虑报名参加一个专业认证课程&#xff0c;以期提…

Windows安装Ora2Pg(迁移表结构,表数据)

版本&#xff1a; windows server 2012 R2 oracle 12 说明&#xff1a; 目前该操作是在安装了oracle的机子上做的。 1、安装perl Strawberry Perl下载地址&#xff1a; Strawberry Perl for Windows - Releases 选择一个合适的版本&#xff0c;下载下来之后只需要选择…