用于将上传传递给第三方的ASP.Net架构

时间:2017-09-18 18:50:30

标签: c# asp.net asp.net-mvc youtube architecture

我正在开发一个应用程序,该应用程序旨在站在YouTube API之上,并将用户上传的内容传递到YouTube.Videos.Insert端点(使用他们提供的.NET客户端库)。现在,我的应用程序是作为一个简单的ASP.NET MVC应用程序构建的,但我很快意识到这可能不是最好的方法,因为问题很快就会发现上传过程可能是一个相当长时间运行的过程。

为了有效地做到这一点,最佳实践架构会是什么?到目前为止,我的想法是:

  • 某种排队策略,MVC应用程序将上传内容放入队列,然后后台进程将其弹出并执行进一步上传到YouTube。但这似乎效率低下,因为它会临时存储文件并再次检索文件以处理应用程序的总体开销。
  • 一个单独的微服务API,其端点用于接收实际上传,我将通过我的应用程序前端的Javascript联系;它将接收文件,返回202 Accepted,并将上传流传递到异步线程并立即处理。这似乎更有效但我担心可扩展性,如果除了我以外的任何人最终都使用这个东西。

我希望在解决此问题的最佳方式上获得额外的架构洞察力。

1 个答案:

答案 0 :(得分:1)

我会使用单独的服务API来解决这个问题。上传许多可能较大的文件的任务是一个长期运行的过程,您不想触摸您的Web应用程序。这种方法的主要优点是,如果出现问题,它不会影响您的Web应用程序。如果上传失败,您就不想重新启动您的网络应用程序来解决这个问题。

由于您担心这种方法的可扩展性,我会考虑使用后台任务管理器,它非常适合这些即发即弃的任务。就个人而言,我使用并推荐Hangfire,因为它带有一个漂亮的integrated dashboard,可让您在运行时观察任务。它还允许您自动重试失败(可配置),我认为总体来说它很适合您的需求。

我将它用于类似的情况,其中我需要建立多个websocket连接,并且如果它失败则重新建立一个连接。我有一个小程序,通过参数将服务添加到我的Hangfire队列。

其他选项包括Quartz.Net和FluentScheduler,但遗憾的是我对它们并不熟悉。