2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

基于 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:581812

评论

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

银行业客户体验管理现状与优化策略分析

易观分析

银行

开放原子开源基金会OpenHarmony工作委员会主席侯培新寄语OpenAtom OpenHarmony分论坛

OpenHarmony开发者

OpenHarmony

尤雨溪向初学者推荐Vite 【为什么使用Vite】

flow

签约计划第三季

海外APP推送(下篇):海外厂商通道集成指南

极光GPTBots-极光推送

sdk 厂商通道

目标检测网络R-CNN 系列

阿炜小菜鸡

深度学习 目标检测 7月月更

TDSQL-C Serverless:助力初创企业实现降本增效

石云升

全球架构师峰会 ArchSummit

万字长文,浅谈企业数字化建模蓝图

产品老高

数字化 中台架构

百问百答第48期:极客有约——可观测体系的建设路径

博睿数据

可观测性 智能运维 博睿数据 性能监测 极客有约

技术分享:国民远控向日葵如何通过BBR算法提升远控体验?

贝锐

技术分享 远程控制 TCP拥塞控制 向日葵 BBR

干货|语义网、Web3.0、Web3、元宇宙这些概念还傻傻分不清楚?(中)

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

向日葵远程控制为何采用BGP服务器?自动最优路线、跨运营商高速传输

贝锐

远程控制 向日葵

参加前端培训班学web前端技术靠谱吗

小谷哥

数据泄漏、删除事件频发,企业应如何构建安全防线?

京东科技开发者

公司管理 网络安全 安全 删库 程序员‘

「中高级试题」:MVCC实现原理是什么?

程序员啊叶

Java 编程 程序员 架构 java面试

Redis为什么这么快?Redis的线程模型与Redis多线程

程序员啊叶

Java 编程 程序员 架构 Java 面试

公司刚来的阿里p8,看完我构建的springboot框架,甩给我一份文档

程序员啊叶

Java 编程 程序员 架构 java面试

面试京东T5,被按在地上摩擦,鬼知道我经历了什么?

程序员啊叶

Java 编程 程序员 架构 java面试

一百五十个终极Java 经典面试题(你会多少题?)

程序员啊叶

Java 编程 程序员 架构 java面试

什么是RPC?RPC框架dubbo的核心流程

程序员啊叶

Java 编程 程序员 架构 java面试

行业案例|指标中台如何助力银行业普惠金融可持续发展

Kyligence

大数据 普惠金融 指标中台

Python图像处理丨两种实现图像形态学转化运算

华为云开发者联盟

Python 人工智能 图像处理 图像

web前端开发培训课程如何学习

小谷哥

在北京选择前端培训班学习大数据

小谷哥

Python爬虫,JS逆向之 webpack 打包站点原理与实战

梦想橡皮擦

Python 爬虫 7月月更

浅谈低代码技术在物流运输平台中的搭建与管理

王平

iOS单元测试的那些事儿

珲少

敲黑板画重点:七种常见“分布式事务”详解

程序员啊叶

Java 编程 程序员 架构 java面试

深度学习3D人体姿态估计国内外研究现状及痛点

阿炜小菜鸡

深度学习 人体姿态估计

程序员培训学习后好找工作吗?

小谷哥

向日葵资深产品总监技术分享:如何在AD域环境下应用

贝锐

安全 AD域 远程控制 向日葵

大数据培训机构有哪些值得推荐?

小谷哥

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