这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
并发上传与限流
分片不一定要按顺序
分片上传的一个优点,是客户端可以并发上传多个分片,充分利用带宽。通常同时传 3~6 个分片,整体速度比串行快很多。
但并发数不能无限增大,否则会引入新的问题:
并发过大的三个代价
- 占满用户网络:所有带宽都被上传占住,用户浏览页面的其它请求变得很慢。
- 服务端吞吐下降:大量并发连接打开,网关和存储的吞吐反而下降。
- 触发限流:对象存储或网关会按用户、IP 限流,过大的并发反而被限。
所以并发数需要一个平衡点,并且最好能动态调整。
动态并发控制
工程上的常见做法:
- 客户端根据实时测速调整并发数(快就多开,慢就收敛)。
- 服务端下发建议并发数或上限,客户端遵守。
- 上传失败的分片自动降并发、退避重试,而不是立刻全开。
服务端限流
无论客户端多自觉,服务端都要按维度限流:
| 维度 | 限制什么 |
|---|---|
| 用户 | 同时进行中的上传任务数 |
| 文件 | 单个文件的分片上传频率 |
| IP | 上传请求速率、失败频率 |
限流不为了「卡用户」,而是保护系统不被单一用户或攻击者拖垮。
失败重试
并发上传意味着分片可能乱序到达、可能失败。服务端要:
- 允许分片乱序写入,以「编号 + hash」为准。
- 失败分片支持重试,且重试要幂等(重复传同一分片不报错)。
- 上传中断后,通过查询接口找回进度(第 4 章断点续传展开)。
小结
- 并发提升带宽利用率,但过大反而有害——需要动态平衡。
- 服务端按用户、文件、IP 维度限流,保护系统。
- 分片乱序、失败重试都要支持,并且幂等。
下一节看最后一步:合并与校验,别让坏文件蒙混过关。
发现内容有问题?
告诉我们哪里需要改进。
