阅读 3 分钟

腾讯轻量云规避 QoS 限速

自从腾讯云上线轻量应用服务器,我就一直在用它们的机器。总的来说挺好,因为是早期用户月租有折扣,再加上每年都有优惠活动可以以比较低的价格整年续费,部署一些自用的服务还是完全够用,可以说是物美价廉了。

这台服务器的一个重要用处就是,让我家里 NAS 上运行的 Plex Server 能在公网访问。简单来说:

  1. 使用 zerotier 做内网穿透,将 NAS 和轻量云连接在一个内网里
  2. traefik 负责将域名的流量转发到 Plex Server 所在的内网IP和端口上
  3. Plex Server 设置“自定义服务器访问 URL”

能用。但是我观察到一个现象就是,在播放视频的时候,会周期性断流卡住。实际上这是因为腾讯云轻量应用服务器有限速策略(我的服务器在香港,香港到国内的路线会有 QoS 限速),如果长时间满速占用超过额定的带宽速度,就会触发限速,导致服务连接断流。

一个好消息是,我发现轻量云香港这个到国内线路的限速策略,并没有特别严格。之前在使用的时候,发现的一个情况是,虽然购买的服务器标定带宽为 30Mbps,但是实际上峰值带宽经常能跑到 35Mbps+ 甚至 40Mbps+。所以实际上在 Plex 上播放视频的时候被断流了是因为长时间超过了标定带宽额度(30Mbps)导致的。

所以一个解决思路就是将 Plex 的上行带宽限制在 30M 以内。不过我懒得配置复杂的针对单个服务的上行带宽限制,直接就将整个机器的上行速率限制在 28Mbps 了。毕竟相比于多出的这几 Mbps 峰值速度,我还是更希望服务器网络连接能稳定。至于为什么是 28Mbps,我简单测试了一下:将服务器上行带宽限制在 28Mbps,然后在手机上使用 5G 网络播放《F1狂飙飞车》(Video 24174 kbps + Audio 768 kbps)基本上能跑满 28Mbps 而又不触发限速。

tc qdisc add dev eth0 root tbf rate 28mbit burst 64kb latency 100ms
# tc:Linux 流量控制工具
# qdisc:队列规则,控制网卡发包方式
# add dev eth0 root:给 eth0 的出口根队列添加规则
# tbf:Token Bucket Filter,用令牌桶做限速
# rate 28mbit:平均出口速率限制为 28Mbps
# burst 64kb:允许一定的突发流量,最大突发缓冲 64KB
# latency 100ms:限制队列等待时间,避免排队过久
# 效果:把 eth0 的出站流量整形成“平均 28Mbps,允许短暂突发”的模式

流量控制器TC(Traffic Control)用于Linux内核的流量控制