【发布时间】:2017-01-15 15:45:45
【问题描述】:
我正在创建一个 Web 服务来处理文件(这可能很耗时),并且我正在尝试通过确保 Web 服务器不会一次在内存中包含太多文件来证明它的未来。
为了实现这一点,我允许用户上传文件,我立即将其放入 Azure blob 存储,并为用户提供该文件的 ID。
与此同时,文件已在后台添加到处理队列中(由单独的应用程序处理),完成后,会将输出文件添加到 azure 并更新数据库以反映已完成的操作。
我期望用户做的是使用我在他们成功上传文件时给他们的 ID,调用网络服务说“我的文件准备好了吗?如果是,请将其提供给我”。
这是一种可接受的做法吗?
最初我使用它是为了让用户必须等待整个操作完成,这样更简洁,但感觉它的扩展性不是很好。
我的想法是,如果我将文件处理组件从请求中分离出来,并且文件进入处理队列,它可能会立即得到处理,但也可能需要几分钟(取决于网络的繁忙程度服务获取 - 最坏的情况,如果我不实施自动缩放可能需要几个小时),并且我担心让 Web 请求可能会停留很长时间。
我是否过度设计了这个,或者这是一个明智的方法?
【问题讨论】:
-
这是一个明智的做法。
标签: web-services azure asp.net-web-api restful-architecture api-design