6

我有一个使用 3rd 方 exe 处理请求的 asp.net 网站。目前我的工作流程是

  1. 用户使用任何浏览器访问网站并填写包含工作详细信息的表格

  2. 网站调用正在侦听端口的 WCF 自托管 Windows 服务

  3. Windows 服务启动 3rd 方 exe 来处理作业并将结果返回到网站

  4. 网站将返回的结果展示给用户

上面的网站是一个原型,现在需要变成一个生产就绪的部署。我意识到上述架构有很多可能会破坏的点。例如,如果机器关闭或 Windows 服务崩溃并且不再侦听端口,则所有当前请求都将停止处理。为了使架构更加健壮,我正在考虑以下内容

  1. 用户使用任何浏览器访问网站并填写包含工作详细信息的表格

  2. 网站将工作详细信息写入数据库

  3. 每 10 秒轮询一次数据库以获取新作业的 Windows 服务会选择该作业并使用第 3 方应用程序执行它。结果被写回数据库。

  4. 现在已经开始轮询数据库的网站,获取结果并将其显示给用户。

第二种架构为我提供了更多的日志记录功能,如果它们在队列中,它们可以重新开始。然而,它涉及大量可能不可扩展的轮询。谁能推荐一个更好的架构?

4

2 回答 2

0

我在我的一个应用程序中实现了相同的架构,其中用户发出多个请求来处理。所以我有 -

  1. 用户访问网站并选择参数等。提交请求
  2. 请求与所有详细信息 + 用户名等一起存储到数据库表中
  3. 服务查看数据库表并以先进先出的方式获取请求
  4. 处理完请求后,根据 requestId 将状态更新为 Failed 或 Completed 到数据库表中,网站上的用户可以看到
  5. 如果有任何请求,服务将接收下一个请求,否则停止。
  6. 服务每 30 分钟运行一次
于 2013-01-10T04:09:15.110 回答
0

我会选择 MSMQ 或RabbitMQ而不是轮询。

这样,您可以将处理任务卸载到队列的多个消费者(可能与 Web 服务器分开的服务器),并并行处理更多请求。

于 2013-01-10T04:52:14.147 回答