【问题标题】:ASP.Net architecture for passing upload to third party用于将上传传递给第三方的 ASP.Net 架构
【发布时间】:2018-02-27 09:38:39
【问题描述】:

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

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

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

我希望获得有关解决此问题的最佳方法的更多架构见解。

【问题讨论】:

  • 所以如果我理解正确的话,你的用户会先上传到你的应用,然后你的应用再上传到Youtube api?
  • 是的——我们的想法是为他们提供一个界面来保存他们经常包含在多个视频中的信息,这样他们就不必在每次上传时都输入这些信息。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 哦,有趣。我一定要看看 Hangfire;看起来超级有用。非常感谢您的洞察力!
猜你喜欢
  • 1970-01-01
  • 2018-11-23
  • 2011-04-18
  • 1970-01-01
  • 2020-09-08
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多