技术分享:国民远控向日葵如何通过BBR算法提升远控体验?
决定远程控制服务体验是否优秀的核心点之一是网络。网络环境优秀时,远程控制的体验自然是高清流畅,但事实上,很多需要应用到远程控制的场景其网络环境远远称不上优秀,在这类弱网环境下如何保证远程控制服务依旧能够有十足的稳定性,是远程控制厂商们的一大课题。
“国民远控”向日葵为优化弱网环境下的连接稳定性问题并提升带宽的利用率,已于早前完成了一次技术升级,全球各地的主要服务器均支持BBR拥塞控制算法,该升级可以让服务器之间的连接更快,端与服务器的连接更稳定。
而作为本次技术升级核心的BBR拥塞控制算法,受到的关注却比较少,各路资料和宣传中均鲜被提及,这篇文章将介绍这一算法,并且实测引入BBR拥塞控制算法之后的向日葵在弱网环境中的提升。
拥堵控制算法的“来龙去脉”:从“Cubic”到“BBR”
● TCP拥塞控制(Congestion Control)算法
互联网经历了几代的发展,从上网需要电话线带宽只有几十Kbps,到现在随时随地上网,最新的5G更是让我们获得了Gbps的接入带宽,这在以前很难想象。不过,在互联网快速发展的背后,它的技术基础有相当一部分仍然构建于20年前甚至更早。TCP拥塞控制(Congestion Control)算法就是其中之一。作为专有名词它很少被提及,但我们的一些经历,比如明明网速很快但下载却很慢这样的事很可能跟它有关。
互联网上的两点通信时,会经过很多路由,每经过一个路由设备叫一跳(hop)。每一跳都有不同的带宽,有大有小,两点之间的可用带宽是每一跳中的最小值,被称为Bottleneck BW,因为是公共链路,它们几乎总是拥挤不堪,丢包和排队经常发生,可用带宽也时大时小,这很常见。
不过7层应用程序并不需要关心这些,即使排队和路由抖动产生了丢包或者数据错误,4层的TCP协议也会处理,它会重传并进行带宽控制。重传用于保证数据的完整性,带宽控制则确保有限的带宽资源被尽可能公平分配,减少排队和丢包,这就是拥塞控制算法的核心,是的,为了公平。除了带宽,通信的另外一个重要指标是延时,用RTT(Round-trip time)计量,是一个包从被发送到收到ACK的间隔,一般是以毫秒计。RTT也与拥塞控制密切相关。
● Cubic拥塞控制算法
1980年代的互联网崩溃,促成了TCP拥塞控制的落地。经过十多年的发展,Cubic出现并延续至令,目前它仍然是互联网主流的拥塞控制算法,它基于著名的“加性增,乘性减”(AIMD)控制律,将丢包作为网络链路拥塞的指示。它会检测丢包,发现时便会主动降低发送频率,减少拥塞。这被称为“基于丢包”的拥塞控制算法。同类算法有几个,像更早前的Reno, BIC等。
由于只有当路由器的队列满了以后才会有丢包,因此,这类算法倾向于快速填满瓶颈路由器的缓存,然后急剧降低发包(减少50%),当队列空闲后又慢慢填满,周而复始。
Cubic算法的正常运行对链路的丢包率有一定的要求,在丢包率较高的长肥管道环境下,其发送窗口会迅速收敛到很小。另一方面,当实际可用带宽增大时,它总是会花固定的时间去探测然后慢慢增大,显得缓慢而笨拙。
● BBR拥塞控制算法
Cubic在拥塞避免阶段会逐渐加大发送窗口直至填满瓶颈队列,这种机制加速了拥塞的形成,造成了网络延时的波动。在链路瓶颈处保持最大带宽和最小延时的状态是拥塞控制的目标,但明显Cubic在目前的互联网环境中已经不能很好的胜任。谷歌提出一种基于延时带宽积的算法BBR (Bottleneck Bandwidth and RTT),使用了交替测试链路的最大带宽与最小的RTT的方法,来寻找名为Kleinrock的最佳操作点,这个点,核心特征是报文开始排队。如下图所示,Cubic的拥塞控制点是排队并且缓存已经满了。
将最近10次往返中测得的最大带宽视为Bmax,将过去10s中测得的最小RTT视为Tprop,然后根据这两个值估算BDP。
BBDP = Bmax × Tprop
BBR分别通过窗口增益和起博增益来调整CWND和发送速率,进而控制其发送行为,将拥塞快速收敛到最佳控制点。
向日葵引入BBR之后在弱网环境的提升
前文已经详细介绍了BBR拥塞控制算法的发展历程和实现原理,接下来将具体介绍引入BBR拥塞控制算法之后,向日葵在弱网环境下有怎样程度的提升。
向日葵的实验室数据显示,在跨国的弱网环境中,未使用多路复用的单连接应用,BBR能提升约10倍的端与服务器间的可用带宽(如:由120Kbps提升到>1Mbps)。同时,国内的服务器间互联时,BBR能提升1倍以上的服务器间带宽利用率(由40%到85%)。
向日葵实际应用数据显示,在经过支持BBR的服务器中转后,向日葵的连接带宽提升了3倍以上,帧率提升了5倍以上。
因此,我们可以得到如下结论:BBR拥塞控制算法能显著改善向日葵在部分使用场景下的用户体验。
当然,除了BBR拥塞控制算法,向日葵优秀的远控体验还得益于大量其他的技术优势,例如:、丢包重传及抗丢包(ARQ/FEC)技术、Visual saliency算法、自研SADDC图像算法等等。事实上,正是向日葵经年累月在技术上的坚持不懈和极致追求,以及对技术细节的不断打磨,才能够不断突破技术瓶颈,造就如今行业的领先地位。
技术分享:国民远控向日葵如何通过BBR算法提升远控体验?相关推荐
- 【转】贾佳亚港中文团队冠军技术分享:最有效的COCO物体分割算法
转自:http://www.sohu.com/a/201822261_473283 [新智元导读]物体分割(instance segmentation)是如今视觉领域最热最核心的一个问题.在这届国际图 ...
- 双11技术分享 | “喵糖”背后的商业化流量投放算法
▐ 前言 品牌合约保量广告被广泛应用于电商营销中,为广告主提供合同约定的目标人群触达次数.服务于品牌合约广告的投放分配算法,需要对每个请求分配.展示广告,以完成合约订单的展示量要求.在传统的 APP ...
- 技术分享|一种多智能体空地协同算法开发验证平台
空地协作属于多智能体协作中的异构智能体协作,是当今多智能体研究领域的热点.系统分利用了异构多机器人的功能互补性,组成跨域协作系统,实现任务协同和信息共享,从本质上提升了面对复杂环境和任务规划的感知能力 ...
- 【华为云技术分享】云图说 | 容器交付流水线ContainerOps,提升持续交付效率
容器交付流水线(ContainerOps)以DevOps理念为基础,面向从源代码到生产上线全流程,提供代码编译.镜像构建.灰度发布.容器化部署等一系列服务,助力企业落地容器DevOps最佳实践.Con ...
- 向日葵资深产品总监技术分享:“国民远控”如何在AD域环境下应用
在大型企业进行IT建设时,AD域很早就已经成为了必选项,企业选择引入其他IT服务也往往需要该服务能够对接现有的AD域体系."国民远控"向日葵作为最具代表性的国产远程控制品牌,那么其 ...
- 腾讯技术分享:微信小程序音视频技术背后的故事
1.引言 微信小程序自2017年1月9日正式对外公布以来,越来越受到关注和重视,小程序上的各种技术体验也越来越丰富.而音视频作为高速移动网络时代下增长最快的应用形式之一,在微信小程序中也当然不能错过. ...
- 精彩!安全圈的技术分享,竟成了他人割韭菜的工具?
师傅们,大家好!在网络安全这个行业中,技术分享是一种重要的学习和交流方式.然而,在中国的网络安全圈里,许多人对技术分享持保守态度,喜欢藏着掖着.这一现象在一定程度上阻碍了网络安全行业的发展,限制了我们 ...
- 龙芯架构应用迁移技术分享——搜狗输入法应用迁移
技术引领创新,用"芯"构建生态,第一期龙芯生态论坛将于2021年3月12日(周五)盛大开讲!龙芯生态论坛作为龙芯生态建设的重要技术交流窗口,将汇聚龙芯资深技术专家及行业生态伙伴精英 ...
- 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...
大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...
最新文章
- ajax 同步和异步的区别|已迁移
- springmvc的工作原理_SpringMVC工作原理
- linux 禁用ipv6 方法
- idea从mapper接口跳到xml文件
- spring core源码解读之ASM4用户手册翻译之一asm简介
- Shell入门(九)之字符串比较
- 搞一个兼容浏览器的事件函数
- linux http用户,HTTP完整请求过程
- ajax和jquery教程pdf,jquery ajax教程pdf
- java keytool 生成p12证书
- Linux自学、大数据学习前奏笔记---Linux基础知识,shell命令介绍学习
- bat脚本_获取管理员权限
- three.js各种版本的编辑器
- 【支付】银行卡支付的行为主体介绍
- 【数据结构复习自用】树的性质
- 计算机在往硬盘上写数据时寻道,计算机在往硬盘上写数据时寻道是从( )磁道开始。...
- 为何非得选择旧金山测试?通用Cruise讲述无人车炼成记
- brpc源码解析(一)—— rpc服务添加以及服务器启动主要过程
- 《Effective Modern C++》学习笔记之条款二十五:针对右值引用实施std::move,针对万能引用实施std::forward
- ECCV 2022,两位华人学者摘得最佳论文奖,本科来自清华、浙大
热门文章
- 【项目笔记_RP552D】rtthread winusb 修改 vid 与 pid
- cass光标大小怎么调_CAD如何调整十字光标和靶框大小
- Excel使用公式截取字符串
- 解决Win7缺失MSVCR120.DLL问题
- 技术革命才是真正的革命
- MacBook合盖不休眠
- UE4 EQS C++自定义节点编写
- java输出到空心三角形_java经典算法_019打印三角形(空心,实心) | 学步园
- 【解决】Error loading the file ‘Assets/.../Scene.unity‘. File is either empty or corrupted, please......
- 为什么只看重结果_只注重结果不注重过程的话