写点什么

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

评论

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

ShardingSphere RAW JDBC 分布式事务 Narayana XA 代码示例

Java 数据库 分布式事务 ShardingSphere

CSS flex 排版与动画 — 重学 CSS

三钻

CSS 大前端 排版 Flex

话题讨论 | 作为开发你是如何阅读源码的?

程序员小航

话题讨论

第七周总结

小兵

架构师训练营第 1 期第 11 周总结

owl

极客大学架构师训练营

第十一周 安全稳定作业

蓝黑

极客大学架构师训练营

Spring 源码学习 08:register 注册配置类

程序员小航

Java spring 源码 源码阅读

App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》

清菡软件测试

App

什么是工作流?工作流有什么作用?怎样配置工作流程?

Marilyn

敏捷开发 工作流

手撸一个在线css三角形生成器

徐小夕

CSS css3 大前端 CSS小技巧

Seata是什么?一文了解其实现原理

vivo互联网技术

分布式 分布式事务 分布式架构

话题讨论 | 2020就要结束了,你最想对自己说的是什么

soolaugust

话题讨论

腾讯牵头零信任产业标准工作组正式发布零信任联盟标准

话题讨论 | 程序员摸鱼的时候都喜欢干些什么

soolaugust

话题讨论

腾讯iOA与绿盟、天融信完成产品互认证,助力零信任市场协同发展

架构师训练营第 11 周学习笔记

郎哲158

话题讨论 | go、php 、java、python、cpp谁才能成为后端的主流

sinsy

Java c++ php 话题讨论 Go 语言

话题讨论 | 2020年你有什么推荐的书

soolaugust

话题讨论

源码深度解析 Handler 机制及应用

vivo互联网技术

android 客户端开发

话题讨论 | 未来十年,你认为哪门语言将要脱颖而出

soolaugust

话题讨论

探秘密码学:深入了解对称加密与密钥协商技术

京东科技开发者

网络安全 密码学

低成本快速上链 智臻链开放联盟网络正式对外开放

京东科技开发者

区块链 京东

架构师训练营第 1 期第 11 周作业

owl

极客大学架构师训练营

KMP —— 字符串分析算法

三钻

算法 大前端 KMP

话题讨论 | 深入浅出Linux内存管理,图解物理内存和虚拟内存

程序员柠檬

话题讨论

公安情报研判管控分析平台建设解决方案

t13823115967

智慧公安情报研判系统开发 智慧公安 情报研判管控分析平台

话题讨论 | 遇到的印象最深的开源项目

soolaugust

话题讨论

架构师训练营 11 周作业

郎哲158

我是程序员,我用这种方式铭记历史

kokohuang

Hexo GitHub Pages python 爬虫 中国历史 铭记历史

花火交易所APP软件系统开发(现成)

系统开发

智慧公安情报指挥合成作战管控平台开发

t13823115967

智慧公安情报研判系统开发 智慧公安 合成作战管控平台

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