【问题标题】:Processing Requests in the Background在后台处理请求
【发布时间】:2020-04-13 22:16:15
【问题描述】:

我正在使用 ASP.Net Core 和 Microsoft SQL Server 编写一个 REST API。我的要求之一是客户端将POST 某些数据发送到此 API,并且 API 在使用或读取数据之前必须以某种方式转换/处理数据。事实证明,这种处理成本很高。所以我正在考虑在后台异步执行它而不阻塞POST 请求。我正在考虑进行处理:

  • 在计划的 SQL 作业中
  • 使用在后台运行的单独 Windows 服务从 DB 中读取、执行处理并将其写回。它会比我想象的 SQL 作业慢,但代码会更具可读性。
  • 使用Hangfire。从来没有用过。不知道效果如何。

什么是最好的选择?有没有围绕这类事情的最佳实践?

【问题讨论】:

    标签: asp.net database


    【解决方案1】:

    样板

    • 将该数据存储在某处(RDBMS、非 SQL 等)
    • 回复用户他的数据已安排处理
    • 运行一些工作人员或工作人员池进行作业处理
    • 将结果存储在某处
    • 通知客户端后台作业已完成(可能只是客户端可以检查的GET /jobs/id 端点
    • 显示该结果

    您可以使用自己的守护进程、进程、脚本。如果这还不够,并且您需要更多功能,请使用看起来不错的 Hangfire。

    【讨论】:

      【解决方案2】:

      我在生产环境中使用 hangfire 将近 3 年了,是的,这是一个很好的方法,从开箱即用的 UI 仪表板重试策略,但额外的选项可以是这样的:

      • 无服务器(Azure 函数,AWS Lambda)
      • AWS SQS 或 Azure 队列 + 托管服务 docs

      【讨论】:

      • 感谢 Dmytro。我会试试hangfire。我应该提到云不是我的选择。这严格来说是本地部署
      • 例如,您可以在本地使用 rabbit MQ,或者在您的情况下使用其他 pub-sub 事物。所以工人和生产者可以分开。
      【解决方案3】:

      我发现的另一个选项是实现IHostedService,这是 ASP.Net Core 中的内置接口。详情请见this page

      【讨论】:

        猜你喜欢
        • 2015-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 1970-01-01
        相关资源
        最近更新 更多