并发上传与限流

分片不一定要按顺序

分片上传的一个优点,是客户端可以并发上传多个分片,充分利用带宽。通常同时传 3~6 个分片,整体速度比串行快很多。

但并发数不能无限增大,否则会引入新的问题:

并发过大的三个代价

  1. 占满用户网络:所有带宽都被上传占住,用户浏览页面的其它请求变得很慢。
  2. 服务端吞吐下降:大量并发连接打开,网关和存储的吞吐反而下降。
  3. 触发限流:对象存储或网关会按用户、IP 限流,过大的并发反而被限。

所以并发数需要一个平衡点,并且最好能动态调整。

动态并发控制

工程上的常见做法:

  • 客户端根据实时测速调整并发数(快就多开,慢就收敛)。
  • 服务端下发建议并发数或上限,客户端遵守。
  • 上传失败的分片自动降并发、退避重试,而不是立刻全开。

服务端限流

无论客户端多自觉,服务端都要按维度限流:

维度限制什么
用户同时进行中的上传任务数
文件单个文件的分片上传频率
IP上传请求速率、失败频率

限流不为了「卡用户」,而是保护系统不被单一用户或攻击者拖垮。

失败重试

并发上传意味着分片可能乱序到达、可能失败。服务端要:

  • 允许分片乱序写入,以「编号 + hash」为准。
  • 失败分片支持重试,且重试要幂等(重复传同一分片不报错)。
  • 上传中断后,通过查询接口找回进度(第 4 章断点续传展开)。

小结

  • 并发提升带宽利用率,但过大反而有害——需要动态平衡。
  • 服务端按用户、文件、IP 维度限流,保护系统。
  • 分片乱序、失败重试都要支持,并且幂等。

下一节看最后一步:合并与校验,别让坏文件蒙混过关。

发现内容有问题?

告诉我们哪里需要改进。