异步文件转移

一、同步文件上传架构

同步上传是一种传统的文件传输方式。在该模式下,整个上传流程是线性、连续的,客户端发送请求后,必须等待整个文件传输过程完成,才会收到最终的确认响应。这种上传架构的优点是操作简单,流程透明,上传结果可以即时反馈给用户。我们通过以下流程图来理解同步上传:

  • 客户端首先将文件发送至上传服务(步骤 1)。
  • 上传服务将文件直接传输至 OSS(步骤 2、3)。
  • OSS 完成存储后,上传服务向客户端确认传输完成(步骤 4)。

优点

  • 操作简单,客户端可以立刻得到文件上传结果。
  • 适合小文件或对实时性要求较高的场景。

缺点

  • 在传输大文件时,客户端需要长时间等待,导致用户体验较差。
  • 上传过程中如果网络中断或 OSS 处理时间较长,容易引发超时或失败。

二、异步文件上传架构

异步上传通过分离上传流程中的不同阶段,能够有效提高系统的响应速度和用户体验。相较于同步上传,异步架构通过引入临时存储任务队列来解耦上传服务与最终存储 OSS 的交互过程。具体流程如下:

  • 客户端将文件发送至上传服务(步骤 1)。
  • 上传服务将文件临时存储到临时存储区,并同时向任务队列提交存储任务(步骤 2、3)。
  • 转移服务根据任务队列处理存储请求,并将文件转移至 OSS(步骤 4、5)。
  • OSS 完成存储后,转移服务更新任务队列并通知上传服务,完成上传确认(步骤 6)。

优点

  • 大幅提高用户体验,客户端无需等待完整上传流程的结束即可得到反馈。
  • 更适合处理大文件或批量文件上传,提升系统的并发能力。
  • 通过任务队列可以实现上传过程的容错和自动恢复,增强系统的可靠性。

缺点

  • 相较于同步上传,系统架构更为复杂,涉及更多组件(如任务队列、临时存储等)。
  • 如果处理任务队列时出现问题,可能导致上传延迟,甚至任务丢失。

三、同步与异步架构的对比

同步与异步上传架构的核心区别在于是否将文件传输过程分离。同步上传架构更适合简单、快速反馈的场景,而异步上传架构则在提升系统并发处理能力、应对大文件上传需求上具有明显优势。

从下图中可以直观地看到二者的区别:

  • 同步上传过程中,所有步骤必须严格依赖前一步的完成。
  • 异步上传则通过引入中间存储和任务队列,使得上传服务与最终存储解耦,提高了系统响应效率。

异步逻辑架构解析

1. 上传流程

上传流程是客户端向服务器发起文件上传请求并暂时将文件存储到临时存储区域的过程。这个流程涉及以下几个步骤:

  1. 客户端发起上传请求:客户端首先将需要上传的文件发送到上传服务。

    • (步骤 1)客户端将文件上传到服务器的上传服务。
  2. 上传服务存储文件:上传服务接收到客户端的文件后,会将文件存储到临时存储区域,以便在后续的转移过程中将文件转移到最终的存储位置。

    • (步骤 2)上传服务将文件存储在临时存储区中。
  3. 任务队列:上传服务在将文件存储至临时存储后,会将文件上传任务添加到任务队列。任务队列用于异步处理,将存储的文件通过后续流程转移到最终的存储位置(OSS)。

    • (步骤 3)上传服务将文件的相关信息存入任务队列,等待处理。
  4. 完成上传:上传服务向客户端确认文件已成功上传,并完成整个上传流程。此时,文件还未被实际存储至 OSS,而是保存在临时存储中,等待后续处理。

    • (步骤 4)上传服务向客户端返回上传结果,上传流程结束。

2. 转移流程

转移流程是在文件成功上传并存储到临时存储后,将其最终转移到 OSS(对象存储服务)的过程。这个流程是异步进行的,即客户端无需等待文件真正存储到 OSS 后才得到反馈。

  1. 任务队列调度:任务队列中的任务会由转移服务读取,开始将临时存储中的文件转移到 OSS。

    • (步骤 1)任务队列中的任务被转移服务读取。
  2. 转移文件至 OSS:转移服务从临时存储中获取文件,并将文件上传到 OSS(对象存储服务)。

    • (步骤 2)转移服务将文件从临时存储转移到 OSS。
  3. OSS 确认接收:文件上传至 OSS 后,OSS 会确认接收到文件,并返回存储结果。

    • (步骤 3)OSS 接收到文件并确认。
  4. 通知转移完成:转移服务在收到 OSS 的存储确认后,会将任务队列中的任务标记为完成,并通知相关服务文件已成功存储。

    • (步骤 4)转移服务通知任务完成,整个转移流程结束。

3. 架构优点

该架构最大的优点是客户端不需要等待整个文件上传和存储流程完成,上传服务在文件临时存储后即可向客户端返回结果,极大提高了用户体验。同时,任务队列和转移服务的引入使得系统可以高效地处理大量文件上传任务,尤其适用于大文件和批量上传场景。

通过这种异步处理机制,系统的可靠性和可扩展性得到了提升,文件上传和存储的解耦还允许在出现问题时重新尝试文件转移,增强了系统的容错能力。

posted @ 2024-09-09 09:18  daligh  阅读(61)  评论(0)    收藏  举报