写点什么

基于 bbr 拥塞控制的云盘提速实践

  • 2019-11-28
  • 本文字数:2082 字

    阅读完需:约 7 分钟

基于bbr拥塞控制的云盘提速实践

云盘的速度是业界硬指标,是产品口碑和形象。传统的提速手段是大多基于代理服务器,用合适的代理连接用户与存储服务器。此方式有一定效果,但未结合国内网络情况和网络原理进行解决。bbr 拥塞控制算法针对长肥网络有很好的疗效,非常适合广域网情况,实践后速度迅猛提升。

引言

云盘作为数据存储产品,无论个人还是公司使用,其速度均是第一指标,也是用户评判云盘好坏的关键因素。速度上的提升会带来好的用户体验,以及用户粘连性。所以提速成为迫切需求。

传统 tcp 拥塞控制

1 广域网络环境

目前广域网普遍属于高带宽,高延迟,存在一定丢包率。网络丢包存在两种情况,第一为拥塞丢包,第二为错误丢包。错误丢包可能是网络传输过程中异常导致,大概有十万分之一的概率。


国内有很多二级运营商,它们大多为共享带宽,其网络 buffer 也是共享,网络共享 buffer 打满,会导致丢包,此类丢包造成滑动窗口折半,发送速率骤降。实则各用户带宽并未完全打满。


此类网络以下统称为长肥网络:即往返时间长,但带宽较大。

2 传统 tcp 拥塞控制算法

传统 tcp 拥塞控制目的是最大化打满网络带宽。一条链路就像水管,装满此水管需要估算管内容量。


管内容量 = 水管粗细(链路带宽) * 水管长度(往返延迟)


拥塞控制过程:慢启动、加性增、乘性减。开始指数增加发送窗口,遇到丢包快速折半发送窗口,降低发送速率。

3 tcp 拥塞控制无法解决如下问题

无法定位丢包原因

无法区分丢包是拥塞导致还是错误导致,如果是网络传输错误导致丢包,其实还未打满带宽。在有一定丢包率的长肥网络中发送窗口会收敛到很小,导致发包速率很小。

缓冲区膨胀问题

网络缓冲区膨胀,网络中有一些 buffer,用于吸收波动的流量。开始阶段以指数级速率快速发包,导致 buffer 快速打满,buffer 满后会产生丢包。丢包造成发送窗口骤降,而后发送窗口和 buffer 都会逐渐下降收敛。此情况未能打满带宽以及 buffer 使用率。认为此类丢包是带宽打满,实则不然,只是开始过快的增长导致 buffer 打满丢包而已。



图 2.1 缓冲区膨胀现象

bbr 拥塞控制

1 解决上述两类问题

  1. 不考虑丢包情况,因为无法区分拥塞丢包,错误丢包。

  2. 缓冲区膨胀现象是同时估计带宽和延迟导致的。因为发送窗口需要这两参数计算出管内容量,但同时计算会导致不准。例如:要测最大带宽需灌满水管,此时延迟必然高,因为缓冲区占满,包排队需时间。而要测最低延迟,需网络流量低,此时缓冲区基本为空,延迟低,但此时管内带宽估值也低。所以无法同时测量带宽和延迟的最好情况,即最大带宽和最低延迟。这就是本质,为什么传统 tcp 在长肥网络中很难打满带宽。


解决办法:分别估算带宽和延迟,以计算出最合适的管内容量。

2 bbr 拥塞控制过程

慢启动

指数增长发包,不理会丢包,不折半窗口,只检查有效带宽是否还再增长,直到有效带宽不再增长为止。有效带宽是指还未开始占用 buffer。

排空阶段

慢启动后,发包量依然有 3 倍管内容量,此时降低发包速率,以免管中多余包占满 buffer,导致丢包。

带宽探测阶段

每 8 个往返为一个周期,第一个往返,bbr 尝试以 5/4 速率增大发包,以估算带宽是否打满,第二个周期以 3/4 速率降低发包,以排空 buffer 中的冗余包,避免发生膨胀。剩下 6 个往返以新的带宽估算速率发包。如此为一个周期,不断探测直到打满真实带宽,如图 3.1 所示。

延迟探测阶段

每隔 10 秒,如果未发现新的最低延迟。此时发送窗口减到 4 个包,以此段时间发包的最低延迟作为估值。然后发送窗口回到之前的状态。



图 3.1 带宽检测持续增长,绿色为发包数量,蓝色为延迟



图 3.2 丢包率和有效带宽示意图。绿色为 bbr,红色为传统 tcp

3 bbr 小结

bbr 开始阶段不会迅猛打满管道,主要是避免缓冲区膨胀带来的丢包和延迟,后续交替探测带宽和延迟。探测带宽时,先增大发送速率后减小,也是避免缓冲区膨胀问题,丢包率降低不断收到有效 ack,进而持续增大发送窗口,如此轮回得到最大带宽。探测延迟时,发送窗口降为 4 个包,此时缓冲区未占满,管内通畅,探测到的延迟也是低而准的。交替探测带宽和延迟得到准确的管内容量,排空方式能避免缓冲区膨胀带来的丢包和延迟。

