保存下载偏移能够恢复网络进度,SHA-256 的计算进度却需要额外处理。没有保存摘要中间状态时,一个已经接收 80 GB 的文件,需要重新扫描这段前缀才能继续计算完整摘要。按 200 MB/s 的读取速度估算,扫描约需 6 分 40 秒。断点避免了重复下载,恢复过程仍然占用磁盘读取能力。
在每天约 3 TB 的海外文件回传中,这些读取会与正常下载争用磁盘资源。连接共享和容量反馈也存在类似问题:多个并发任务可能依赖同一条 TCP 连接,网络发送量可能被误认为空间释放量。优化需要核对各环节实际占用与释放的资源,使并发、恢复和上传预算依据有效处理能力运行。
传输连接与任务调度
HTTP/2 可以让多个请求复用连接。对于短请求,这降低了建立连接的开销;大文件持续下载时,多个任务可能共享同一条 TCP 连接及其拥塞控制状态。应用层并发并不意味着底层存在多条独立传输连接,HTTP/2 本身也没有消除 TCP 层的队头阻塞。HTTP/2 标准说明
并行下载使用独立 TCP 连接,可以分别维护传输与拥塞控制状态,同时保留空闲连接复用。一条连接发生停滞时,对其他下载的直接影响减小。代价是连接数量和状态开销增加,因此并发仍设上限,以 8 个任务作为配置起点,机械盘或磁盘繁忙时需要降低。
连接数量之外,往返时延和在途数据量同样影响吞吐。假定目标为 300 Mbps、往返时延为 150 毫秒,带宽时延积约为 5.6 MB。路径需要维持相应规模的在途数据;单纯增加应用层任务数,未必改善共享连接的传输能力。独立连接是否提高完成吞吐,需要结合实际线路与磁盘负载验证。
小文件增多时,任务认领的固定开销也会累积。按接收端空闲处理能力批量获取任务,单批最多 8 个对象,可以减少逐个认领的控制请求。队列为空时,服务端采用最长约 20 秒的长轮询,发布新对象后唤醒请求,避免频繁查询空队列。批次大小需要受空闲工作槽位约束,否则提前领取的任务会占用租约,却不能及时开始传输。
若每天 3 TB 由平均 8 MB 的文件组成,每天约需处理 375,000 个文件。单对象认领对应约 375,000 次请求,满批 8 个时约为 46,875 次,减少约 87.5%。这一数值是满批条件下的请求量推算;实际批次大小由队列与空闲处理能力决定,端到端吞吐仍受网络和磁盘限制。
摘要检查点与恢复开销
SHA-256 的完整摘要依赖整个文件的计算状态。只有下载偏移时,续传需要重读已经保存的前缀,再接着处理剩余内容。文件越大、恢复次数越多,重复读取的负担越明显;仅增加下载并发,还可能加重恢复任务与正常写入之间的磁盘争用。
检查点需要同时保存已持久化偏移和摘要中间状态,两者必须对应同一段内容。文件先同步到磁盘,再保存相应的计算进度;恢复时加载检查点,截去其后的尾部,从可信偏移继续。这样不会把尚未持久化的字节计入已经完成的校验进度。检查点还要核对对象身份、长度和摘要,临时文件通过独占锁防止多个下载进程交错写入。
| 已下载前缀 | 以 200 MB/s 重建摘要所需的读取时间 |
|---|---|
| 8 GB | 约 40 秒 |
| 80 GB | 约 6 分 40 秒 |
| 240 GB | 约 20 分钟 |
表中采用假定的本地读取速度,未计缓存和摘要计算的 CPU 开销。摘要状态有效时,恢复主要读取少量检查点信息,可以避免前缀扫描。这部分收益来自本地 I/O 减少,不宜直接计为网络流量节省;状态缺失或不可恢复时,仍需重读或重新下载。
检查点频率决定同步负担和可能重传的尾部大小。间隔约为 5 秒,在写入速度为 40 MB/s、最近一次成功检查点距故障不超过 5 秒的条件下,未确认尾部约为 200 MB。提高频率可以缩短这一范围,也会增加同步次数;实际尾部还受磁盘同步耗时影响。
上传侧也可以减少独立的摘要扫描。写入过程中同步计算摘要,能够复用已经经过内存的数据;遇到乱序写入,则需要有界缓冲暂存尚不能按顺序计算的部分,超出处理能力时回退到完整文件扫描。缓冲必须有上限,否则磁盘开销会转化为不可控的内存占用。
以每天 3 TB、顺序读取 200 MB/s 估算,一次全量扫描需要约 4 小时 10 分钟。这是额外读取工作的累计时间推算,任务并行和缓存会改变实际等待时间。流式摘要对磁盘受限的负载更有价值,完整扫描则保留为兼容复杂写入模式的恢复路径。
磁盘反馈与空间预留
下载速率反映网络发送量,删除速率反映空间释放量,两者统计的事件不同。文件发送结束后仍可能等待校验、持久化确认或回收。若取两者中的较大值估算排空能力,就会把尚未清理的文件提前视为空闲容量,上传预算因而可能高于磁盘能够承受的水平。
上传预算应以实际清理速度为依据。进入软水位后,预算由平滑清理速率与可用余量共同组成:清理能力支撑持续写入,扣除安全底线和已预留空间后的余量,再按目标缓冲时间分配。删除以完整文件为单位,瞬时速率具有突发性,因此清理能力采用较慢的平滑估计。预算下降立即生效,恢复时逐步放宽,避免一次集中删除被误判为持续排空能力。
每天进入 3 TB,假设国内端持续完成 200 Mbps 的有效交付,一天约处理 2.16 TB,日净积压约为 0.84 TB。额外 500 GB 余量只能支撑约 14.3 小时。扩大磁盘延长了可承受时间,但只有长期交付和清理能力达到流入量,积压才能稳定。
| 磁盘水位 | 控制行为 |
|---|---|
| 75% | 根据清理能力和可用余量收紧上传预算 |
| 90% | 拒绝新上传,保留下载与清理 |
| 95% 或最低可用空间不足 | 停止写入,报告暂时无法接收新工作 |
水位阈值负责限定允许的动作,速率反馈负责调整阈值以内的写入预算。容量不足时,服务进入仅排空状态,继续下载、确认和清理。若直接停止整个进程,能够释放空间的操作也会停止,容量保护反而难以自行解除。
并发操作还存在重复分配同一份余量的问题。剩余 500 GB 时,三个各需 200 GB 的任务若分别检查,都可能满足各自条件,累计需求却达到 600 GB。分片组装、续传复制和国内并发下载需要累计预留空间,使检查包含已经承诺、尚未实际写入的占用。上传槽位采用有限等待,过载任务及时返回,不长期占据协议处理资源。
账号预算按全部注册账号分配,会使闲置账号保留未使用的份额。假定总预算为 100 MB/s,10 个等权账号中只有 2 个活跃,按全部账号分配时各得 10 MB/s;只在活跃上传账号之间按权重分配时,两者可以分别获得 50 MB/s,同时继续遵守全局预算和各自上限。这提高了预算利用率,实际吞吐仍由传输路径决定。
版本顺序与异常处理
同名、不同内容的目标文件,可能是正常更新,也可能来自其他写入程序。统一拒绝覆盖能够保护已有内容,却会使正常更新反复进入冲突状态。并发与重试还可能使旧版本晚于新版本完成,仅比较路径或下载完成时间,无法确定内容应当如何替换。
接收端需要记录每个路径已经交付的版本,并区分自身管理的文件和其他来源的文件。新版本可以更新由接收端管理的内容,迟到的旧版本不再覆盖新内容。其他来源的本地文件按备份、覆盖或拒绝策略处理,默认保留冲突副本。备份减少了立即人工处理的需要,其空间占用也必须纳入容量管理。
租约失效后,继续下载可能与新的持有者重复处理同一任务。续租根据剩余租约时间安排,远端明确处理权失效时停止当前下载。正常退出时交还未完成任务,退出动作不计入失败次数,使维护与传输故障分别记录。
暂时错误和永久错误采用不同恢复方式。网络波动等暂时错误退避后回到队尾,路径非法或冲突策略拒绝等无法自动恢复的任务进入异常列表,停止反复投递。异常任务可以查看、重新入队或删除,正常文件继续处理。
重复交付的成本随传输量累积。每月 90 TB 中,额外 1% 为约 0.9 TB;按香港 OSS 公网出站的边际档位估算,增加约 85.50 美元流量费用。固定租金配置下,重复传输同样占用带宽和交付窗口。已有内容核对可以省去重复下载,幂等确认处理响应丢失后的重试,版本顺序与异常分类则减少错误替换和无效重试。OSS 官方价格
运行维护与状态观测
新增账号、凭证轮换和证书续期属于日常维护。如果每次变更都需要重启服务,就会反复干扰在途传输。账号与证书采用热加载,可以缩小这类维护的影响范围;确实需要停止服务时,先拒绝新工作,再等待在途传输完成或保存恢复状态。启动时核对数据卷身份,防止挂载缺失后误写系统盘。
观测数据需要同时覆盖磁盘预留、各状态存量、异常任务、账号积压和最老文件等待时间。速率描述当前处理能力,存量和等待时间反映交付是否长期稳定。最老等待时间持续增长时,应结合各阶段存量检查任务认领、传输、确认和清理;下载速率本身无法解释全部积压。
进程存活与能够接收新工作分别报告。节点因容量不足而拒绝上传时,仍需保持下载排空能力,重启无法改变持续流入超过清理能力的事实。这些机制依赖单机范围内的持久化状态;机器或数据盘失效后的跨节点恢复,还需要独立的副本与故障转移设计。