4 bbr 适合场景

  1. 存在一定丢包率的高带宽,高延迟网络。

  2. buffer 较小的慢接入网络。

bbr 在云盘中的实践

内核升级

代理服务器内核升级到 4.9 以上

开启 bbr 拥塞控制算法

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf       echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf       sysctl -p       sysctl net.ipv4.tcp_available_congestion_control       sysctl -n net.ipv4.tcp_congestion_control
复制代码

调整 tcp 内核参数

调整 tcp 内核参数,让滑动窗口大小突破 64kb


sysctl net.ipv4.tcp_window_scaling=1
复制代码

提速结果

人均速度提升


图 4.1 人均速度图


人均速度提升:50%左右

速度区域占比提升


图 4.2 速度区域占比图,蓝色为 1M/s- 2M/s,绿色为 2M/s 以上


1M 以上人数占比提升:100%左右


参考文献:

[1] Cardwell, Neal, et al. “BBR: Congestion-Based Congestion Control.” Queue14.5 (2016): 50.


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/dD395lMqLD4U61ZT2eAsoQ


2019-11-28 14:581193

评论

发布
暂无评论
发现更多内容

BOE(京东方)与JDG京东电竞俱乐部达成全面品牌战略合作 赋能多款高端电竞新品开启2024电竞产业“开门红”

科技热闻

测试管理 | 测试开发高薪私教线下班手把手带你提升职业技能

测吧(北京)科技有限公司

测试

如何实现一个百万亿规模的时序数据库,百度智能云 BTS 架构解析和实践分享

Baidu AICLOUD

时序数据库

【2024最新版】Sapphire视觉特效插件功能介绍 附蓝宝石插件破解补丁

南屿

视觉特效插件 Boris FX Sapphire 蓝宝石插件

免费的快递预约上门取件API接口【快递鸟】

快递鸟

快递物流

共话 AI for Science | 北京大学王超名:BrainPy,迈向数字化大脑的计算基础设施

ModelWhale

人工智能 AI 脑科学 AI4S 类脑智能

和鲸CEO范向伟入选2022年上海市东方英才计划创业项目领军创业人才

ModelWhale

人工智能 创业 AI 东方英才 前沿产业

聚焦AI4S,产学研专家齐聚,探讨AI工具在多领域应用的现状与趋势

ModelWhale

React和Vue的有何不同?

伤感汤姆布利柏

云上业务一键性能调优,应用程序性能诊断工具 Btune 上线

Baidu AICLOUD

性能优化 运维监控

​比特币大跌的 2 个原因

TechubNews

百万级监控指标的秒级采集与处理

鲸品堂

监控 解决方案

Python多任务协程:编写高性能应用的秘密武器!

测吧(北京)科技有限公司

测试

想拥有一个属于自己的网站吗?

zhumingwu

【新手快速入门】在线快速搭建AI原生应用

AI大咚咚

从零开始用Rust编写nginx,命令行参数的设计与解析及说明

不在线第一只蜗牛

nginx rust 开发语言

unitypro安装教程 Unity Pro 2018 Mac破解版下载安装

南屿

Unity Pro 2019 Unity Pro 安装教程 3D游戏动画开发工具

photoshop 2022新功能介绍 含ps2022破解版下载资源

Rose

ps PS2022下载 Photoshop 2022下载 Photoshop 2024破解版

良心推荐!五个超好用的Vue3工具

伤感汤姆布利柏

点燃你的Python技能:剖析闭包与装饰器的魔力

测吧(北京)科技有限公司

测试

MCtalk·CEO对话 x 高成资本丨2024年,SaaS 还是不是一门好生意?

ToB行业头条

CQ 社区版 2.8.0 | 支持TiDB、StarRocks,新增列过滤算法、导出模式设置等

BinTools图尔兹

数据库 数据库管理 数据脱敏 数据变更

深入了解Redis数据结构

EquatorCoco

redis 数据结构 前端

从零开始:编写个性化的 Spring Boot 启动 Banner

Liam

Java 程序员 DevOps Spring Boot 后端

一分钟带你搞定MySQL5.5安装教程

小魏写代码

华为阅读合作伙伴年度会议圆满举行,将持续共建更智慧、更丰富数字阅读平台

最新动态

高效灌溉 - 真正意义的降本增效

zhumingwu

用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

测吧(北京)科技有限公司

测试

sketch文件导出没有背景色怎么办? sketch背景色消失的解决办法

Rose

Sketch下载 sketch无背景 矢量图设计 sketch mac破解版

基于bbr拥塞控制的云盘提速实践_文化 & 方法_卿鹏_InfoQ精选文章